Browse Source

[svn r10652] Removing for now as it is not being used at all and takes a lot of space

Yannick Warnier 18 years ago
parent
commit
92e81e660b
100 changed files with 0 additions and 29743 deletions
  1. 0 195
      main/inc/lib/javascript/dojo/LICENSE
  2. 0 176
      main/inc/lib/javascript/dojo/README
  3. BIN
      main/inc/lib/javascript/dojo/Storage_version6.swf
  4. BIN
      main/inc/lib/javascript/dojo/Storage_version8.swf
  5. 0 33
      main/inc/lib/javascript/dojo/build.txt
  6. 0 5593
      main/inc/lib/javascript/dojo/dojo.js
  7. 0 7439
      main/inc/lib/javascript/dojo/dojo.js.uncompressed.js
  8. BIN
      main/inc/lib/javascript/dojo/flash6_gateway.swf
  9. 0 54
      main/inc/lib/javascript/dojo/iframe_history.html
  10. 0 72
      main/inc/lib/javascript/dojo/src/AdapterRegistry.js
  11. 0 309
      main/inc/lib/javascript/dojo/src/Deferred.js
  12. 0 12
      main/inc/lib/javascript/dojo/src/animation.js
  13. 0 217
      main/inc/lib/javascript/dojo/src/animation/Animation.js
  14. 0 40
      main/inc/lib/javascript/dojo/src/animation/AnimationEvent.js
  15. 0 136
      main/inc/lib/javascript/dojo/src/animation/AnimationSequence.js
  16. 0 39
      main/inc/lib/javascript/dojo/src/animation/Timer.js
  17. 0 18
      main/inc/lib/javascript/dojo/src/animation/__package__.js
  18. 0 248
      main/inc/lib/javascript/dojo/src/behavior.js
  19. 0 339
      main/inc/lib/javascript/dojo/src/bootstrap1.js
  20. 0 174
      main/inc/lib/javascript/dojo/src/bootstrap2.js
  21. 0 162
      main/inc/lib/javascript/dojo/src/browser_debug.js
  22. 0 146
      main/inc/lib/javascript/dojo/src/collections/ArrayList.js
  23. 0 203
      main/inc/lib/javascript/dojo/src/collections/BinaryTree.js
  24. 0 125
      main/inc/lib/javascript/dojo/src/collections/Collections.js
  25. 0 129
      main/inc/lib/javascript/dojo/src/collections/Dictionary.js
  26. 0 153
      main/inc/lib/javascript/dojo/src/collections/Graph.js
  27. 0 87
      main/inc/lib/javascript/dojo/src/collections/Queue.js
  28. 0 84
      main/inc/lib/javascript/dojo/src/collections/Set.js
  29. 0 146
      main/inc/lib/javascript/dojo/src/collections/SkipList.js
  30. 0 211
      main/inc/lib/javascript/dojo/src/collections/SortedList.js
  31. 0 85
      main/inc/lib/javascript/dojo/src/collections/Stack.js
  32. 0 22
      main/inc/lib/javascript/dojo/src/collections/__package__.js
  33. 0 75
      main/inc/lib/javascript/dojo/src/compat/0.2.2.js
  34. 0 15
      main/inc/lib/javascript/dojo/src/crypto.js
  35. 0 548
      main/inc/lib/javascript/dojo/src/crypto/Blowfish.js
  36. 0 11
      main/inc/lib/javascript/dojo/src/crypto/LICENSE
  37. 0 193
      main/inc/lib/javascript/dojo/src/crypto/MD5.js
  38. 0 22
      main/inc/lib/javascript/dojo/src/crypto/Rijndael.js
  39. 0 154
      main/inc/lib/javascript/dojo/src/crypto/SHA1.js
  40. 0 20
      main/inc/lib/javascript/dojo/src/crypto/SHA256.js
  41. 0 17
      main/inc/lib/javascript/dojo/src/crypto/__package__.js
  42. 0 15
      main/inc/lib/javascript/dojo/src/data.js
  43. 0 62
      main/inc/lib/javascript/dojo/src/data/Attribute.js
  44. 0 332
      main/inc/lib/javascript/dojo/src/data/Item.js
  45. 0 28
      main/inc/lib/javascript/dojo/src/data/Kind.js
  46. 0 59
      main/inc/lib/javascript/dojo/src/data/Observable.js
  47. 0 70
      main/inc/lib/javascript/dojo/src/data/ResultSet.js
  48. 0 25
      main/inc/lib/javascript/dojo/src/data/Type.js
  49. 0 55
      main/inc/lib/javascript/dojo/src/data/Value.js
  50. 0 22
      main/inc/lib/javascript/dojo/src/data/__package__.js
  51. 0 112
      main/inc/lib/javascript/dojo/src/data/format/Csv.js
  52. 0 103
      main/inc/lib/javascript/dojo/src/data/format/Json.js
  53. 0 183
      main/inc/lib/javascript/dojo/src/data/provider/Base.js
  54. 0 85
      main/inc/lib/javascript/dojo/src/data/provider/Delicious.js
  55. 0 153
      main/inc/lib/javascript/dojo/src/data/provider/FlatFile.js
  56. 0 27
      main/inc/lib/javascript/dojo/src/data/provider/JotSpot.js
  57. 0 27
      main/inc/lib/javascript/dojo/src/data/provider/MySql.js
  58. 0 45
      main/inc/lib/javascript/dojo/src/data/to_do.txt
  59. 0 761
      main/inc/lib/javascript/dojo/src/date.js
  60. 0 80
      main/inc/lib/javascript/dojo/src/debug.js
  61. 0 17
      main/inc/lib/javascript/dojo/src/debug/Firebug.js
  62. BIN
      main/inc/lib/javascript/dojo/src/debug/arrow_hide.gif
  63. BIN
      main/inc/lib/javascript/dojo/src/debug/arrow_show.gif
  64. 0 359
      main/inc/lib/javascript/dojo/src/debug/deep.html
  65. BIN
      main/inc/lib/javascript/dojo/src/debug/spacer.gif
  66. 0 175
      main/inc/lib/javascript/dojo/src/dnd/DragAndDrop.js
  67. 0 475
      main/inc/lib/javascript/dojo/src/dnd/HtmlDragAndDrop.js
  68. 0 475
      main/inc/lib/javascript/dojo/src/dnd/HtmlDragManager.js
  69. 0 76
      main/inc/lib/javascript/dojo/src/dnd/HtmlDragMove.js
  70. 0 28
      main/inc/lib/javascript/dojo/src/dnd/Sortable.js
  71. 0 473
      main/inc/lib/javascript/dojo/src/dnd/TreeDragAndDrop.js
  72. 0 16
      main/inc/lib/javascript/dojo/src/dnd/__package__.js
  73. 0 622
      main/inc/lib/javascript/dojo/src/doc.js
  74. 0 485
      main/inc/lib/javascript/dojo/src/dom.js
  75. 0 575
      main/inc/lib/javascript/dojo/src/event.js
  76. 0 16
      main/inc/lib/javascript/dojo/src/event/__package__.js
  77. 0 273
      main/inc/lib/javascript/dojo/src/event/browser.js
  78. 0 99
      main/inc/lib/javascript/dojo/src/event/topic.js
  79. 0 21
      main/inc/lib/javascript/dojo/src/experimental.js
  80. 0 1244
      main/inc/lib/javascript/dojo/src/flash.js
  81. 0 214
      main/inc/lib/javascript/dojo/src/flash/flash6/DojoExternalInterface.as
  82. BIN
      main/inc/lib/javascript/dojo/src/flash/flash6/flash6_gateway.fla
  83. 0 234
      main/inc/lib/javascript/dojo/src/flash/flash8/DojoExternalInterface.as
  84. 0 81
      main/inc/lib/javascript/dojo/src/flash/flash8/ExpressInstall.as
  85. 0 15
      main/inc/lib/javascript/dojo/src/fx/__package__.js
  86. 0 573
      main/inc/lib/javascript/dojo/src/fx/html.js
  87. 0 99
      main/inc/lib/javascript/dojo/src/fx/svg.js
  88. 0 944
      main/inc/lib/javascript/dojo/src/graphics/Colorspace.js
  89. 0 15
      main/inc/lib/javascript/dojo/src/graphics/__package__.js
  90. 0 166
      main/inc/lib/javascript/dojo/src/graphics/color.js
  91. 0 144
      main/inc/lib/javascript/dojo/src/graphics/color/hsl.js
  92. 0 141
      main/inc/lib/javascript/dojo/src/graphics/color/hsv.js
  93. 0 571
      main/inc/lib/javascript/dojo/src/hostenv_adobesvg.js
  94. 0 360
      main/inc/lib/javascript/dojo/src/hostenv_browser.js
  95. 0 197
      main/inc/lib/javascript/dojo/src/hostenv_dashboard.js
  96. 0 76
      main/inc/lib/javascript/dojo/src/hostenv_jsc.js
  97. 0 190
      main/inc/lib/javascript/dojo/src/hostenv_rhino.js
  98. 0 79
      main/inc/lib/javascript/dojo/src/hostenv_spidermonkey.js
  99. 0 223
      main/inc/lib/javascript/dojo/src/hostenv_svg.js
  100. 0 46
      main/inc/lib/javascript/dojo/src/hostenv_wsh.js

+ 0 - 195
main/inc/lib/javascript/dojo/LICENSE

@@ -1,195 +0,0 @@
-Dojo is availble under *either* the terms of the modified BSD license *or* the
-Academic Free License version 2.1. As a recipient of Dojo, you may choose which
-license to receive this code under (except as noted in per-module LICENSE
-files). Some modules may not be the copyright of the Dojo Foundation. These
-modules contain explicit declarations of copyright in both the LICENSE files in
-the directories in which they reside and in the code itself. No external
-contributions are allowed under licenses which are fundamentally incompatible
-with the AFL or BSD licenses that Dojo is distributed under.
-
-The text of the AFL and BSD licenses is reproduced below. 
-
--------------------------------------------------------------------------------
-The "New" BSD License:
-**********************
-
-Copyright (c) 2005, The Dojo Foundation
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-  * Redistributions of source code must retain the above copyright notice, this
-	list of conditions and the following disclaimer.
-  * Redistributions in binary form must reproduce the above copyright notice,
-	this list of conditions and the following disclaimer in the documentation
-	and/or other materials provided with the distribution.
-  * Neither the name of the Dojo Foundation nor the names of its contributors
-	may be used to endorse or promote products derived from this software
-	without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--------------------------------------------------------------------------------
-The Academic Free License, v. 2.1:
-**********************************
-
-This Academic Free License (the "License") applies to any original work of
-authorship (the "Original Work") whose owner (the "Licensor") has placed the
-following notice immediately following the copyright notice for the Original
-Work:
-
-Licensed under the Academic Free License version 2.1
-
-1) Grant of Copyright License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license to do the
-following:
-
-a) to reproduce the Original Work in copies;
-
-b) to prepare derivative works ("Derivative Works") based upon the Original
-Work;
-
-c) to distribute copies of the Original Work and Derivative Works to the
-public;
-
-d) to perform the Original Work publicly; and
-
-e) to display the Original Work publicly.
-
-2) Grant of Patent License. Licensor hereby grants You a world-wide,
-royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
-claims owned or controlled by the Licensor that are embodied in the Original
-Work as furnished by the Licensor, to make, use, sell and offer for sale the
-Original Work and Derivative Works.
-
-3) Grant of Source Code License. The term "Source Code" means the preferred
-form of the Original Work for making modifications to it and all available
-documentation describing how to modify the Original Work. Licensor hereby
-agrees to provide a machine-readable copy of the Source Code of the Original
-Work along with each copy of the Original Work that Licensor distributes.
-Licensor reserves the right to satisfy this obligation by placing a
-machine-readable copy of the Source Code in an information repository
-reasonably calculated to permit inexpensive and convenient access by You for as
-long as Licensor continues to distribute the Original Work, and by publishing
-the address of that information repository in a notice immediately following
-the copyright notice that applies to the Original Work.
-
-4) Exclusions From License Grant. Neither the names of Licensor, nor the names
-of any contributors to the Original Work, nor any of their trademarks or
-service marks, may be used to endorse or promote products derived from this
-Original Work without express prior written permission of the Licensor. Nothing
-in this License shall be deemed to grant any rights to trademarks, copyrights,
-patents, trade secrets or any other intellectual property of Licensor except as
-expressly stated herein. No patent license is granted to make, use, sell or
-offer to sell embodiments of any patent claims other than the licensed claims
-defined in Section 2. No right is granted to the trademarks of Licensor even if
-such marks are included in the Original Work. Nothing in this License shall be
-interpreted to prohibit Licensor from licensing under different terms from this
-License any Original Work that Licensor otherwise would have a right to
-license.
-
-5) This section intentionally omitted.
-
-6) Attribution Rights. You must retain, in the Source Code of any Derivative
-Works that You create, all copyright, patent or trademark notices from the
-Source Code of the Original Work, as well as any notices of licensing and any
-descriptive text identified therein as an "Attribution Notice." You must cause
-the Source Code for any Derivative Works that You create to carry a prominent
-Attribution Notice reasonably calculated to inform recipients that You have
-modified the Original Work.
-
-7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
-the copyright in and to the Original Work and the patent rights granted herein
-by Licensor are owned by the Licensor or are sublicensed to You under the terms
-of this License with the permission of the contributor(s) of those copyrights
-and patent rights. Except as expressly stated in the immediately proceeding
-sentence, the Original Work is provided under this License on an "AS IS" BASIS
-and WITHOUT WARRANTY, either express or implied, including, without limitation,
-the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
-This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
-license to Original Work is granted hereunder except under this disclaimer.
-
-8) Limitation of Liability. Under no circumstances and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, shall the
-Licensor be liable to any person for any direct, indirect, special, incidental,
-or consequential damages of any character arising as a result of this License
-or the use of the Original Work including, without limitation, damages for loss
-of goodwill, work stoppage, computer failure or malfunction, or any and all
-other commercial damages or losses. This limitation of liability shall not
-apply to liability for death or personal injury resulting from Licensor's
-negligence to the extent applicable law prohibits such limitation. Some
-jurisdictions do not allow the exclusion or limitation of incidental or
-consequential damages, so this exclusion and limitation may not apply to You.
-
-9) Acceptance and Termination. If You distribute copies of the Original Work or
-a Derivative Work, You must make a reasonable effort under the circumstances to
-obtain the express assent of recipients to the terms of this License. Nothing
-else but this License (or another written agreement between Licensor and You)
-grants You permission to create Derivative Works based upon the Original Work
-or to exercise any of the rights granted in Section 1 herein, and any attempt
-to do so except under the terms of this License (or another written agreement
-between Licensor and You) is expressly prohibited by U.S. copyright law, the
-equivalent laws of other countries, and by international treaty. Therefore, by
-exercising any of the rights granted to You in Section 1 herein, You indicate
-Your acceptance of this License and all of its terms and conditions.
-
-10) Termination for Patent Action. This License shall terminate automatically
-and You may no longer exercise any of the rights granted to You by this License
-as of the date You commence an action, including a cross-claim or counterclaim,
-against Licensor or any licensee alleging that the Original Work infringes a
-patent. This termination provision shall not apply for an action alleging
-patent infringement by combinations of the Original Work with other software or
-hardware.
-
-11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
-License may be brought only in the courts of a jurisdiction wherein the
-Licensor resides or in which Licensor conducts its primary business, and under
-the laws of that jurisdiction excluding its conflict-of-law provisions. The
-application of the United Nations Convention on Contracts for the International
-Sale of Goods is expressly excluded. Any use of the Original Work outside the
-scope of this License or after its termination shall be subject to the
-requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
-seq., the equivalent laws of other countries, and international treaty. This
-section shall survive the termination of this License.
-
-12) Attorneys Fees. In any action to enforce the terms of this License or
-seeking damages relating thereto, the prevailing party shall be entitled to
-recover its costs and expenses, including, without limitation, reasonable
-attorneys' fees and costs incurred in connection with such action, including
-any appeal of such action. This section shall survive the termination of this
-License.
-
-13) Miscellaneous. This License represents the complete agreement concerning
-the subject matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent necessary to
-make it enforceable.
-
-14) Definition of "You" in This License. "You" throughout this License, whether
-in upper or lower case, means an individual or a legal entity exercising rights
-under, and complying with all of the terms of, this License. For legal
-entities, "You" includes any entity that controls, is controlled by, or is
-under common control with you. For purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management of such
-entity, whether by contract or otherwise, or (ii) ownership of fifty percent
-(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
-entity.
-
-15) Right to Use. You may use the Original Work in all ways not otherwise
-restricted or conditioned by this License or by law, and Licensor promises not
-to interfere with or be responsible for such uses by You.
-
-This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
-Permission is hereby granted to copy and distribute this license without
-modification. This license may not be modified without the express written
-permission of its copyright owner.

+ 0 - 176
main/inc/lib/javascript/dojo/README

@@ -1,176 +0,0 @@
-The Dojo Toolkit
-----------------
-
-Dojo is a portable JavaScript toolkit for web application developers and
-JavaScript professionals. Dojo solves real-world problems by providing powerful
-abstractions and solid, tested implementations.
-
-Getting Started
----------------
-
-To use Dojo in your application, download one of the pre-built editions from the
-Dojo website, http://dojotoolkit.org. Once you have downloaded the file you will
-need to unzip the archive in your website root. At a minimum, you will need to
-extract:
-
-    src/ (folder)
-    dojo.js
-    iframe_history.html
-
-To begin using dojo, include dojo in your pages by using:
-
-    <script type="text/javascript" src="/path/to/dojo.js"></script>
-
-Depending on the edition that you have downloaded, this base dojo.js file may or
-may not include the modules you wish to use in your application. The files which
-have been "baked in" to the dojo.js that is part of your distribution are listed
-in the file build.txt that is part of the top-level directory that is created
-when you unpack the archive. To ensure modules you wish to use are available,
-use dojo.require() to request them. A very rich application might include:
-
-    <script type="text/javascript" src="/path/to/dojo.js"></script>
-    <script type="text/javascript">
-        dojo.require("dojo.event.*");       // sophisticated AOP event handling
-        dojo.require("dojo.io.*");          // for Ajax requests
-        dojo.require("dojo.storage.*");     // a persistent local data cache
-        dojo.require("dojo.json");          // serialization to JSON
-        dojo.require("dojo.dnd.*");         // drag-and-drop
-        dojo.require("dojo.lfx.*");         // animations and eye candy
-        dojo.require("dojo.widget.Editor2");// stable, portable HTML WYSIWYG
-    </script>
-
-Note that only those modules which are *not* already "baked in" to dojo.js by
-the edition's build process are requested by dojo.require(). This helps make
-your application faster without forcing you to use a build tool while in
-development. See "Building Dojo" and "Working From Source" for more details.
-
-
-Compatibility
--------------
-
-In addition to it's suite of unit-tests for core system components, Dojo has
-been tested on almost every modern browser, including:
-
-    - IE 5.5+
-    - Mozilla 1.5+, Firefox 1.0+
-    - Safari 1.3.9+
-    - Konqueror 3.4+
-    - Opera 8.5+
-
-Note that some widgets and features may not preform exactly the same on every
-browser due to browser implementation differences.
-
-For those looking to use Dojo in non-browser environments, please see "Working
-From Source".
-
-
-Documentation and Getting Help
-------------------------------
-
-Articles outlining major Dojo systems are linked from:
-
-    http://dojotoolkit.org/docs/
-
-Toolkit APIs are listed in outline form at:
-
-    http://dojotoolkit.org/docs/apis/
-
-And documented in full at:
-
-    http://manual.dojotoolkit.org/
-
-The project also maintains a JotSpot Wiki at:
-
-    http://dojo.jot.com/
-
-A FAQ has been extracted from mailing list traffic:
-
-    http://dojo.jot.com/FAQ
-
-And the main Dojo user mailing list is archived and made searchable at:
-
-    http://news.gmane.org/gmane.comp.web.dojo.user/
-
-You can sign up for this list, which is a great place to ask questions, at:
-
-    http://dojotoolkit.org/mailman/listinfo/dojo-interest
-
-The Dojo developers also tend to hang out in IRC and help people with Dojo
-problems. You're most likely to find them at:
-
-    irc.freenode.net #dojo
-
-Note that 2PM Wed PST in this channel is reserved for a weekly meeting between
-project developers, although anyone is welcome to participate.
-
-
-Working From Source
--------------------
-
-The core of Dojo is a powerful package system that allows developers to optimize
-Dojo for deployment while using *exactly the same* application code in
-development. Therefore, working from source is almost exactly like working from
-a pre-built edition. Pre-built editions are significantly faster to load than
-working from source, but are not as flexible when in development.
-
-There are multiple ways to get the source. Nightly snapshots of the Dojo source
-repository are available at:
-
-    http://archive.dojotoolkit.org/nightly.tgz
-
-Anonymous Subversion access is also available:
-
-    %> svn co http://svn.dojootoolkit.org/dojo/trunk/ dojo
-
-Each of these sources will include some extra directories not included in the
-pre-packaged editions, including command-line tests and build tools for
-constructing your own packages.
-
-Running the command-line unit test suite requires Ant 1.6. If it is installed
-and in your path, you can run the tests using:
-
-    %> cd buildscripts
-    %> ant test
-
-The command-line test harness makes use of Rhino, a JavaScript interpreter
-written in Java. Once you have a copy of Dojo's source tree, you have a copy of
-Rhino. From the root directory, you can use Rhino interactively to load Dojo:
-
-    %> java -jar buildscripts/lib/js.jar
-    Rhino 1.5 release 3 2002 01 27
-    js> load("dojo.js");
-    js> print(dojo);
-    [object Object]
-    js> quit();
-
-This environment is wonderful for testing raw JavaScript functionality in, or
-even for scripting your system. Since Rhino has full access to anything in
-Java's classpath, the sky is the limit!
-
-Building Dojo
--------------
-
-Dojo requires Ant 1.6.x in order to build correctly. While using Dojo from
-source does *NOT* require that you make a build, speeding up your application by
-constructing a custom profile build does.
-
-Once you have Ant and a source snapshot of Dojo, you can make your own profile
-build ("edition") which includes only those modules your application uses by
-customizing one of the files in:
-
-    [dojo]/buildscripts/profiles/
-
-These files are named *.profile.js and each one contains a list of modules to
-include in a build. If we created a new profile called "test.profile.js", we
-could then make a profile build using it by doing:
-
-    %> cd buildscripts
-    %> ant -Dprofile=test -Ddocless=true release intern-strings
-
-If the build is successful, your newly minted and compressed  profile build will
-be placed in [dojo]/releae/dojo/
-
--------------------------------------------------------------------------------
-Copyright (c) 2004-2006, The Dojo Foundation, All Rights Reserved
-
-vim:ts=4:et:tw=80:shiftwidth=4:

BIN
main/inc/lib/javascript/dojo/Storage_version6.swf


BIN
main/inc/lib/javascript/dojo/Storage_version8.swf


+ 0 - 33
main/inc/lib/javascript/dojo/build.txt

@@ -1,33 +0,0 @@
-
-Files baked into this package:
-
-dojoGuardStart.js,
-../src/bootstrap1.js,
-../src/loader.js,
-dojoGuardEnd.js,
-../src/hostenv_browser.js,
-../src/bootstrap2.js,
-../src/string/common.js,
-../src/string.js,
-../src/lang/common.js,
-../src/lang/extras.js,
-../src/io.js,
-../src/lang/array.js,
-../src/lang/func.js,
-../src/string/extras.js,
-../src/dom.js,
-../src/undo/browser.js,
-../src/io/BrowserIO.js,
-../src/event.js,
-../src/event/topic.js,
-../src/event/browser.js,
-../src/event/__package__.js,
-../src/lfx/Animation.js,
-../src/graphics/color.js,
-../src/uri/Uri.js,
-../src/style.js,
-../src/html.js,
-../src/lfx/html.js,
-../src/lfx/__package__.js
-
-		

+ 0 - 5593
main/inc/lib/javascript/dojo/dojo.js

@@ -1,5593 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
-	This is a compiled version of Dojo, built for deployment and not for
-	development. To get an editable version, please visit:
-
-		http://dojotoolkit.org
-
-	for documentation and information on getting the source.
-*/
-
-if(typeof dojo=="undefined"){
-var dj_global=this;
-function dj_undef(_1,_2){
-if(_2==null){
-_2=dj_global;
-}
-return (typeof _2[_1]=="undefined");
-}
-if(dj_undef("djConfig")){
-var djConfig={};
-}
-if(dj_undef("dojo")){
-var dojo={};
-}
-dojo.version={major:0,minor:3,patch:1,flag:"",revision:Number("$Rev: 4342 $".match(/[0-9]+/)[0]),toString:function(){
-with(dojo.version){
-return major+"."+minor+"."+patch+flag+" ("+revision+")";
-}
-}};
-dojo.evalProp=function(_3,_4,_5){
-return (_4&&!dj_undef(_3,_4)?_4[_3]:(_5?(_4[_3]={}):undefined));
-};
-dojo.parseObjPath=function(_6,_7,_8){
-var _9=(_7!=null?_7:dj_global);
-var _a=_6.split(".");
-var _b=_a.pop();
-for(var i=0,l=_a.length;i<l&&_9;i++){
-_9=dojo.evalProp(_a[i],_9,_8);
-}
-return {obj:_9,prop:_b};
-};
-dojo.evalObjPath=function(_d,_e){
-if(typeof _d!="string"){
-return dj_global;
-}
-if(_d.indexOf(".")==-1){
-return dojo.evalProp(_d,dj_global,_e);
-}
-var _f=dojo.parseObjPath(_d,dj_global,_e);
-if(_f){
-return dojo.evalProp(_f.prop,_f.obj,_e);
-}
-return null;
-};
-dojo.errorToString=function(_10){
-if(!dj_undef("message",_10)){
-return _10.message;
-}else{
-if(!dj_undef("description",_10)){
-return _10.description;
-}else{
-return _10;
-}
-}
-};
-dojo.raise=function(_11,_12){
-if(_12){
-_11=_11+": "+dojo.errorToString(_12);
-}
-try{
-dojo.hostenv.println("FATAL: "+_11);
-}
-catch(e){
-}
-throw Error(_11);
-};
-dojo.debug=function(){
-};
-dojo.debugShallow=function(obj){
-};
-dojo.profile={start:function(){
-},end:function(){
-},stop:function(){
-},dump:function(){
-}};
-function dj_eval(_14){
-return dj_global.eval?dj_global.eval(_14):eval(_14);
-}
-dojo.unimplemented=function(_15,_16){
-var _17="'"+_15+"' not implemented";
-if(_16!=null){
-_17+=" "+_16;
-}
-dojo.raise(_17);
-};
-dojo.deprecated=function(_18,_19,_1a){
-var _1b="DEPRECATED: "+_18;
-if(_19){
-_1b+=" "+_19;
-}
-if(_1a){
-_1b+=" -- will be removed in version: "+_1a;
-}
-dojo.debug(_1b);
-};
-dojo.inherits=function(_1c,_1d){
-if(typeof _1d!="function"){
-dojo.raise("dojo.inherits: superclass argument ["+_1d+"] must be a function (subclass: ["+_1c+"']");
-}
-_1c.prototype=new _1d();
-_1c.prototype.constructor=_1c;
-_1c.superclass=_1d.prototype;
-_1c["super"]=_1d.prototype;
-};
-dojo.render=(function(){
-function vscaffold(_1e,_1f){
-var tmp={capable:false,support:{builtin:false,plugin:false},prefixes:_1e};
-for(var _21 in _1f){
-tmp[_21]=false;
-}
-return tmp;
-}
-return {name:"",ver:dojo.version,os:{win:false,linux:false,osx:false},html:vscaffold(["html"],["ie","opera","khtml","safari","moz"]),svg:vscaffold(["svg"],["corel","adobe","batik"]),vml:vscaffold(["vml"],["ie"]),swf:vscaffold(["Swf","Flash","Mm"],["mm"]),swt:vscaffold(["Swt"],["ibm"])};
-})();
-dojo.hostenv=(function(){
-var _22={isDebug:false,allowQueryConfig:false,baseScriptUri:"",baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,searchIds:[],parseWidgets:true};
-if(typeof djConfig=="undefined"){
-djConfig=_22;
-}else{
-for(var _23 in _22){
-if(typeof djConfig[_23]=="undefined"){
-djConfig[_23]=_22[_23];
-}
-}
-}
-return {name_:"(unset)",version_:"(unset)",getName:function(){
-return this.name_;
-},getVersion:function(){
-return this.version_;
-},getText:function(uri){
-dojo.unimplemented("getText","uri="+uri);
-}};
-})();
-dojo.hostenv.getBaseScriptUri=function(){
-if(djConfig.baseScriptUri.length){
-return djConfig.baseScriptUri;
-}
-var uri=new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-if(!uri){
-dojo.raise("Nothing returned by getLibraryScriptUri(): "+uri);
-}
-var _26=uri.lastIndexOf("/");
-djConfig.baseScriptUri=djConfig.baseRelativePath;
-return djConfig.baseScriptUri;
-};
-(function(){
-var _27={pkgFileName:"__package__",loading_modules_:{},loaded_modules_:{},addedToLoadingCount:[],removedFromLoadingCount:[],inFlightCount:0,modulePrefixes_:{dojo:{name:"dojo",value:"src"}},setModulePrefix:function(_28,_29){
-this.modulePrefixes_[_28]={name:_28,value:_29};
-},getModulePrefix:function(_2a){
-var mp=this.modulePrefixes_;
-if((mp[_2a])&&(mp[_2a]["name"])){
-return mp[_2a].value;
-}
-return _2a;
-},getTextStack:[],loadUriStack:[],loadedUris:[],post_load_:false,modulesLoadedListeners:[],unloadListeners:[],loadNotifying:false};
-for(var _2c in _27){
-dojo.hostenv[_2c]=_27[_2c];
-}
-})();
-dojo.hostenv.loadPath=function(_2d,_2e,cb){
-var uri;
-if((_2d.charAt(0)=="/")||(_2d.match(/^\w+:/))){
-uri=_2d;
-}else{
-uri=this.getBaseScriptUri()+_2d;
-}
-if(djConfig.cacheBust&&dojo.render.html.capable){
-uri+="?"+String(djConfig.cacheBust).replace(/\W+/g,"");
-}
-try{
-return ((!_2e)?this.loadUri(uri,cb):this.loadUriAndCheck(uri,_2e,cb));
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.hostenv.loadUri=function(uri,cb){
-if(this.loadedUris[uri]){
-return 1;
-}
-var _33=this.getText(uri,null,true);
-if(_33==null){
-return 0;
-}
-this.loadedUris[uri]=true;
-if(cb){
-_33="("+_33+")";
-}
-var _34=dj_eval(_33);
-if(cb){
-cb(_34);
-}
-return 1;
-};
-dojo.hostenv.loadUriAndCheck=function(uri,_36,cb){
-var ok=true;
-try{
-ok=this.loadUri(uri,cb);
-}
-catch(e){
-dojo.debug("failed loading ",uri," with error: ",e);
-}
-return ((ok)&&(this.findModule(_36,false)))?true:false;
-};
-dojo.loaded=function(){
-};
-dojo.unloaded=function(){
-};
-dojo.hostenv.loaded=function(){
-this.loadNotifying=true;
-this.post_load_=true;
-var mll=this.modulesLoadedListeners;
-for(var x=0;x<mll.length;x++){
-mll[x]();
-}
-this.modulesLoadedListeners=[];
-this.loadNotifying=false;
-dojo.loaded();
-};
-dojo.hostenv.unloaded=function(){
-var mll=this.unloadListeners;
-while(mll.length){
-(mll.pop())();
-}
-dojo.unloaded();
-};
-dojo.addOnLoad=function(obj,_3d){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.modulesLoadedListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.modulesLoadedListeners.push(function(){
-obj[_3d]();
-});
-}
-}
-if(dh.post_load_&&dh.inFlightCount==0&&!dh.loadNotifying){
-dh.callLoaded();
-}
-};
-dojo.addOnUnload=function(obj,_40){
-var dh=dojo.hostenv;
-if(arguments.length==1){
-dh.unloadListeners.push(obj);
-}else{
-if(arguments.length>1){
-dh.unloadListeners.push(function(){
-obj[_40]();
-});
-}
-}
-};
-dojo.hostenv.modulesLoaded=function(){
-if(this.post_load_){
-return;
-}
-if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-if(this.inFlightCount>0){
-dojo.debug("files still in flight!");
-return;
-}
-dojo.hostenv.callLoaded();
-}
-};
-dojo.hostenv.callLoaded=function(){
-if(typeof setTimeout=="object"){
-setTimeout("dojo.hostenv.loaded();",0);
-}else{
-dojo.hostenv.loaded();
-}
-};
-dojo.hostenv.getModuleSymbols=function(_42){
-var _43=_42.split(".");
-for(var i=_43.length-1;i>0;i--){
-var _45=_43.slice(0,i).join(".");
-var _46=this.getModulePrefix(_45);
-if(_46!=_45){
-_43.splice(0,i,_46);
-break;
-}
-}
-return _43;
-};
-dojo.hostenv._global_omit_module_check=false;
-dojo.hostenv.loadModule=function(_47,_48,_49){
-if(!_47){
-return;
-}
-_49=this._global_omit_module_check||_49;
-var _4a=this.findModule(_47,false);
-if(_4a){
-return _4a;
-}
-if(dj_undef(_47,this.loading_modules_)){
-this.addedToLoadingCount.push(_47);
-}
-this.loading_modules_[_47]=1;
-var _4b=_47.replace(/\./g,"/")+".js";
-var _4c=this.getModuleSymbols(_47);
-var _4d=((_4c[0].charAt(0)!="/")&&(!_4c[0].match(/^\w+:/)));
-var _4e=_4c[_4c.length-1];
-var _4f=_47.split(".");
-if(_4e=="*"){
-_47=(_4f.slice(0,-1)).join(".");
-while(_4c.length){
-_4c.pop();
-_4c.push(this.pkgFileName);
-_4b=_4c.join("/")+".js";
-if(_4d&&(_4b.charAt(0)=="/")){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,((!_49)?_47:null));
-if(ok){
-break;
-}
-_4c.pop();
-}
-}else{
-_4b=_4c.join("/")+".js";
-_47=_4f.join(".");
-var ok=this.loadPath(_4b,((!_49)?_47:null));
-if((!ok)&&(!_48)){
-_4c.pop();
-while(_4c.length){
-_4b=_4c.join("/")+".js";
-ok=this.loadPath(_4b,((!_49)?_47:null));
-if(ok){
-break;
-}
-_4c.pop();
-_4b=_4c.join("/")+"/"+this.pkgFileName+".js";
-if(_4d&&(_4b.charAt(0)=="/")){
-_4b=_4b.slice(1);
-}
-ok=this.loadPath(_4b,((!_49)?_47:null));
-if(ok){
-break;
-}
-}
-}
-if((!ok)&&(!_49)){
-dojo.raise("Could not load '"+_47+"'; last tried '"+_4b+"'");
-}
-}
-if(!_49&&!this["isXDomain"]){
-_4a=this.findModule(_47,false);
-if(!_4a){
-dojo.raise("symbol '"+_47+"' is not defined after loading '"+_4b+"'");
-}
-}
-return _4a;
-};
-dojo.hostenv.startPackage=function(_51){
-var _52=dojo.evalObjPath((_51.split(".").slice(0,-1)).join("."));
-this.loaded_modules_[(new String(_51)).toLowerCase()]=_52;
-var _53=_51.split(/\./);
-if(_53[_53.length-1]=="*"){
-_53.pop();
-}
-return dojo.evalObjPath(_53.join("."),true);
-};
-dojo.hostenv.findModule=function(_54,_55){
-var lmn=(new String(_54)).toLowerCase();
-if(this.loaded_modules_[lmn]){
-return this.loaded_modules_[lmn];
-}
-var _57=dojo.evalObjPath(_54);
-if((_54)&&(typeof _57!="undefined")&&(_57)){
-this.loaded_modules_[lmn]=_57;
-return _57;
-}
-if(_55){
-dojo.raise("no loaded module named '"+_54+"'");
-}
-return null;
-};
-dojo.kwCompoundRequire=function(_58){
-var _59=_58["common"]||[];
-var _5a=(_58[dojo.hostenv.name_])?_59.concat(_58[dojo.hostenv.name_]||[]):_59.concat(_58["default"]||[]);
-for(var x=0;x<_5a.length;x++){
-var _5c=_5a[x];
-if(_5c.constructor==Array){
-dojo.hostenv.loadModule.apply(dojo.hostenv,_5c);
-}else{
-dojo.hostenv.loadModule(_5c);
-}
-}
-};
-dojo.require=function(){
-dojo.hostenv.loadModule.apply(dojo.hostenv,arguments);
-};
-dojo.requireIf=function(){
-if((arguments[0]===true)||(arguments[0]=="common")||(arguments[0]&&dojo.render[arguments[0]].capable)){
-var _5d=[];
-for(var i=1;i<arguments.length;i++){
-_5d.push(arguments[i]);
-}
-dojo.require.apply(dojo,_5d);
-}
-};
-dojo.requireAfterIf=dojo.requireIf;
-dojo.provide=function(){
-return dojo.hostenv.startPackage.apply(dojo.hostenv,arguments);
-};
-dojo.setModulePrefix=function(_5f,_60){
-return dojo.hostenv.setModulePrefix(_5f,_60);
-};
-dojo.exists=function(obj,_62){
-var p=_62.split(".");
-for(var i=0;i<p.length;i++){
-if(!(obj[p[i]])){
-return false;
-}
-obj=obj[p[i]];
-}
-return true;
-};
-}
-if(typeof window=="undefined"){
-dojo.raise("no window object");
-}
-(function(){
-if(djConfig.allowQueryConfig){
-var _65=document.location.toString();
-var _66=_65.split("?",2);
-if(_66.length>1){
-var _67=_66[1];
-var _68=_67.split("&");
-for(var x in _68){
-var sp=_68[x].split("=");
-if((sp[0].length>9)&&(sp[0].substr(0,9)=="djConfig.")){
-var opt=sp[0].substr(9);
-try{
-djConfig[opt]=eval(sp[1]);
-}
-catch(e){
-djConfig[opt]=sp[1];
-}
-}
-}
-}
-}
-if(((djConfig["baseScriptUri"]=="")||(djConfig["baseRelativePath"]==""))&&(document&&document.getElementsByTagName)){
-var _6c=document.getElementsByTagName("script");
-var _6d=/(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-for(var i=0;i<_6c.length;i++){
-var src=_6c[i].getAttribute("src");
-if(!src){
-continue;
-}
-var m=src.match(_6d);
-if(m){
-var _71=src.substring(0,m.index);
-if(src.indexOf("bootstrap1")>-1){
-_71+="../";
-}
-if(!this["djConfig"]){
-djConfig={};
-}
-if(djConfig["baseScriptUri"]==""){
-djConfig["baseScriptUri"]=_71;
-}
-if(djConfig["baseRelativePath"]==""){
-djConfig["baseRelativePath"]=_71;
-}
-break;
-}
-}
-}
-var dr=dojo.render;
-var drh=dojo.render.html;
-var drs=dojo.render.svg;
-var dua=drh.UA=navigator.userAgent;
-var dav=drh.AV=navigator.appVersion;
-var t=true;
-var f=false;
-drh.capable=t;
-drh.support.builtin=t;
-dr.ver=parseFloat(drh.AV);
-dr.os.mac=dav.indexOf("Macintosh")>=0;
-dr.os.win=dav.indexOf("Windows")>=0;
-dr.os.linux=dav.indexOf("X11")>=0;
-drh.opera=dua.indexOf("Opera")>=0;
-drh.khtml=(dav.indexOf("Konqueror")>=0)||(dav.indexOf("Safari")>=0);
-drh.safari=dav.indexOf("Safari")>=0;
-var _79=dua.indexOf("Gecko");
-drh.mozilla=drh.moz=(_79>=0)&&(!drh.khtml);
-if(drh.mozilla){
-drh.geckoVersion=dua.substring(_79+6,_79+14);
-}
-drh.ie=(document.all)&&(!drh.opera);
-drh.ie50=drh.ie&&dav.indexOf("MSIE 5.0")>=0;
-drh.ie55=drh.ie&&dav.indexOf("MSIE 5.5")>=0;
-drh.ie60=drh.ie&&dav.indexOf("MSIE 6.0")>=0;
-drh.ie70=drh.ie&&dav.indexOf("MSIE 7.0")>=0;
-dojo.locale=(drh.ie?navigator.userLanguage:navigator.language).toLowerCase();
-dr.vml.capable=drh.ie;
-drs.capable=f;
-drs.support.plugin=f;
-drs.support.builtin=f;
-if(document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("org.w3c.dom.svg","1.0")){
-drs.capable=t;
-drs.support.builtin=t;
-drs.support.plugin=f;
-}
-})();
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.render.name=dojo.hostenv.name_="browser";
-dojo.hostenv.searchIds=[];
-dojo.hostenv._XMLHTTP_PROGIDS=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"];
-dojo.hostenv.getXmlhttpObject=function(){
-var _7a=null;
-var _7b=null;
-try{
-_7a=new XMLHttpRequest();
-}
-catch(e){
-}
-if(!_7a){
-for(var i=0;i<3;++i){
-var _7d=dojo.hostenv._XMLHTTP_PROGIDS[i];
-try{
-_7a=new ActiveXObject(_7d);
-}
-catch(e){
-_7b=e;
-}
-if(_7a){
-dojo.hostenv._XMLHTTP_PROGIDS=[_7d];
-break;
-}
-}
-}
-if(!_7a){
-return dojo.raise("XMLHTTP not available",_7b);
-}
-return _7a;
-};
-dojo.hostenv.getText=function(uri,_7f,_80){
-var _81=this.getXmlhttpObject();
-if(_7f){
-_81.onreadystatechange=function(){
-if(4==_81.readyState){
-if((!_81["status"])||((200<=_81.status)&&(300>_81.status))){
-_7f(_81.responseText);
-}
-}
-};
-}
-_81.open("GET",uri,_7f?true:false);
-try{
-_81.send(null);
-if(_7f){
-return null;
-}
-if((_81["status"])&&((200>_81.status)||(300<=_81.status))){
-throw Error("Unable to load "+uri+" status:"+_81.status);
-}
-}
-catch(e){
-if((_80)&&(!_7f)){
-return null;
-}else{
-throw e;
-}
-}
-return _81.responseText;
-};
-dojo.hostenv.defaultDebugContainerId="dojoDebug";
-dojo.hostenv._println_buffer=[];
-dojo.hostenv._println_safe=false;
-dojo.hostenv.println=function(_82){
-if(!dojo.hostenv._println_safe){
-dojo.hostenv._println_buffer.push(_82);
-}else{
-try{
-var _83=document.getElementById(djConfig.debugContainerId?djConfig.debugContainerId:dojo.hostenv.defaultDebugContainerId);
-if(!_83){
-_83=document.getElementsByTagName("body")[0]||document.body;
-}
-var div=document.createElement("div");
-div.appendChild(document.createTextNode(_82));
-_83.appendChild(div);
-}
-catch(e){
-try{
-document.write("<div>"+_82+"</div>");
-}
-catch(e2){
-window.status=_82;
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-dojo.hostenv._println_safe=true;
-while(dojo.hostenv._println_buffer.length>0){
-dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-}
-});
-function dj_addNodeEvtHdlr(_85,_86,fp,_88){
-var _89=_85["on"+_86]||function(){
-};
-_85["on"+_86]=function(){
-fp.apply(_85,arguments);
-_89.apply(_85,arguments);
-};
-return true;
-}
-dj_addNodeEvtHdlr(window,"load",function(){
-if(arguments.callee.initialized){
-return;
-}
-arguments.callee.initialized=true;
-var _8a=function(){
-if(dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-};
-if(dojo.hostenv.inFlightCount==0){
-_8a();
-dojo.hostenv.modulesLoaded();
-}else{
-dojo.addOnLoad(_8a);
-}
-});
-dj_addNodeEvtHdlr(window,"unload",function(){
-dojo.hostenv.unloaded();
-});
-dojo.hostenv.makeWidgets=function(){
-var _8b=[];
-if(djConfig.searchIds&&djConfig.searchIds.length>0){
-_8b=_8b.concat(djConfig.searchIds);
-}
-if(dojo.hostenv.searchIds&&dojo.hostenv.searchIds.length>0){
-_8b=_8b.concat(dojo.hostenv.searchIds);
-}
-if((djConfig.parseWidgets)||(_8b.length>0)){
-if(dojo.evalObjPath("dojo.widget.Parse")){
-var _8c=new dojo.xml.Parse();
-if(_8b.length>0){
-for(var x=0;x<_8b.length;x++){
-var _8e=document.getElementById(_8b[x]);
-if(!_8e){
-continue;
-}
-var _8f=_8c.parseElement(_8e,null,true);
-dojo.widget.getParser().createComponents(_8f);
-}
-}else{
-if(djConfig.parseWidgets){
-var _8f=_8c.parseElement(document.getElementsByTagName("body")[0]||document.body,null,true);
-dojo.widget.getParser().createComponents(_8f);
-}
-}
-}
-}
-};
-dojo.addOnLoad(function(){
-if(!dojo.render.html.ie){
-dojo.hostenv.makeWidgets();
-}
-});
-try{
-if(dojo.render.html.ie){
-document.write("<style>v:*{ behavior:url(#default#VML); }</style>");
-document.write("<xml:namespace ns=\"urn:schemas-microsoft-com:vml\" prefix=\"v\"/>");
-}
-}
-catch(e){
-}
-dojo.hostenv.writeIncludes=function(){
-};
-dojo.byId=function(id,doc){
-if(id&&(typeof id=="string"||id instanceof String)){
-if(!doc){
-doc=document;
-}
-return doc.getElementById(id);
-}
-return id;
-};
-(function(){
-if(typeof dj_usingBootstrap!="undefined"){
-return;
-}
-var _92=false;
-var _93=false;
-var _94=false;
-if((typeof this["load"]=="function")&&((typeof this["Packages"]=="function")||(typeof this["Packages"]=="object"))){
-_92=true;
-}else{
-if(typeof this["load"]=="function"){
-_93=true;
-}else{
-if(window.widget){
-_94=true;
-}
-}
-}
-var _95=[];
-if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-_95.push("debug.js");
-}
-if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!_92)&&(!_94)){
-_95.push("browser_debug.js");
-}
-if((this["djConfig"])&&(djConfig["compat"])){
-_95.push("compat/"+djConfig["compat"]+".js");
-}
-var _96=djConfig["baseScriptUri"];
-if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-_96=djConfig["baseLoaderUri"];
-}
-for(var x=0;x<_95.length;x++){
-var _98=_96+"src/"+_95[x];
-if(_92||_93){
-load(_98);
-}else{
-try{
-document.write("<scr"+"ipt type='text/javascript' src='"+_98+"'></scr"+"ipt>");
-}
-catch(e){
-var _99=document.createElement("script");
-_99.src=_98;
-document.getElementsByTagName("head")[0].appendChild(_99);
-}
-}
-}
-})();
-dojo.fallback_locale="en";
-dojo.normalizeLocale=function(_9a){
-return _9a?_9a.toLowerCase():dojo.locale;
-};
-dojo.requireLocalization=function(_9b,_9c,_9d){
-dojo.debug("EXPERIMENTAL: dojo.requireLocalization");
-var _9e=dojo.hostenv.getModuleSymbols(_9b);
-var _9f=_9e.concat("nls").join("/");
-_9d=dojo.normalizeLocale(_9d);
-var _a0=_9d.split("-");
-var _a1=[];
-for(var i=_a0.length;i>0;i--){
-_a1.push(_a0.slice(0,i).join("-"));
-}
-if(_a1[_a1.length-1]!=dojo.fallback_locale){
-_a1.push(dojo.fallback_locale);
-}
-var _a3=[_9b,"_nls",_9c].join(".");
-var _a4=dojo.hostenv.startPackage(_a3);
-dojo.hostenv.loaded_modules_[_a3]=_a4;
-var _a5=false;
-for(var i=_a1.length-1;i>=0;i--){
-var loc=_a1[i];
-var pkg=[_a3,loc].join(".");
-var _a8=false;
-if(!dojo.hostenv.findModule(pkg)){
-dojo.hostenv.loaded_modules_[pkg]=null;
-var _a9=[_9f,loc,_9c].join("/")+".js";
-_a8=dojo.hostenv.loadPath(_a9,null,function(_aa){
-_a4[loc]=_aa;
-if(_a5){
-for(var x in _a5){
-if(!_a4[loc][x]){
-_a4[loc][x]=_a5[x];
-}
-}
-}
-});
-}else{
-_a8=true;
-}
-if(_a8&&_a4[loc]){
-_a5=_a4[loc];
-}
-}
-};
-dojo.provide("dojo.string.common");
-dojo.require("dojo.string");
-dojo.string.trim=function(str,wh){
-if(!str.replace){
-return str;
-}
-if(!str.length){
-return str;
-}
-var re=(wh>0)?(/^\s+/):(wh<0)?(/\s+$/):(/^\s+|\s+$/g);
-return str.replace(re,"");
-};
-dojo.string.trimStart=function(str){
-return dojo.string.trim(str,1);
-};
-dojo.string.trimEnd=function(str){
-return dojo.string.trim(str,-1);
-};
-dojo.string.repeat=function(str,_b2,_b3){
-var out="";
-for(var i=0;i<_b2;i++){
-out+=str;
-if(_b3&&i<_b2-1){
-out+=_b3;
-}
-}
-return out;
-};
-dojo.string.pad=function(str,len,c,dir){
-var out=String(str);
-if(!c){
-c="0";
-}
-if(!dir){
-dir=1;
-}
-while(out.length<len){
-if(dir>0){
-out=c+out;
-}else{
-out+=c;
-}
-}
-return out;
-};
-dojo.string.padLeft=function(str,len,c){
-return dojo.string.pad(str,len,c,1);
-};
-dojo.string.padRight=function(str,len,c){
-return dojo.string.pad(str,len,c,-1);
-};
-dojo.provide("dojo.string");
-dojo.require("dojo.string.common");
-dojo.provide("dojo.lang.common");
-dojo.require("dojo.lang");
-dojo.lang._mixin=function(obj,_c2){
-var _c3={};
-for(var x in _c2){
-if(typeof _c3[x]=="undefined"||_c3[x]!=_c2[x]){
-obj[x]=_c2[x];
-}
-}
-if(dojo.render.html.ie&&dojo.lang.isFunction(_c2["toString"])&&_c2["toString"]!=obj["toString"]){
-obj.toString=_c2.toString;
-}
-return obj;
-};
-dojo.lang.mixin=function(obj,_c6){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(obj,arguments[i]);
-}
-return obj;
-};
-dojo.lang.extend=function(_c8,_c9){
-for(var i=1,l=arguments.length;i<l;i++){
-dojo.lang._mixin(_c8.prototype,arguments[i]);
-}
-return _c8;
-};
-dojo.lang.find=function(arr,val,_cd,_ce){
-if(!dojo.lang.isArrayLike(arr)&&dojo.lang.isArrayLike(val)){
-var a=arr;
-arr=val;
-val=a;
-}
-var _d0=dojo.lang.isString(arr);
-if(_d0){
-arr=arr.split("");
-}
-if(_ce){
-var _d1=-1;
-var i=arr.length-1;
-var end=-1;
-}else{
-var _d1=1;
-var i=0;
-var end=arr.length;
-}
-if(_cd){
-while(i!=end){
-if(arr[i]===val){
-return i;
-}
-i+=_d1;
-}
-}else{
-while(i!=end){
-if(arr[i]==val){
-return i;
-}
-i+=_d1;
-}
-}
-return -1;
-};
-dojo.lang.indexOf=dojo.lang.find;
-dojo.lang.findLast=function(arr,val,_d6){
-return dojo.lang.find(arr,val,_d6,true);
-};
-dojo.lang.lastIndexOf=dojo.lang.findLast;
-dojo.lang.inArray=function(arr,val){
-return dojo.lang.find(arr,val)>-1;
-};
-dojo.lang.isObject=function(wh){
-if(typeof wh=="undefined"){
-return false;
-}
-return (typeof wh=="object"||wh===null||dojo.lang.isArray(wh)||dojo.lang.isFunction(wh));
-};
-dojo.lang.isArray=function(wh){
-return (wh instanceof Array||typeof wh=="array");
-};
-dojo.lang.isArrayLike=function(wh){
-if(dojo.lang.isString(wh)){
-return false;
-}
-if(dojo.lang.isFunction(wh)){
-return false;
-}
-if(dojo.lang.isArray(wh)){
-return true;
-}
-if(typeof wh!="undefined"&&wh&&dojo.lang.isNumber(wh.length)&&isFinite(wh.length)){
-return true;
-}
-return false;
-};
-dojo.lang.isFunction=function(wh){
-if(!wh){
-return false;
-}
-return (wh instanceof Function||typeof wh=="function");
-};
-dojo.lang.isString=function(wh){
-return (wh instanceof String||typeof wh=="string");
-};
-dojo.lang.isAlien=function(wh){
-if(!wh){
-return false;
-}
-return !dojo.lang.isFunction()&&/\{\s*\[native code\]\s*\}/.test(String(wh));
-};
-dojo.lang.isBoolean=function(wh){
-return (wh instanceof Boolean||typeof wh=="boolean");
-};
-dojo.lang.isNumber=function(wh){
-return (wh instanceof Number||typeof wh=="number");
-};
-dojo.lang.isUndefined=function(wh){
-return ((wh==undefined)&&(typeof wh=="undefined"));
-};
-dojo.provide("dojo.lang.extras");
-dojo.require("dojo.lang.common");
-dojo.lang.setTimeout=function(_e2,_e3){
-var _e4=window,argsStart=2;
-if(!dojo.lang.isFunction(_e2)){
-_e4=_e2;
-_e2=_e3;
-_e3=arguments[2];
-argsStart++;
-}
-if(dojo.lang.isString(_e2)){
-_e2=_e4[_e2];
-}
-var _e5=[];
-for(var i=argsStart;i<arguments.length;i++){
-_e5.push(arguments[i]);
-}
-return setTimeout(function(){
-_e2.apply(_e4,_e5);
-},_e3);
-};
-dojo.lang.getNameInObj=function(ns,_e8){
-if(!ns){
-ns=dj_global;
-}
-for(var x in ns){
-if(ns[x]===_e8){
-return new String(x);
-}
-}
-return null;
-};
-dojo.lang.shallowCopy=function(obj){
-var ret={},key;
-for(key in obj){
-if(dojo.lang.isUndefined(ret[key])){
-ret[key]=obj[key];
-}
-}
-return ret;
-};
-dojo.lang.firstValued=function(){
-for(var i=0;i<arguments.length;i++){
-if(typeof arguments[i]!="undefined"){
-return arguments[i];
-}
-}
-return undefined;
-};
-dojo.lang.getObjPathValue=function(_ed,_ee,_ef){
-with(dojo.parseObjPath(_ed,_ee,_ef)){
-return dojo.evalProp(prop,obj,_ef);
-}
-};
-dojo.lang.setObjPathValue=function(_f0,_f1,_f2,_f3){
-if(arguments.length<4){
-_f3=true;
-}
-with(dojo.parseObjPath(_f0,_f2,_f3)){
-if(obj&&(_f3||(prop in obj))){
-obj[prop]=_f1;
-}
-}
-};
-dojo.provide("dojo.io.IO");
-dojo.require("dojo.string");
-dojo.require("dojo.lang.extras");
-dojo.io.transports=[];
-dojo.io.hdlrFuncNames=["load","error","timeout"];
-dojo.io.Request=function(url,_f5,_f6,_f7){
-if((arguments.length==1)&&(arguments[0].constructor==Object)){
-this.fromKwArgs(arguments[0]);
-}else{
-this.url=url;
-if(_f5){
-this.mimetype=_f5;
-}
-if(_f6){
-this.transport=_f6;
-}
-if(arguments.length>=4){
-this.changeUrl=_f7;
-}
-}
-};
-dojo.lang.extend(dojo.io.Request,{url:"",mimetype:"text/plain",method:"GET",content:undefined,transport:undefined,changeUrl:undefined,formNode:undefined,sync:false,bindSuccess:false,useCache:false,preventCache:false,load:function(_f8,_f9,evt){
-},error:function(_fb,_fc){
-},timeout:function(_fd){
-},handle:function(){
-},timeoutSeconds:0,abort:function(){
-},fromKwArgs:function(_fe){
-if(_fe["url"]){
-_fe.url=_fe.url.toString();
-}
-if(_fe["formNode"]){
-_fe.formNode=dojo.byId(_fe.formNode);
-}
-if(!_fe["method"]&&_fe["formNode"]&&_fe["formNode"].method){
-_fe.method=_fe["formNode"].method;
-}
-if(!_fe["handle"]&&_fe["handler"]){
-_fe.handle=_fe.handler;
-}
-if(!_fe["load"]&&_fe["loaded"]){
-_fe.load=_fe.loaded;
-}
-if(!_fe["changeUrl"]&&_fe["changeURL"]){
-_fe.changeUrl=_fe.changeURL;
-}
-_fe.encoding=dojo.lang.firstValued(_fe["encoding"],djConfig["bindEncoding"],"");
-_fe.sendTransport=dojo.lang.firstValued(_fe["sendTransport"],djConfig["ioSendTransport"],false);
-var _ff=dojo.lang.isFunction;
-for(var x=0;x<dojo.io.hdlrFuncNames.length;x++){
-var fn=dojo.io.hdlrFuncNames[x];
-if(_ff(_fe[fn])){
-continue;
-}
-if(_ff(_fe["handle"])){
-_fe[fn]=_fe.handle;
-}
-}
-dojo.lang.mixin(this,_fe);
-}});
-dojo.io.Error=function(msg,type,num){
-this.message=msg;
-this.type=type||"unknown";
-this.number=num||0;
-};
-dojo.io.transports.addTransport=function(name){
-this.push(name);
-this[name]=dojo.io[name];
-};
-dojo.io.bind=function(_106){
-if(!(_106 instanceof dojo.io.Request)){
-try{
-_106=new dojo.io.Request(_106);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _107="";
-if(_106["transport"]){
-_107=_106["transport"];
-if(!this[_107]){
-return _106;
-}
-}else{
-for(var x=0;x<dojo.io.transports.length;x++){
-var tmp=dojo.io.transports[x];
-if((this[tmp])&&(this[tmp].canHandle(_106))){
-_107=tmp;
-}
-}
-if(_107==""){
-return _106;
-}
-}
-this[_107].bind(_106);
-_106.bindSuccess=true;
-return _106;
-};
-dojo.io.queueBind=function(_10a){
-if(!(_10a instanceof dojo.io.Request)){
-try{
-_10a=new dojo.io.Request(_10a);
-}
-catch(e){
-dojo.debug(e);
-}
-}
-var _10b=_10a.load;
-_10a.load=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_10b.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-var _10d=_10a.error;
-_10a.error=function(){
-dojo.io._queueBindInFlight=false;
-var ret=_10d.apply(this,arguments);
-dojo.io._dispatchNextQueueBind();
-return ret;
-};
-dojo.io._bindQueue.push(_10a);
-dojo.io._dispatchNextQueueBind();
-return _10a;
-};
-dojo.io._dispatchNextQueueBind=function(){
-if(!dojo.io._queueBindInFlight){
-dojo.io._queueBindInFlight=true;
-if(dojo.io._bindQueue.length>0){
-dojo.io.bind(dojo.io._bindQueue.shift());
-}else{
-dojo.io._queueBindInFlight=false;
-}
-}
-};
-dojo.io._bindQueue=[];
-dojo.io._queueBindInFlight=false;
-dojo.io.argsFromMap=function(map,_110,last){
-var enc=/utf/i.test(_110||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _113=[];
-var _114=new Object();
-for(var name in map){
-var _116=function(elt){
-var val=enc(name)+"="+enc(elt);
-_113[(last==name)?"push":"unshift"](val);
-};
-if(!_114[name]){
-var _119=map[name];
-if(dojo.lang.isArray(_119)){
-dojo.lang.forEach(_119,_116);
-}else{
-_116(_119);
-}
-}
-}
-return _113.join("&");
-};
-dojo.io.setIFrameSrc=function(_11a,src,_11c){
-try{
-var r=dojo.render.html;
-if(!_11c){
-if(r.safari){
-_11a.location=src;
-}else{
-frames[_11a.name].location=src;
-}
-}else{
-var idoc;
-if(r.ie){
-idoc=_11a.contentWindow.document;
-}else{
-if(r.safari){
-idoc=_11a.document;
-}else{
-idoc=_11a.contentWindow;
-}
-}
-if(!idoc){
-_11a.location=src;
-return;
-}else{
-idoc.location.replace(src);
-}
-}
-}
-catch(e){
-dojo.debug(e);
-dojo.debug("setIFrameSrc: "+e);
-}
-};
-dojo.provide("dojo.lang.array");
-dojo.require("dojo.lang.common");
-dojo.lang.has=function(obj,name){
-try{
-return (typeof obj[name]!="undefined");
-}
-catch(e){
-return false;
-}
-};
-dojo.lang.isEmpty=function(obj){
-if(dojo.lang.isObject(obj)){
-var tmp={};
-var _123=0;
-for(var x in obj){
-if(obj[x]&&(!tmp[x])){
-_123++;
-break;
-}
-}
-return (_123==0);
-}else{
-if(dojo.lang.isArrayLike(obj)||dojo.lang.isString(obj)){
-return obj.length==0;
-}
-}
-};
-dojo.lang.map=function(arr,obj,_127){
-var _128=dojo.lang.isString(arr);
-if(_128){
-arr=arr.split("");
-}
-if(dojo.lang.isFunction(obj)&&(!_127)){
-_127=obj;
-obj=dj_global;
-}else{
-if(dojo.lang.isFunction(obj)&&_127){
-var _129=obj;
-obj=_127;
-_127=_129;
-}
-}
-if(Array.map){
-var _12a=Array.map(arr,_127,obj);
-}else{
-var _12a=[];
-for(var i=0;i<arr.length;++i){
-_12a.push(_127.call(obj,arr[i]));
-}
-}
-if(_128){
-return _12a.join("");
-}else{
-return _12a;
-}
-};
-dojo.lang.forEach=function(_12c,_12d,_12e){
-if(dojo.lang.isString(_12c)){
-_12c=_12c.split("");
-}
-if(Array.forEach){
-Array.forEach(_12c,_12d,_12e);
-}else{
-if(!_12e){
-_12e=dj_global;
-}
-for(var i=0,l=_12c.length;i<l;i++){
-_12d.call(_12e,_12c[i],i,_12c);
-}
-}
-};
-dojo.lang._everyOrSome=function(_130,arr,_132,_133){
-if(dojo.lang.isString(arr)){
-arr=arr.split("");
-}
-if(Array.every){
-return Array[(_130)?"every":"some"](arr,_132,_133);
-}else{
-if(!_133){
-_133=dj_global;
-}
-for(var i=0,l=arr.length;i<l;i++){
-var _135=_132.call(_133,arr[i],i,arr);
-if((_130)&&(!_135)){
-return false;
-}else{
-if((!_130)&&(_135)){
-return true;
-}
-}
-}
-return (_130)?true:false;
-}
-};
-dojo.lang.every=function(arr,_137,_138){
-return this._everyOrSome(true,arr,_137,_138);
-};
-dojo.lang.some=function(arr,_13a,_13b){
-return this._everyOrSome(false,arr,_13a,_13b);
-};
-dojo.lang.filter=function(arr,_13d,_13e){
-var _13f=dojo.lang.isString(arr);
-if(_13f){
-arr=arr.split("");
-}
-if(Array.filter){
-var _140=Array.filter(arr,_13d,_13e);
-}else{
-if(!_13e){
-if(arguments.length>=3){
-dojo.raise("thisObject doesn't exist!");
-}
-_13e=dj_global;
-}
-var _140=[];
-for(var i=0;i<arr.length;i++){
-if(_13d.call(_13e,arr[i],i,arr)){
-_140.push(arr[i]);
-}
-}
-}
-if(_13f){
-return _140.join("");
-}else{
-return _140;
-}
-};
-dojo.lang.unnest=function(){
-var out=[];
-for(var i=0;i<arguments.length;i++){
-if(dojo.lang.isArrayLike(arguments[i])){
-var add=dojo.lang.unnest.apply(this,arguments[i]);
-out=out.concat(add);
-}else{
-out.push(arguments[i]);
-}
-}
-return out;
-};
-dojo.lang.toArray=function(_145,_146){
-var _147=[];
-for(var i=_146||0;i<_145.length;i++){
-_147.push(_145[i]);
-}
-return _147;
-};
-dojo.provide("dojo.lang.func");
-dojo.require("dojo.lang.common");
-dojo.lang.hitch=function(_149,_14a){
-if(dojo.lang.isString(_14a)){
-var fcn=_149[_14a];
-}else{
-var fcn=_14a;
-}
-return function(){
-return fcn.apply(_149,arguments);
-};
-};
-dojo.lang.anonCtr=0;
-dojo.lang.anon={};
-dojo.lang.nameAnonFunc=function(_14c,_14d,_14e){
-var nso=(_14d||dojo.lang.anon);
-if((_14e)||((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"]==true))){
-for(var x in nso){
-if(nso[x]===_14c){
-return x;
-}
-}
-}
-var ret="__"+dojo.lang.anonCtr++;
-while(typeof nso[ret]!="undefined"){
-ret="__"+dojo.lang.anonCtr++;
-}
-nso[ret]=_14c;
-return ret;
-};
-dojo.lang.forward=function(_152){
-return function(){
-return this[_152].apply(this,arguments);
-};
-};
-dojo.lang.curry=function(ns,func){
-var _155=[];
-ns=ns||dj_global;
-if(dojo.lang.isString(func)){
-func=ns[func];
-}
-for(var x=2;x<arguments.length;x++){
-_155.push(arguments[x]);
-}
-var _157=(func["__preJoinArity"]||func.length)-_155.length;
-function gather(_158,_159,_15a){
-var _15b=_15a;
-var _15c=_159.slice(0);
-for(var x=0;x<_158.length;x++){
-_15c.push(_158[x]);
-}
-_15a=_15a-_158.length;
-if(_15a<=0){
-var res=func.apply(ns,_15c);
-_15a=_15b;
-return res;
-}else{
-return function(){
-return gather(arguments,_15c,_15a);
-};
-}
-}
-return gather([],_155,_157);
-};
-dojo.lang.curryArguments=function(ns,func,args,_162){
-var _163=[];
-var x=_162||0;
-for(x=_162;x<args.length;x++){
-_163.push(args[x]);
-}
-return dojo.lang.curry.apply(dojo.lang,[ns,func].concat(_163));
-};
-dojo.lang.tryThese=function(){
-for(var x=0;x<arguments.length;x++){
-try{
-if(typeof arguments[x]=="function"){
-var ret=(arguments[x]());
-if(ret){
-return ret;
-}
-}
-}
-catch(e){
-dojo.debug(e);
-}
-}
-};
-dojo.lang.delayThese=function(farr,cb,_169,_16a){
-if(!farr.length){
-if(typeof _16a=="function"){
-_16a();
-}
-return;
-}
-if((typeof _169=="undefined")&&(typeof cb=="number")){
-_169=cb;
-cb=function(){
-};
-}else{
-if(!cb){
-cb=function(){
-};
-if(!_169){
-_169=0;
-}
-}
-}
-setTimeout(function(){
-(farr.shift())();
-cb();
-dojo.lang.delayThese(farr,cb,_169,_16a);
-},_169);
-};
-dojo.provide("dojo.string.extras");
-dojo.require("dojo.string.common");
-dojo.require("dojo.lang");
-dojo.string.substituteParams=function(_16b,hash){
-var map=(typeof hash=="object")?hash:dojo.lang.toArray(arguments,1);
-return _16b.replace(/\%\{(\w+)\}/g,function(_16e,key){
-return map[key]||dojo.raise("Substitution not found: "+key);
-});
-};
-dojo.string.paramString=function(str,_171,_172){
-dojo.deprecated("dojo.string.paramString","use dojo.string.substituteParams instead","0.4");
-for(var name in _171){
-var re=new RegExp("\\%\\{"+name+"\\}","g");
-str=str.replace(re,_171[name]);
-}
-if(_172){
-str=str.replace(/%\{([^\}\s]+)\}/g,"");
-}
-return str;
-};
-dojo.string.capitalize=function(str){
-if(!dojo.lang.isString(str)){
-return "";
-}
-if(arguments.length==0){
-str=this;
-}
-var _176=str.split(" ");
-for(var i=0;i<_176.length;i++){
-_176[i]=_176[i].charAt(0).toUpperCase()+_176[i].substring(1);
-}
-return _176.join(" ");
-};
-dojo.string.isBlank=function(str){
-if(!dojo.lang.isString(str)){
-return true;
-}
-return (dojo.string.trim(str).length==0);
-};
-dojo.string.encodeAscii=function(str){
-if(!dojo.lang.isString(str)){
-return str;
-}
-var ret="";
-var _17b=escape(str);
-var _17c,re=/%u([0-9A-F]{4})/i;
-while((_17c=_17b.match(re))){
-var num=Number("0x"+_17c[1]);
-var _17e=escape("&#"+num+";");
-ret+=_17b.substring(0,_17c.index)+_17e;
-_17b=_17b.substring(_17c.index+_17c[0].length);
-}
-ret+=_17b.replace(/\+/g,"%2B");
-return ret;
-};
-dojo.string.escape=function(type,str){
-var args=dojo.lang.toArray(arguments,1);
-switch(type.toLowerCase()){
-case "xml":
-case "html":
-case "xhtml":
-return dojo.string.escapeXml.apply(this,args);
-case "sql":
-return dojo.string.escapeSql.apply(this,args);
-case "regexp":
-case "regex":
-return dojo.string.escapeRegExp.apply(this,args);
-case "javascript":
-case "jscript":
-case "js":
-return dojo.string.escapeJavaScript.apply(this,args);
-case "ascii":
-return dojo.string.encodeAscii.apply(this,args);
-default:
-return str;
-}
-};
-dojo.string.escapeXml=function(str,_183){
-str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
-if(!_183){
-str=str.replace(/'/gm,"&#39;");
-}
-return str;
-};
-dojo.string.escapeSql=function(str){
-return str.replace(/'/gm,"''");
-};
-dojo.string.escapeRegExp=function(str){
-return str.replace(/\\/gm,"\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm,"\\$1");
-};
-dojo.string.escapeJavaScript=function(str){
-return str.replace(/(["'\f\b\n\t\r])/gm,"\\$1");
-};
-dojo.string.escapeString=function(str){
-return ("\""+str.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
-};
-dojo.string.summary=function(str,len){
-if(!len||str.length<=len){
-return str;
-}else{
-return str.substring(0,len).replace(/\.+$/,"")+"...";
-}
-};
-dojo.string.endsWith=function(str,end,_18c){
-if(_18c){
-str=str.toLowerCase();
-end=end.toLowerCase();
-}
-if((str.length-end.length)<0){
-return false;
-}
-return str.lastIndexOf(end)==str.length-end.length;
-};
-dojo.string.endsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.endsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.startsWith=function(str,_190,_191){
-if(_191){
-str=str.toLowerCase();
-_190=_190.toLowerCase();
-}
-return str.indexOf(_190)==0;
-};
-dojo.string.startsWithAny=function(str){
-for(var i=1;i<arguments.length;i++){
-if(dojo.string.startsWith(str,arguments[i])){
-return true;
-}
-}
-return false;
-};
-dojo.string.has=function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>-1){
-return true;
-}
-}
-return false;
-};
-dojo.string.normalizeNewlines=function(text,_197){
-if(_197=="\n"){
-text=text.replace(/\r\n/g,"\n");
-text=text.replace(/\r/g,"\n");
-}else{
-if(_197=="\r"){
-text=text.replace(/\r\n/g,"\r");
-text=text.replace(/\n/g,"\r");
-}else{
-text=text.replace(/([^\r])\n/g,"$1\r\n");
-text=text.replace(/\r([^\n])/g,"\r\n$1");
-}
-}
-return text;
-};
-dojo.string.splitEscaped=function(str,_199){
-var _19a=[];
-for(var i=0,prevcomma=0;i<str.length;i++){
-if(str.charAt(i)=="\\"){
-i++;
-continue;
-}
-if(str.charAt(i)==_199){
-_19a.push(str.substring(prevcomma,i));
-prevcomma=i+1;
-}
-}
-_19a.push(str.substr(prevcomma));
-return _19a;
-};
-dojo.provide("dojo.dom");
-dojo.require("dojo.lang.array");
-dojo.dom.ELEMENT_NODE=1;
-dojo.dom.ATTRIBUTE_NODE=2;
-dojo.dom.TEXT_NODE=3;
-dojo.dom.CDATA_SECTION_NODE=4;
-dojo.dom.ENTITY_REFERENCE_NODE=5;
-dojo.dom.ENTITY_NODE=6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE=7;
-dojo.dom.COMMENT_NODE=8;
-dojo.dom.DOCUMENT_NODE=9;
-dojo.dom.DOCUMENT_TYPE_NODE=10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE=11;
-dojo.dom.NOTATION_NODE=12;
-dojo.dom.dojoml="http://www.dojotoolkit.org/2004/dojoml";
-dojo.dom.xmlns={svg:"http://www.w3.org/2000/svg",smil:"http://www.w3.org/2001/SMIL20/",mml:"http://www.w3.org/1998/Math/MathML",cml:"http://www.xml-cml.org",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml",xul:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",xbl:"http://www.mozilla.org/xbl",fo:"http://www.w3.org/1999/XSL/Format",xsl:"http://www.w3.org/1999/XSL/Transform",xslt:"http://www.w3.org/1999/XSL/Transform",xi:"http://www.w3.org/2001/XInclude",xforms:"http://www.w3.org/2002/01/xforms",saxon:"http://icl.com/saxon",xalan:"http://xml.apache.org/xslt",xsd:"http://www.w3.org/2001/XMLSchema",dt:"http://www.w3.org/2001/XMLSchema-datatypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",rdf:"http://www.w3.org/1999/02/22-rdf-syntax-ns#",rdfs:"http://www.w3.org/2000/01/rdf-schema#",dc:"http://purl.org/dc/elements/1.1/",dcq:"http://purl.org/dc/qualifiers/1.0","soap-env":"http://schemas.xmlsoap.org/soap/envelope/",wsdl:"http://schemas.xmlsoap.org/wsdl/",AdobeExtensions:"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"};
-dojo.dom.isNode=function(wh){
-if(typeof Element=="object"){
-try{
-return wh instanceof Element;
-}
-catch(E){
-}
-}else{
-return wh&&!isNaN(wh.nodeType);
-}
-};
-dojo.dom.getTagName=function(node){
-dojo.deprecated("dojo.dom.getTagName","use node.tagName instead","0.4");
-var _19e=node.tagName;
-if(_19e.substr(0,5).toLowerCase()!="dojo:"){
-if(_19e.substr(0,4).toLowerCase()=="dojo"){
-return "dojo:"+_19e.substring(4).toLowerCase();
-}
-var djt=node.getAttribute("dojoType")||node.getAttribute("dojotype");
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-if((node.getAttributeNS)&&(node.getAttributeNS(this.dojoml,"type"))){
-return "dojo:"+node.getAttributeNS(this.dojoml,"type").toLowerCase();
-}
-try{
-djt=node.getAttribute("dojo:type");
-}
-catch(e){
-}
-if(djt){
-return "dojo:"+djt.toLowerCase();
-}
-if((!dj_global["djConfig"])||(!djConfig["ignoreClassNames"])){
-var _1a0=node.className||node.getAttribute("class");
-if((_1a0)&&(_1a0.indexOf)&&(_1a0.indexOf("dojo-")!=-1)){
-var _1a1=_1a0.split(" ");
-for(var x=0;x<_1a1.length;x++){
-if((_1a1[x].length>5)&&(_1a1[x].indexOf("dojo-")>=0)){
-return "dojo:"+_1a1[x].substr(5).toLowerCase();
-}
-}
-}
-}
-}
-return _19e.toLowerCase();
-};
-dojo.dom.getUniqueId=function(){
-do{
-var id="dj_unique_"+(++arguments.callee._idIncrement);
-}while(document.getElementById(id));
-return id;
-};
-dojo.dom.getUniqueId._idIncrement=0;
-dojo.dom.firstElement=dojo.dom.getFirstChildElement=function(_1a4,_1a5){
-var node=_1a4.firstChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.nextSibling;
-}
-if(_1a5&&node&&node.tagName&&node.tagName.toLowerCase()!=_1a5.toLowerCase()){
-node=dojo.dom.nextElement(node,_1a5);
-}
-return node;
-};
-dojo.dom.lastElement=dojo.dom.getLastChildElement=function(_1a7,_1a8){
-var node=_1a7.lastChild;
-while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE){
-node=node.previousSibling;
-}
-if(_1a8&&node&&node.tagName&&node.tagName.toLowerCase()!=_1a8.toLowerCase()){
-node=dojo.dom.prevElement(node,_1a8);
-}
-return node;
-};
-dojo.dom.nextElement=dojo.dom.getNextSiblingElement=function(node,_1ab){
-if(!node){
-return null;
-}
-do{
-node=node.nextSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_1ab&&_1ab.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.nextElement(node,_1ab);
-}
-return node;
-};
-dojo.dom.prevElement=dojo.dom.getPreviousSiblingElement=function(node,_1ad){
-if(!node){
-return null;
-}
-if(_1ad){
-_1ad=_1ad.toLowerCase();
-}
-do{
-node=node.previousSibling;
-}while(node&&node.nodeType!=dojo.dom.ELEMENT_NODE);
-if(node&&_1ad&&_1ad.toLowerCase()!=node.tagName.toLowerCase()){
-return dojo.dom.prevElement(node,_1ad);
-}
-return node;
-};
-dojo.dom.moveChildren=function(_1ae,_1af,trim){
-var _1b1=0;
-if(trim){
-while(_1ae.hasChildNodes()&&_1ae.firstChild.nodeType==dojo.dom.TEXT_NODE){
-_1ae.removeChild(_1ae.firstChild);
-}
-while(_1ae.hasChildNodes()&&_1ae.lastChild.nodeType==dojo.dom.TEXT_NODE){
-_1ae.removeChild(_1ae.lastChild);
-}
-}
-while(_1ae.hasChildNodes()){
-_1af.appendChild(_1ae.firstChild);
-_1b1++;
-}
-return _1b1;
-};
-dojo.dom.copyChildren=function(_1b2,_1b3,trim){
-var _1b5=_1b2.cloneNode(true);
-return this.moveChildren(_1b5,_1b3,trim);
-};
-dojo.dom.removeChildren=function(node){
-var _1b7=node.childNodes.length;
-while(node.hasChildNodes()){
-node.removeChild(node.firstChild);
-}
-return _1b7;
-};
-dojo.dom.replaceChildren=function(node,_1b9){
-dojo.dom.removeChildren(node);
-node.appendChild(_1b9);
-};
-dojo.dom.removeNode=function(node){
-if(node&&node.parentNode){
-return node.parentNode.removeChild(node);
-}
-};
-dojo.dom.getAncestors=function(node,_1bc,_1bd){
-var _1be=[];
-var _1bf=dojo.lang.isFunction(_1bc);
-while(node){
-if(!_1bf||_1bc(node)){
-_1be.push(node);
-}
-if(_1bd&&_1be.length>0){
-return _1be[0];
-}
-node=node.parentNode;
-}
-if(_1bd){
-return null;
-}
-return _1be;
-};
-dojo.dom.getAncestorsByTag=function(node,tag,_1c2){
-tag=tag.toLowerCase();
-return dojo.dom.getAncestors(node,function(el){
-return ((el.tagName)&&(el.tagName.toLowerCase()==tag));
-},_1c2);
-};
-dojo.dom.getFirstAncestorByTag=function(node,tag){
-return dojo.dom.getAncestorsByTag(node,tag,true);
-};
-dojo.dom.isDescendantOf=function(node,_1c7,_1c8){
-if(_1c8&&node){
-node=node.parentNode;
-}
-while(node){
-if(node==_1c7){
-return true;
-}
-node=node.parentNode;
-}
-return false;
-};
-dojo.dom.innerXML=function(node){
-if(node.innerXML){
-return node.innerXML;
-}else{
-if(node.xml){
-return node.xml;
-}else{
-if(typeof XMLSerializer!="undefined"){
-return (new XMLSerializer()).serializeToString(node);
-}
-}
-}
-};
-dojo.dom.createDocument=function(){
-var doc=null;
-if(!dj_undef("ActiveXObject")){
-var _1cb=["MSXML2","Microsoft","MSXML","MSXML3"];
-for(var i=0;i<_1cb.length;i++){
-try{
-doc=new ActiveXObject(_1cb[i]+".XMLDOM");
-}
-catch(e){
-}
-if(doc){
-break;
-}
-}
-}else{
-if((document.implementation)&&(document.implementation.createDocument)){
-doc=document.implementation.createDocument("","",null);
-}
-}
-return doc;
-};
-dojo.dom.createDocumentFromText=function(str,_1ce){
-if(!_1ce){
-_1ce="text/xml";
-}
-if(!dj_undef("DOMParser")){
-var _1cf=new DOMParser();
-return _1cf.parseFromString(str,_1ce);
-}else{
-if(!dj_undef("ActiveXObject")){
-var _1d0=dojo.dom.createDocument();
-if(_1d0){
-_1d0.async=false;
-_1d0.loadXML(str);
-return _1d0;
-}else{
-dojo.debug("toXml didn't work?");
-}
-}else{
-if(document.createElement){
-var tmp=document.createElement("xml");
-tmp.innerHTML=str;
-if(document.implementation&&document.implementation.createDocument){
-var _1d2=document.implementation.createDocument("foo","",null);
-for(var i=0;i<tmp.childNodes.length;i++){
-_1d2.importNode(tmp.childNodes.item(i),true);
-}
-return _1d2;
-}
-return ((tmp.document)&&(tmp.document.firstChild?tmp.document.firstChild:tmp));
-}
-}
-}
-return null;
-};
-dojo.dom.prependChild=function(node,_1d5){
-if(_1d5.firstChild){
-_1d5.insertBefore(node,_1d5.firstChild);
-}else{
-_1d5.appendChild(node);
-}
-return true;
-};
-dojo.dom.insertBefore=function(node,ref,_1d8){
-if(_1d8!=true&&(node===ref||node.nextSibling===ref)){
-return false;
-}
-var _1d9=ref.parentNode;
-_1d9.insertBefore(node,ref);
-return true;
-};
-dojo.dom.insertAfter=function(node,ref,_1dc){
-var pn=ref.parentNode;
-if(ref==pn.lastChild){
-if((_1dc!=true)&&(node===ref)){
-return false;
-}
-pn.appendChild(node);
-}else{
-return this.insertBefore(node,ref.nextSibling,_1dc);
-}
-return true;
-};
-dojo.dom.insertAtPosition=function(node,ref,_1e0){
-if((!node)||(!ref)||(!_1e0)){
-return false;
-}
-switch(_1e0.toLowerCase()){
-case "before":
-return dojo.dom.insertBefore(node,ref);
-case "after":
-return dojo.dom.insertAfter(node,ref);
-case "first":
-if(ref.firstChild){
-return dojo.dom.insertBefore(node,ref.firstChild);
-}else{
-ref.appendChild(node);
-return true;
-}
-break;
-default:
-ref.appendChild(node);
-return true;
-}
-};
-dojo.dom.insertAtIndex=function(node,_1e2,_1e3){
-var _1e4=_1e2.childNodes;
-if(!_1e4.length){
-_1e2.appendChild(node);
-return true;
-}
-var _1e5=null;
-for(var i=0;i<_1e4.length;i++){
-var _1e7=_1e4.item(i)["getAttribute"]?parseInt(_1e4.item(i).getAttribute("dojoinsertionindex")):-1;
-if(_1e7<_1e3){
-_1e5=_1e4.item(i);
-}
-}
-if(_1e5){
-return dojo.dom.insertAfter(node,_1e5);
-}else{
-return dojo.dom.insertBefore(node,_1e4.item(0));
-}
-};
-dojo.dom.textContent=function(node,text){
-if(text){
-dojo.dom.replaceChildren(node,document.createTextNode(text));
-return text;
-}else{
-var _1ea="";
-if(node==null){
-return _1ea;
-}
-for(var i=0;i<node.childNodes.length;i++){
-switch(node.childNodes[i].nodeType){
-case 1:
-case 5:
-_1ea+=dojo.dom.textContent(node.childNodes[i]);
-break;
-case 3:
-case 2:
-case 4:
-_1ea+=node.childNodes[i].nodeValue;
-break;
-default:
-break;
-}
-}
-return _1ea;
-}
-};
-dojo.dom.collectionToArray=function(_1ec){
-dojo.deprecated("dojo.dom.collectionToArray","use dojo.lang.toArray instead","0.4");
-return dojo.lang.toArray(_1ec);
-};
-dojo.dom.hasParent=function(node){
-return node&&node.parentNode&&dojo.dom.isNode(node.parentNode);
-};
-dojo.dom.isTag=function(node){
-if(node&&node.tagName){
-var arr=dojo.lang.toArray(arguments,1);
-return arr[dojo.lang.find(node.tagName,arr)]||"";
-}
-return "";
-};
-dojo.provide("dojo.undo.browser");
-dojo.require("dojo.io");
-try{
-if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+"iframe_history.html")+"'></iframe>");
-}
-}
-catch(e){
-}
-if(dojo.render.html.opera){
-dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-dojo.undo.browser={initialHref:window.location.href,initialHash:window.location.hash,moveForward:false,historyStack:[],forwardStack:[],historyIframe:null,bookmarkAnchor:null,locationTimer:null,setInitialState:function(args){
-this.initialState={"url":this.initialHref,"kwArgs":args,"urlHash":this.initialHash};
-},addToHistory:function(args){
-var hash=null;
-if(!this.historyIframe){
-this.historyIframe=window.frames["djhistory"];
-}
-if(!this.bookmarkAnchor){
-this.bookmarkAnchor=document.createElement("a");
-(document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor);
-this.bookmarkAnchor.style.display="none";
-}
-if((!args["changeUrl"])||(dojo.render.html.ie)){
-var url=dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-this.moveForward=true;
-dojo.io.setIFrameSrc(this.historyIframe,url,false);
-}
-if(args["changeUrl"]){
-this.changingUrl=true;
-hash="#"+((args["changeUrl"]!==true)?args["changeUrl"]:(new Date()).getTime());
-setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;",1);
-this.bookmarkAnchor.href=hash;
-if(dojo.render.html.ie){
-var _1f4=args["back"]||args["backButton"]||args["handle"];
-var tcb=function(_1f6){
-if(window.location.hash!=""){
-setTimeout("window.location.href = '"+hash+"';",1);
-}
-_1f4.apply(this,[_1f6]);
-};
-if(args["back"]){
-args.back=tcb;
-}else{
-if(args["backButton"]){
-args.backButton=tcb;
-}else{
-if(args["handle"]){
-args.handle=tcb;
-}
-}
-}
-this.forwardStack=[];
-var _1f7=args["forward"]||args["forwardButton"]||args["handle"];
-var tfw=function(_1f9){
-if(window.location.hash!=""){
-window.location.href=hash;
-}
-if(_1f7){
-_1f7.apply(this,[_1f9]);
-}
-};
-if(args["forward"]){
-args.forward=tfw;
-}else{
-if(args["forwardButton"]){
-args.forwardButton=tfw;
-}else{
-if(args["handle"]){
-args.handle=tfw;
-}
-}
-}
-}else{
-if(dojo.render.html.moz){
-if(!this.locationTimer){
-this.locationTimer=setInterval("dojo.undo.browser.checkLocation();",200);
-}
-}
-}
-}
-this.historyStack.push({"url":url,"kwArgs":args,"urlHash":hash});
-},checkLocation:function(){
-if(!this.changingUrl){
-var hsl=this.historyStack.length;
-if((window.location.hash==this.initialHash||window.location.href==this.initialHref)&&(hsl==1)){
-this.handleBackButton();
-return;
-}
-if(this.forwardStack.length>0){
-if(this.forwardStack[this.forwardStack.length-1].urlHash==window.location.hash){
-this.handleForwardButton();
-return;
-}
-}
-if((hsl>=2)&&(this.historyStack[hsl-2])){
-if(this.historyStack[hsl-2].urlHash==window.location.hash){
-this.handleBackButton();
-return;
-}
-}
-}
-},iframeLoaded:function(evt,_1fc){
-if(!dojo.render.html.opera){
-var _1fd=this._getUrlQuery(_1fc.href);
-if(_1fd==null){
-if(this.historyStack.length==1){
-this.handleBackButton();
-}
-return;
-}
-if(this.moveForward){
-this.moveForward=false;
-return;
-}
-if(this.historyStack.length>=2&&_1fd==this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-this.handleBackButton();
-}else{
-if(this.forwardStack.length>0&&_1fd==this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-this.handleForwardButton();
-}
-}
-}
-},handleBackButton:function(){
-var _1fe=this.historyStack.pop();
-if(!_1fe){
-return;
-}
-var last=this.historyStack[this.historyStack.length-1];
-if(!last&&this.historyStack.length==0){
-last=this.initialState;
-}
-if(last){
-if(last.kwArgs["back"]){
-last.kwArgs["back"]();
-}else{
-if(last.kwArgs["backButton"]){
-last.kwArgs["backButton"]();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("back");
-}
-}
-}
-}
-this.forwardStack.push(_1fe);
-},handleForwardButton:function(){
-var last=this.forwardStack.pop();
-if(!last){
-return;
-}
-if(last.kwArgs["forward"]){
-last.kwArgs.forward();
-}else{
-if(last.kwArgs["forwardButton"]){
-last.kwArgs.forwardButton();
-}else{
-if(last.kwArgs["handle"]){
-last.kwArgs.handle("forward");
-}
-}
-}
-this.historyStack.push(last);
-},_getUrlQuery:function(url){
-var _202=url.split("?");
-if(_202.length<2){
-return null;
-}else{
-return _202[1];
-}
-}};
-dojo.provide("dojo.io.BrowserIO");
-dojo.require("dojo.io");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.dom");
-dojo.require("dojo.undo.browser");
-dojo.io.checkChildrenForFile=function(node){
-var _204=false;
-var _205=node.getElementsByTagName("input");
-dojo.lang.forEach(_205,function(_206){
-if(_204){
-return;
-}
-if(_206.getAttribute("type")=="file"){
-_204=true;
-}
-});
-return _204;
-};
-dojo.io.formHasFile=function(_207){
-return dojo.io.checkChildrenForFile(_207);
-};
-dojo.io.updateNode=function(node,_209){
-node=dojo.byId(node);
-var args=_209;
-if(dojo.lang.isString(_209)){
-args={url:_209};
-}
-args.mimetype="text/html";
-args.load=function(t,d,e){
-while(node.firstChild){
-if(dojo["event"]){
-try{
-dojo.event.browser.clean(node.firstChild);
-}
-catch(e){
-}
-}
-node.removeChild(node.firstChild);
-}
-node.innerHTML=d;
-};
-dojo.io.bind(args);
-};
-dojo.io.formFilter=function(node){
-var type=(node.type||"").toLowerCase();
-return !node.disabled&&node.name&&!dojo.lang.inArray(type,["file","submit","image","reset","button"]);
-};
-dojo.io.encodeForm=function(_210,_211,_212){
-if((!_210)||(!_210.tagName)||(!_210.tagName.toLowerCase()=="form")){
-dojo.raise("Attempted to encode a non-form element.");
-}
-if(!_212){
-_212=dojo.io.formFilter;
-}
-var enc=/utf/i.test(_211||"")?encodeURIComponent:dojo.string.encodeAscii;
-var _214=[];
-for(var i=0;i<_210.elements.length;i++){
-var elm=_210.elements[i];
-if(!elm||elm.tagName.toLowerCase()=="fieldset"||!_212(elm)){
-continue;
-}
-var name=enc(elm.name);
-var type=elm.type.toLowerCase();
-if(type=="select-multiple"){
-for(var j=0;j<elm.options.length;j++){
-if(elm.options[j].selected){
-_214.push(name+"="+enc(elm.options[j].value));
-}
-}
-}else{
-if(dojo.lang.inArray(type,["radio","checkbox"])){
-if(elm.checked){
-_214.push(name+"="+enc(elm.value));
-}
-}else{
-_214.push(name+"="+enc(elm.value));
-}
-}
-}
-var _21a=_210.getElementsByTagName("input");
-for(var i=0;i<_21a.length;i++){
-var _21b=_21a[i];
-if(_21b.type.toLowerCase()=="image"&&_21b.form==_210&&_212(_21b)){
-var name=enc(_21b.name);
-_214.push(name+"="+enc(_21b.value));
-_214.push(name+".x=0");
-_214.push(name+".y=0");
-}
-}
-return _214.join("&")+"&";
-};
-dojo.io.FormBind=function(args){
-this.bindArgs={};
-if(args&&args.formNode){
-this.init(args);
-}else{
-if(args){
-this.init({formNode:args});
-}
-}
-};
-dojo.lang.extend(dojo.io.FormBind,{form:null,bindArgs:null,clickedButton:null,init:function(args){
-var form=dojo.byId(args.formNode);
-if(!form||!form.tagName||form.tagName.toLowerCase()!="form"){
-throw new Error("FormBind: Couldn't apply, invalid form");
-}else{
-if(this.form==form){
-return;
-}else{
-if(this.form){
-throw new Error("FormBind: Already applied to a form");
-}
-}
-}
-dojo.lang.mixin(this.bindArgs,args);
-this.form=form;
-this.connect(form,"onsubmit","submit");
-for(var i=0;i<form.elements.length;i++){
-var node=form.elements[i];
-if(node&&node.type&&dojo.lang.inArray(node.type.toLowerCase(),["submit","button"])){
-this.connect(node,"onclick","click");
-}
-}
-var _221=form.getElementsByTagName("input");
-for(var i=0;i<_221.length;i++){
-var _222=_221[i];
-if(_222.type.toLowerCase()=="image"&&_222.form==form){
-this.connect(_222,"onclick","click");
-}
-}
-},onSubmit:function(form){
-return true;
-},submit:function(e){
-e.preventDefault();
-if(this.onSubmit(this.form)){
-dojo.io.bind(dojo.lang.mixin(this.bindArgs,{formFilter:dojo.lang.hitch(this,"formFilter")}));
-}
-},click:function(e){
-var node=e.currentTarget;
-if(node.disabled){
-return;
-}
-this.clickedButton=node;
-},formFilter:function(node){
-var type=(node.type||"").toLowerCase();
-var _229=false;
-if(node.disabled||!node.name){
-_229=false;
-}else{
-if(dojo.lang.inArray(type,["submit","button","image"])){
-if(!this.clickedButton){
-this.clickedButton=node;
-}
-_229=node==this.clickedButton;
-}else{
-_229=!dojo.lang.inArray(type,["file","submit","reset","button"]);
-}
-}
-return _229;
-},connect:function(_22a,_22b,_22c){
-if(dojo.evalObjPath("dojo.event.connect")){
-dojo.event.connect(_22a,_22b,this,_22c);
-}else{
-var fcn=dojo.lang.hitch(this,_22c);
-_22a[_22b]=function(e){
-if(!e){
-e=window.event;
-}
-if(!e.currentTarget){
-e.currentTarget=e.srcElement;
-}
-if(!e.preventDefault){
-e.preventDefault=function(){
-window.event.returnValue=false;
-};
-}
-fcn(e);
-};
-}
-}});
-dojo.io.XMLHTTPTransport=new function(){
-var _22f=this;
-var _230={};
-this.useCache=false;
-this.preventCache=false;
-function getCacheKey(url,_232,_233){
-return url+"|"+_232+"|"+_233.toLowerCase();
-}
-function addToCache(url,_235,_236,http){
-_230[getCacheKey(url,_235,_236)]=http;
-}
-function getFromCache(url,_239,_23a){
-return _230[getCacheKey(url,_239,_23a)];
-}
-this.clearCache=function(){
-_230={};
-};
-function doLoad(_23b,http,url,_23e,_23f){
-if(((http.status>=200)&&(http.status<300))||(http.status==304)||(location.protocol=="file:"&&(http.status==0||http.status==undefined))||(location.protocol=="chrome:"&&(http.status==0||http.status==undefined))){
-var ret;
-if(_23b.method.toLowerCase()=="head"){
-var _241=http.getAllResponseHeaders();
-ret={};
-ret.toString=function(){
-return _241;
-};
-var _242=_241.split(/[\r\n]+/g);
-for(var i=0;i<_242.length;i++){
-var pair=_242[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-if(pair){
-ret[pair[1]]=pair[2];
-}
-}
-}else{
-if(_23b.mimetype=="text/javascript"){
-try{
-ret=dj_eval(http.responseText);
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=null;
-}
-}else{
-if(_23b.mimetype=="text/json"){
-try{
-ret=dj_eval("("+http.responseText+")");
-}
-catch(e){
-dojo.debug(e);
-dojo.debug(http.responseText);
-ret=false;
-}
-}else{
-if((_23b.mimetype=="application/xml")||(_23b.mimetype=="text/xml")){
-ret=http.responseXML;
-if(!ret||typeof ret=="string"||!http.getResponseHeader("Content-Type")){
-ret=dojo.dom.createDocumentFromText(http.responseText);
-}
-}else{
-ret=http.responseText;
-}
-}
-}
-}
-if(_23f){
-addToCache(url,_23e,_23b.method,http);
-}
-_23b[(typeof _23b.load=="function")?"load":"handle"]("load",ret,http,_23b);
-}else{
-var _245=new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-_23b[(typeof _23b.error=="function")?"error":"handle"]("error",_245,http,_23b);
-}
-}
-function setHeaders(http,_247){
-if(_247["headers"]){
-for(var _248 in _247["headers"]){
-if(_248.toLowerCase()=="content-type"&&!_247["contentType"]){
-_247["contentType"]=_247["headers"][_248];
-}else{
-http.setRequestHeader(_248,_247["headers"][_248]);
-}
-}
-}
-}
-this.inFlight=[];
-this.inFlightTimer=null;
-this.startWatchingInFlight=function(){
-if(!this.inFlightTimer){
-this.inFlightTimer=setInterval("dojo.io.XMLHTTPTransport.watchInFlight();",10);
-}
-};
-this.watchInFlight=function(){
-var now=null;
-for(var x=this.inFlight.length-1;x>=0;x--){
-var tif=this.inFlight[x];
-if(!tif){
-this.inFlight.splice(x,1);
-continue;
-}
-if(4==tif.http.readyState){
-this.inFlight.splice(x,1);
-doLoad(tif.req,tif.http,tif.url,tif.query,tif.useCache);
-}else{
-if(tif.startTime){
-if(!now){
-now=(new Date()).getTime();
-}
-if(tif.startTime+(tif.req.timeoutSeconds*1000)<now){
-if(typeof tif.http.abort=="function"){
-tif.http.abort();
-}
-this.inFlight.splice(x,1);
-tif.req[(typeof tif.req.timeout=="function")?"timeout":"handle"]("timeout",null,tif.http,tif.req);
-}
-}
-}
-}
-if(this.inFlight.length==0){
-clearInterval(this.inFlightTimer);
-this.inFlightTimer=null;
-}
-};
-var _24c=dojo.hostenv.getXmlhttpObject()?true:false;
-this.canHandle=function(_24d){
-return _24c&&dojo.lang.inArray((_24d["mimetype"].toLowerCase()||""),["text/plain","text/html","application/xml","text/xml","text/javascript","text/json"])&&!(_24d["formNode"]&&dojo.io.formHasFile(_24d["formNode"]));
-};
-this.multipartBoundary="45309FFF-BD65-4d50-99C9-36986896A96F";
-this.bind=function(_24e){
-if(!_24e["url"]){
-if(!_24e["formNode"]&&(_24e["backButton"]||_24e["back"]||_24e["changeUrl"]||_24e["watchForURL"])&&(!djConfig.preventBackButtonFix)){
-dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request","Use dojo.undo.browser.addToHistory() instead.","0.4");
-dojo.undo.browser.addToHistory(_24e);
-return true;
-}
-}
-var url=_24e.url;
-var _250="";
-if(_24e["formNode"]){
-var ta=_24e.formNode.getAttribute("action");
-if((ta)&&(!_24e["url"])){
-url=ta;
-}
-var tp=_24e.formNode.getAttribute("method");
-if((tp)&&(!_24e["method"])){
-_24e.method=tp;
-}
-_250+=dojo.io.encodeForm(_24e.formNode,_24e.encoding,_24e["formFilter"]);
-}
-if(url.indexOf("#")>-1){
-dojo.debug("Warning: dojo.io.bind: stripping hash values from url:",url);
-url=url.split("#")[0];
-}
-if(_24e["file"]){
-_24e.method="post";
-}
-if(!_24e["method"]){
-_24e.method="get";
-}
-if(_24e.method.toLowerCase()=="get"){
-_24e.multipart=false;
-}else{
-if(_24e["file"]){
-_24e.multipart=true;
-}else{
-if(!_24e["multipart"]){
-_24e.multipart=false;
-}
-}
-}
-if(_24e["backButton"]||_24e["back"]||_24e["changeUrl"]){
-dojo.undo.browser.addToHistory(_24e);
-}
-var _253=_24e["content"]||{};
-if(_24e.sendTransport){
-_253["dojo.transport"]="xmlhttp";
-}
-do{
-if(_24e.postContent){
-_250=_24e.postContent;
-break;
-}
-if(_253){
-_250+=dojo.io.argsFromMap(_253,_24e.encoding);
-}
-if(_24e.method.toLowerCase()=="get"||!_24e.multipart){
-break;
-}
-var t=[];
-if(_250.length){
-var q=_250.split("&");
-for(var i=0;i<q.length;++i){
-if(q[i].length){
-var p=q[i].split("=");
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+p[0]+"\"","",p[1]);
-}
-}
-}
-if(_24e.file){
-if(dojo.lang.isArray(_24e.file)){
-for(var i=0;i<_24e.file.length;++i){
-var o=_24e.file[i];
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}else{
-var o=_24e.file;
-t.push("--"+this.multipartBoundary,"Content-Disposition: form-data; name=\""+o.name+"\"; filename=\""+("fileName" in o?o.fileName:o.name)+"\"","Content-Type: "+("contentType" in o?o.contentType:"application/octet-stream"),"",o.content);
-}
-}
-if(t.length){
-t.push("--"+this.multipartBoundary+"--","");
-_250=t.join("\r\n");
-}
-}while(false);
-var _259=_24e["sync"]?false:true;
-var _25a=_24e["preventCache"]||(this.preventCache==true&&_24e["preventCache"]!=false);
-var _25b=_24e["useCache"]==true||(this.useCache==true&&_24e["useCache"]!=false);
-if(!_25a&&_25b){
-var _25c=getFromCache(url,_250,_24e.method);
-if(_25c){
-doLoad(_24e,_25c,url,_250,false);
-return;
-}
-}
-var http=dojo.hostenv.getXmlhttpObject(_24e);
-var _25e=false;
-if(_259){
-var _25f=this.inFlight.push({"req":_24e,"http":http,"url":url,"query":_250,"useCache":_25b,"startTime":_24e.timeoutSeconds?(new Date()).getTime():0});
-this.startWatchingInFlight();
-}
-if(_24e.method.toLowerCase()=="post"){
-http.open("POST",url,_259);
-setHeaders(http,_24e);
-http.setRequestHeader("Content-Type",_24e.multipart?("multipart/form-data; boundary="+this.multipartBoundary):(_24e.contentType||"application/x-www-form-urlencoded"));
-try{
-http.send(_250);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_24e,{status:404},url,_250,_25b);
-}
-}else{
-var _260=url;
-if(_250!=""){
-_260+=(_260.indexOf("?")>-1?"&":"?")+_250;
-}
-if(_25a){
-_260+=(dojo.string.endsWithAny(_260,"?","&")?"":(_260.indexOf("?")>-1?"&":"?"))+"dojo.preventCache="+new Date().valueOf();
-}
-http.open(_24e.method.toUpperCase(),_260,_259);
-setHeaders(http,_24e);
-try{
-http.send(null);
-}
-catch(e){
-if(typeof http.abort=="function"){
-http.abort();
-}
-doLoad(_24e,{status:404},url,_250,_25b);
-}
-}
-if(!_259){
-doLoad(_24e,http,url,_250,_25b);
-}
-_24e.abort=function(){
-return http.abort();
-};
-return;
-};
-dojo.io.transports.addTransport("XMLHTTPTransport");
-};
-dojo.provide("dojo.event");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.func");
-dojo.event=new function(){
-this.canTimeout=dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-function interpolateArgs(args,_262){
-var dl=dojo.lang;
-var ao={srcObj:dj_global,srcFunc:null,adviceObj:dj_global,adviceFunc:null,aroundObj:null,aroundFunc:null,adviceType:(args.length>2)?args[0]:"after",precedence:"last",once:false,delay:null,rate:0,adviceMsg:false};
-switch(args.length){
-case 0:
-return;
-case 1:
-return;
-case 2:
-ao.srcFunc=args[0];
-ao.adviceFunc=args[1];
-break;
-case 3:
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-}else{
-if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-var _265=dl.nameAnonFunc(args[2],ao.adviceObj,_262);
-ao.adviceFunc=_265;
-}else{
-if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-ao.adviceType="after";
-ao.srcObj=dj_global;
-var _265=dl.nameAnonFunc(args[0],ao.srcObj,_262);
-ao.srcFunc=_265;
-ao.adviceObj=args[1];
-ao.adviceFunc=args[2];
-}
-}
-}
-}
-break;
-case 4:
-if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-ao.adviceType="after";
-ao.srcObj=args[0];
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-ao.adviceType=args[0];
-ao.srcObj=dj_global;
-var _265=dl.nameAnonFunc(args[1],dj_global,_262);
-ao.srcFunc=_265;
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-var _265=dl.nameAnonFunc(args[3],dj_global,_262);
-ao.adviceObj=dj_global;
-ao.adviceFunc=_265;
-}else{
-if(dl.isObject(args[1])){
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=dj_global;
-ao.adviceFunc=args[3];
-}else{
-if(dl.isObject(args[2])){
-ao.srcObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceObj=args[2];
-ao.adviceFunc=args[3];
-}else{
-ao.srcObj=ao.adviceObj=ao.aroundObj=dj_global;
-ao.srcFunc=args[1];
-ao.adviceFunc=args[2];
-ao.aroundFunc=args[3];
-}
-}
-}
-}
-}
-}
-break;
-case 6:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundFunc=args[5];
-ao.aroundObj=dj_global;
-break;
-default:
-ao.srcObj=args[1];
-ao.srcFunc=args[2];
-ao.adviceObj=args[3];
-ao.adviceFunc=args[4];
-ao.aroundObj=args[5];
-ao.aroundFunc=args[6];
-ao.once=args[7];
-ao.delay=args[8];
-ao.rate=args[9];
-ao.adviceMsg=args[10];
-break;
-}
-if(dl.isFunction(ao.aroundFunc)){
-var _265=dl.nameAnonFunc(ao.aroundFunc,ao.aroundObj,_262);
-ao.aroundFunc=_265;
-}
-if(dl.isFunction(ao.srcFunc)){
-ao.srcFunc=dl.getNameInObj(ao.srcObj,ao.srcFunc);
-}
-if(dl.isFunction(ao.adviceFunc)){
-ao.adviceFunc=dl.getNameInObj(ao.adviceObj,ao.adviceFunc);
-}
-if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-ao.aroundFunc=dl.getNameInObj(ao.aroundObj,ao.aroundFunc);
-}
-if(!ao.srcObj){
-dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-}
-if(!ao.adviceObj){
-dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-}
-return ao;
-}
-this.connect=function(){
-if(arguments.length==1){
-var ao=arguments[0];
-}else{
-var ao=interpolateArgs(arguments,true);
-}
-if(dojo.lang.isArray(ao.srcObj)&&ao.srcObj!=""){
-var _267={};
-for(var x in ao){
-_267[x]=ao[x];
-}
-var mjps=[];
-dojo.lang.forEach(ao.srcObj,function(src){
-if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-src=dojo.byId(src);
-}
-_267.srcObj=src;
-mjps.push(dojo.event.connect.call(dojo.event,_267));
-});
-return mjps;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc);
-if(ao.adviceFunc){
-var mjp2=dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj,ao.adviceFunc);
-}
-mjp.kwAddAdvice(ao);
-return mjp;
-};
-this.log=function(a1,a2){
-var _26f;
-if((arguments.length==1)&&(typeof a1=="object")){
-_26f=a1;
-}else{
-_26f={srcObj:a1,srcFunc:a2};
-}
-_26f.adviceFunc=function(){
-var _270=[];
-for(var x=0;x<arguments.length;x++){
-_270.push(arguments[x]);
-}
-dojo.debug("("+_26f.srcObj+")."+_26f.srcFunc,":",_270.join(", "));
-};
-this.kwConnect(_26f);
-};
-this.connectBefore=function(){
-var args=["before"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectAround=function(){
-var args=["around"];
-for(var i=0;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-return this.connect.apply(this,args);
-};
-this.connectOnce=function(){
-var ao=interpolateArgs(arguments,true);
-ao.once=true;
-return this.connect(ao);
-};
-this._kwConnectImpl=function(_277,_278){
-var fn=(_278)?"disconnect":"connect";
-if(typeof _277["srcFunc"]=="function"){
-_277.srcObj=_277["srcObj"]||dj_global;
-var _27a=dojo.lang.nameAnonFunc(_277.srcFunc,_277.srcObj,true);
-_277.srcFunc=_27a;
-}
-if(typeof _277["adviceFunc"]=="function"){
-_277.adviceObj=_277["adviceObj"]||dj_global;
-var _27a=dojo.lang.nameAnonFunc(_277.adviceFunc,_277.adviceObj,true);
-_277.adviceFunc=_27a;
-}
-return dojo.event[fn]((_277["type"]||_277["adviceType"]||"after"),_277["srcObj"]||dj_global,_277["srcFunc"],_277["adviceObj"]||_277["targetObj"]||dj_global,_277["adviceFunc"]||_277["targetFunc"],_277["aroundObj"],_277["aroundFunc"],_277["once"],_277["delay"],_277["rate"],_277["adviceMsg"]||false);
-};
-this.kwConnect=function(_27b){
-return this._kwConnectImpl(_27b,false);
-};
-this.disconnect=function(){
-var ao=interpolateArgs(arguments,true);
-if(!ao.adviceFunc){
-return;
-}
-var mjp=dojo.event.MethodJoinPoint.getForMethod(ao.srcObj,ao.srcFunc);
-return mjp.removeAdvice(ao.adviceObj,ao.adviceFunc,ao.adviceType,ao.once);
-};
-this.kwDisconnect=function(_27e){
-return this._kwConnectImpl(_27e,true);
-};
-};
-dojo.event.MethodInvocation=function(_27f,obj,args){
-this.jp_=_27f;
-this.object=obj;
-this.args=[];
-for(var x=0;x<args.length;x++){
-this.args[x]=args[x];
-}
-this.around_index=-1;
-};
-dojo.event.MethodInvocation.prototype.proceed=function(){
-this.around_index++;
-if(this.around_index>=this.jp_.around.length){
-return this.jp_.object[this.jp_.methodname].apply(this.jp_.object,this.args);
-}else{
-var ti=this.jp_.around[this.around_index];
-var mobj=ti[0]||dj_global;
-var meth=ti[1];
-return mobj[meth].call(mobj,this);
-}
-};
-dojo.event.MethodJoinPoint=function(obj,_287){
-this.object=obj||dj_global;
-this.methodname=_287;
-this.methodfunc=this.object[_287];
-this.before=[];
-this.after=[];
-this.around=[];
-};
-dojo.event.MethodJoinPoint.getForMethod=function(obj,_289){
-if(!obj){
-obj=dj_global;
-}
-if(!obj[_289]){
-obj[_289]=function(){
-};
-if(!obj[_289]){
-dojo.raise("Cannot set do-nothing method on that object "+_289);
-}
-}else{
-if((!dojo.lang.isFunction(obj[_289]))&&(!dojo.lang.isAlien(obj[_289]))){
-return null;
-}
-}
-var _28a=_289+"$joinpoint";
-var _28b=_289+"$joinpoint$method";
-var _28c=obj[_28a];
-if(!_28c){
-var _28d=false;
-if(dojo.event["browser"]){
-if((obj["attachEvent"])||(obj["nodeType"])||(obj["addEventListener"])){
-_28d=true;
-dojo.event.browser.addClobberNodeAttrs(obj,[_28a,_28b,_289]);
-}
-}
-var _28e=obj[_289].length;
-obj[_28b]=obj[_289];
-_28c=obj[_28a]=new dojo.event.MethodJoinPoint(obj,_28b);
-obj[_289]=function(){
-var args=[];
-if((_28d)&&(!arguments.length)){
-var evt=null;
-try{
-if(obj.ownerDocument){
-evt=obj.ownerDocument.parentWindow.event;
-}else{
-if(obj.documentElement){
-evt=obj.documentElement.ownerDocument.parentWindow.event;
-}else{
-evt=window.event;
-}
-}
-}
-catch(e){
-evt=window.event;
-}
-if(evt){
-args.push(dojo.event.browser.fixEvent(evt,this));
-}
-}else{
-for(var x=0;x<arguments.length;x++){
-if((x==0)&&(_28d)&&(dojo.event.browser.isEvent(arguments[x]))){
-args.push(dojo.event.browser.fixEvent(arguments[x],this));
-}else{
-args.push(arguments[x]);
-}
-}
-}
-return _28c.run.apply(_28c,args);
-};
-obj[_289].__preJoinArity=_28e;
-}
-return _28c;
-};
-dojo.lang.extend(dojo.event.MethodJoinPoint,{unintercept:function(){
-this.object[this.methodname]=this.methodfunc;
-this.before=[];
-this.after=[];
-this.around=[];
-},disconnect:dojo.lang.forward("unintercept"),run:function(){
-var obj=this.object||dj_global;
-var args=arguments;
-var _294=[];
-for(var x=0;x<args.length;x++){
-_294[x]=args[x];
-}
-var _296=function(marr){
-if(!marr){
-dojo.debug("Null argument to unrollAdvice()");
-return;
-}
-var _298=marr[0]||dj_global;
-var _299=marr[1];
-if(!_298[_299]){
-dojo.raise("function \""+_299+"\" does not exist on \""+_298+"\"");
-}
-var _29a=marr[2]||dj_global;
-var _29b=marr[3];
-var msg=marr[6];
-var _29d;
-var to={args:[],jp_:this,object:obj,proceed:function(){
-return _298[_299].apply(_298,to.args);
-}};
-to.args=_294;
-var _29f=parseInt(marr[4]);
-var _2a0=((!isNaN(_29f))&&(marr[4]!==null)&&(typeof marr[4]!="undefined"));
-if(marr[5]){
-var rate=parseInt(marr[5]);
-var cur=new Date();
-var _2a3=false;
-if((marr["last"])&&((cur-marr.last)<=rate)){
-if(dojo.event.canTimeout){
-if(marr["delayTimer"]){
-clearTimeout(marr.delayTimer);
-}
-var tod=parseInt(rate*2);
-var mcpy=dojo.lang.shallowCopy(marr);
-marr.delayTimer=setTimeout(function(){
-mcpy[5]=0;
-_296(mcpy);
-},tod);
-}
-return;
-}else{
-marr.last=cur;
-}
-}
-if(_29b){
-_29a[_29b].call(_29a,to);
-}else{
-if((_2a0)&&((dojo.render.html)||(dojo.render.svg))){
-dj_global["setTimeout"](function(){
-if(msg){
-_298[_299].call(_298,to);
-}else{
-_298[_299].apply(_298,args);
-}
-},_29f);
-}else{
-if(msg){
-_298[_299].call(_298,to);
-}else{
-_298[_299].apply(_298,args);
-}
-}
-}
-};
-if(this.before.length>0){
-dojo.lang.forEach(this.before,_296);
-}
-var _2a6;
-if(this.around.length>0){
-var mi=new dojo.event.MethodInvocation(this,obj,args);
-_2a6=mi.proceed();
-}else{
-if(this.methodfunc){
-_2a6=this.object[this.methodname].apply(this.object,args);
-}
-}
-if(this.after.length>0){
-dojo.lang.forEach(this.after,_296);
-}
-return (this.methodfunc)?_2a6:null;
-},getArr:function(kind){
-var arr=this.after;
-if((typeof kind=="string")&&(kind.indexOf("before")!=-1)){
-arr=this.before;
-}else{
-if(kind=="around"){
-arr=this.around;
-}
-}
-return arr;
-},kwAddAdvice:function(args){
-this.addAdvice(args["adviceObj"],args["adviceFunc"],args["aroundObj"],args["aroundFunc"],args["adviceType"],args["precedence"],args["once"],args["delay"],args["rate"],args["adviceMsg"]);
-},addAdvice:function(_2ab,_2ac,_2ad,_2ae,_2af,_2b0,once,_2b2,rate,_2b4){
-var arr=this.getArr(_2af);
-if(!arr){
-dojo.raise("bad this: "+this);
-}
-var ao=[_2ab,_2ac,_2ad,_2ae,_2b2,rate,_2b4];
-if(once){
-if(this.hasAdvice(_2ab,_2ac,_2af,arr)>=0){
-return;
-}
-}
-if(_2b0=="first"){
-arr.unshift(ao);
-}else{
-arr.push(ao);
-}
-},hasAdvice:function(_2b7,_2b8,_2b9,arr){
-if(!arr){
-arr=this.getArr(_2b9);
-}
-var ind=-1;
-for(var x=0;x<arr.length;x++){
-var aao=(typeof _2b8=="object")?(new String(_2b8)).toString():_2b8;
-var a1o=(typeof arr[x][1]=="object")?(new String(arr[x][1])).toString():arr[x][1];
-if((arr[x][0]==_2b7)&&(a1o==aao)){
-ind=x;
-}
-}
-return ind;
-},removeAdvice:function(_2bf,_2c0,_2c1,once){
-var arr=this.getArr(_2c1);
-var ind=this.hasAdvice(_2bf,_2c0,_2c1,arr);
-if(ind==-1){
-return false;
-}
-while(ind!=-1){
-arr.splice(ind,1);
-if(once){
-break;
-}
-ind=this.hasAdvice(_2bf,_2c0,_2c1,arr);
-}
-return true;
-}});
-dojo.require("dojo.event");
-dojo.provide("dojo.event.topic");
-dojo.event.topic=new function(){
-this.topics={};
-this.getTopic=function(_2c5){
-if(!this.topics[_2c5]){
-this.topics[_2c5]=new this.TopicImpl(_2c5);
-}
-return this.topics[_2c5];
-};
-this.registerPublisher=function(_2c6,obj,_2c8){
-var _2c6=this.getTopic(_2c6);
-_2c6.registerPublisher(obj,_2c8);
-};
-this.subscribe=function(_2c9,obj,_2cb){
-var _2c9=this.getTopic(_2c9);
-_2c9.subscribe(obj,_2cb);
-};
-this.unsubscribe=function(_2cc,obj,_2ce){
-var _2cc=this.getTopic(_2cc);
-_2cc.unsubscribe(obj,_2ce);
-};
-this.destroy=function(_2cf){
-this.getTopic(_2cf).destroy();
-delete this.topics[_2cf];
-};
-this.publishApply=function(_2d0,args){
-var _2d0=this.getTopic(_2d0);
-_2d0.sendMessage.apply(_2d0,args);
-};
-this.publish=function(_2d2,_2d3){
-var _2d2=this.getTopic(_2d2);
-var args=[];
-for(var x=1;x<arguments.length;x++){
-args.push(arguments[x]);
-}
-_2d2.sendMessage.apply(_2d2,args);
-};
-};
-dojo.event.topic.TopicImpl=function(_2d6){
-this.topicName=_2d6;
-this.subscribe=function(_2d7,_2d8){
-var tf=_2d8||_2d7;
-var to=(!_2d8)?dj_global:_2d7;
-dojo.event.kwConnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this.unsubscribe=function(_2db,_2dc){
-var tf=(!_2dc)?_2db:_2dc;
-var to=(!_2dc)?null:_2db;
-dojo.event.kwDisconnect({srcObj:this,srcFunc:"sendMessage",adviceObj:to,adviceFunc:tf});
-};
-this.destroy=function(){
-dojo.event.MethodJoinPoint.getForMethod(this,"sendMessage").disconnect();
-};
-this.registerPublisher=function(_2df,_2e0){
-dojo.event.connect(_2df,_2e0,this,"sendMessage");
-};
-this.sendMessage=function(_2e1){
-};
-};
-dojo.provide("dojo.event.browser");
-dojo.require("dojo.event");
-dojo._ie_clobber=new function(){
-this.clobberNodes=[];
-function nukeProp(node,prop){
-try{
-node[prop]=null;
-}
-catch(e){
-}
-try{
-delete node[prop];
-}
-catch(e){
-}
-try{
-node.removeAttribute(prop);
-}
-catch(e){
-}
-}
-this.clobber=function(_2e4){
-var na;
-var tna;
-if(_2e4){
-tna=_2e4.all||_2e4.getElementsByTagName("*");
-na=[_2e4];
-for(var x=0;x<tna.length;x++){
-if(tna[x]["__doClobber__"]){
-na.push(tna[x]);
-}
-}
-}else{
-try{
-window.onload=null;
-}
-catch(e){
-}
-na=(this.clobberNodes.length)?this.clobberNodes:document.all;
-}
-tna=null;
-var _2e8={};
-for(var i=na.length-1;i>=0;i=i-1){
-var el=na[i];
-if(el["__clobberAttrs__"]){
-for(var j=0;j<el.__clobberAttrs__.length;j++){
-nukeProp(el,el.__clobberAttrs__[j]);
-}
-nukeProp(el,"__clobberAttrs__");
-nukeProp(el,"__doClobber__");
-}
-}
-na=null;
-};
-};
-if(dojo.render.html.ie){
-dojo.addOnUnload(function(){
-dojo._ie_clobber.clobber();
-try{
-if((dojo["widget"])&&(dojo.widget["manager"])){
-dojo.widget.manager.destroyAll();
-}
-}
-catch(e){
-}
-try{
-window.onload=null;
-}
-catch(e){
-}
-try{
-window.onunload=null;
-}
-catch(e){
-}
-dojo._ie_clobber.clobberNodes=[];
-});
-}
-dojo.event.browser=new function(){
-var _2ec=0;
-this.clean=function(node){
-if(dojo.render.html.ie){
-dojo._ie_clobber.clobber(node);
-}
-};
-this.addClobberNode=function(node){
-if(!dojo.render.html.ie){
-return;
-}
-if(!node["__doClobber__"]){
-node.__doClobber__=true;
-dojo._ie_clobber.clobberNodes.push(node);
-node.__clobberAttrs__=[];
-}
-};
-this.addClobberNodeAttrs=function(node,_2f0){
-if(!dojo.render.html.ie){
-return;
-}
-this.addClobberNode(node);
-for(var x=0;x<_2f0.length;x++){
-node.__clobberAttrs__.push(_2f0[x]);
-}
-};
-this.removeListener=function(node,_2f3,fp,_2f5){
-if(!_2f5){
-var _2f5=false;
-}
-_2f3=_2f3.toLowerCase();
-if(_2f3.substr(0,2)=="on"){
-_2f3=_2f3.substr(2);
-}
-if(node.removeEventListener){
-node.removeEventListener(_2f3,fp,_2f5);
-}
-};
-this.addListener=function(node,_2f7,fp,_2f9,_2fa){
-if(!node){
-return;
-}
-if(!_2f9){
-var _2f9=false;
-}
-_2f7=_2f7.toLowerCase();
-if(_2f7.substr(0,2)!="on"){
-_2f7="on"+_2f7;
-}
-if(!_2fa){
-var _2fb=function(evt){
-if(!evt){
-evt=window.event;
-}
-var ret=fp(dojo.event.browser.fixEvent(evt,this));
-if(_2f9){
-dojo.event.browser.stopEvent(evt);
-}
-return ret;
-};
-}else{
-_2fb=fp;
-}
-if(node.addEventListener){
-node.addEventListener(_2f7.substr(2),_2fb,_2f9);
-return _2fb;
-}else{
-if(typeof node[_2f7]=="function"){
-var _2fe=node[_2f7];
-node[_2f7]=function(e){
-_2fe(e);
-return _2fb(e);
-};
-}else{
-node[_2f7]=_2fb;
-}
-if(dojo.render.html.ie){
-this.addClobberNodeAttrs(node,[_2f7]);
-}
-return _2fb;
-}
-};
-this.isEvent=function(obj){
-return (typeof obj!="undefined")&&(typeof Event!="undefined")&&(obj.eventPhase);
-};
-this.currentEvent=null;
-this.callListener=function(_301,_302){
-if(typeof _301!="function"){
-dojo.raise("listener not a function: "+_301);
-}
-dojo.event.browser.currentEvent.currentTarget=_302;
-return _301.call(_302,dojo.event.browser.currentEvent);
-};
-this.stopPropagation=function(){
-dojo.event.browser.currentEvent.cancelBubble=true;
-};
-this.preventDefault=function(){
-dojo.event.browser.currentEvent.returnValue=false;
-};
-this.keys={KEY_BACKSPACE:8,KEY_TAB:9,KEY_ENTER:13,KEY_SHIFT:16,KEY_CTRL:17,KEY_ALT:18,KEY_PAUSE:19,KEY_CAPS_LOCK:20,KEY_ESCAPE:27,KEY_SPACE:32,KEY_PAGE_UP:33,KEY_PAGE_DOWN:34,KEY_END:35,KEY_HOME:36,KEY_LEFT_ARROW:37,KEY_UP_ARROW:38,KEY_RIGHT_ARROW:39,KEY_DOWN_ARROW:40,KEY_INSERT:45,KEY_DELETE:46,KEY_LEFT_WINDOW:91,KEY_RIGHT_WINDOW:92,KEY_SELECT:93,KEY_F1:112,KEY_F2:113,KEY_F3:114,KEY_F4:115,KEY_F5:116,KEY_F6:117,KEY_F7:118,KEY_F8:119,KEY_F9:120,KEY_F10:121,KEY_F11:122,KEY_F12:123,KEY_NUM_LOCK:144,KEY_SCROLL_LOCK:145};
-this.revKeys=[];
-for(var key in this.keys){
-this.revKeys[this.keys[key]]=key;
-}
-this.fixEvent=function(evt,_305){
-if((!evt)&&(window["event"])){
-var evt=window.event;
-}
-if((evt["type"])&&(evt["type"].indexOf("key")==0)){
-evt.keys=this.revKeys;
-for(var key in this.keys){
-evt[key]=this.keys[key];
-}
-if((dojo.render.html.ie)&&(evt["type"]=="keypress")){
-evt.charCode=evt.keyCode;
-}
-}
-if(dojo.render.html.ie){
-if(!evt.target){
-evt.target=evt.srcElement;
-}
-if(!evt.currentTarget){
-evt.currentTarget=(_305?_305:evt.srcElement);
-}
-if(!evt.layerX){
-evt.layerX=evt.offsetX;
-}
-if(!evt.layerY){
-evt.layerY=evt.offsetY;
-}
-var _307=((dojo.render.html.ie55)||(document["compatMode"]=="BackCompat"))?document.body:document.documentElement;
-if(!evt.pageX){
-evt.pageX=evt.clientX+(_307.scrollLeft||0);
-}
-if(!evt.pageY){
-evt.pageY=evt.clientY+(_307.scrollTop||0);
-}
-if(evt.type=="mouseover"){
-evt.relatedTarget=evt.fromElement;
-}
-if(evt.type=="mouseout"){
-evt.relatedTarget=evt.toElement;
-}
-this.currentEvent=evt;
-evt.callListener=this.callListener;
-evt.stopPropagation=this.stopPropagation;
-evt.preventDefault=this.preventDefault;
-}
-return evt;
-};
-this.stopEvent=function(ev){
-if(window.event){
-ev.returnValue=false;
-ev.cancelBubble=true;
-}else{
-ev.preventDefault();
-ev.stopPropagation();
-}
-};
-};
-dojo.kwCompoundRequire({common:["dojo.event","dojo.event.topic"],browser:["dojo.event.browser"],dashboard:["dojo.event.browser"]});
-dojo.provide("dojo.event.*");
-dojo.provide("dojo.lfx.Animation");
-dojo.provide("dojo.lfx.Line");
-dojo.require("dojo.lang.func");
-dojo.lfx.Line=function(_309,end){
-this.start=_309;
-this.end=end;
-if(dojo.lang.isArray(_309)){
-var diff=[];
-dojo.lang.forEach(this.start,function(s,i){
-diff[i]=this.end[i]-s;
-},this);
-this.getValue=function(n){
-var res=[];
-dojo.lang.forEach(this.start,function(s,i){
-res[i]=(diff[i]*n)+s;
-},this);
-return res;
-};
-}else{
-var diff=end-_309;
-this.getValue=function(n){
-return (diff*n)+this.start;
-};
-}
-};
-dojo.lfx.easeIn=function(n){
-return Math.pow(n,3);
-};
-dojo.lfx.easeOut=function(n){
-return (1-Math.pow(1-n,3));
-};
-dojo.lfx.easeInOut=function(n){
-return ((3*Math.pow(n,2))-(2*Math.pow(n,3)));
-};
-dojo.lfx.IAnimation=function(){
-};
-dojo.lang.extend(dojo.lfx.IAnimation,{curve:null,duration:1000,easing:null,repeatCount:0,rate:25,handler:null,beforeBegin:null,onBegin:null,onAnimate:null,onEnd:null,onPlay:null,onPause:null,onStop:null,play:null,pause:null,stop:null,fire:function(evt,args){
-if(this[evt]){
-this[evt].apply(this,(args||[]));
-}
-},_active:false,_paused:false});
-dojo.lfx.Animation=function(_318,_319,_31a,_31b,_31c,rate){
-dojo.lfx.IAnimation.call(this);
-if(dojo.lang.isNumber(_318)||(!_318&&_319.getValue)){
-rate=_31c;
-_31c=_31b;
-_31b=_31a;
-_31a=_319;
-_319=_318;
-_318=null;
-}else{
-if(_318.getValue||dojo.lang.isArray(_318)){
-rate=_31b;
-_31c=_31a;
-_31b=_319;
-_31a=_318;
-_319=null;
-_318=null;
-}
-}
-if(dojo.lang.isArray(_31a)){
-this.curve=new dojo.lfx.Line(_31a[0],_31a[1]);
-}else{
-this.curve=_31a;
-}
-if(_319!=null&&_319>0){
-this.duration=_319;
-}
-if(_31c){
-this.repeatCount=_31c;
-}
-if(rate){
-this.rate=rate;
-}
-if(_318){
-this.handler=_318.handler;
-this.beforeBegin=_318.beforeBegin;
-this.onBegin=_318.onBegin;
-this.onEnd=_318.onEnd;
-this.onPlay=_318.onPlay;
-this.onPause=_318.onPause;
-this.onStop=_318.onStop;
-this.onAnimate=_318.onAnimate;
-}
-if(_31b&&dojo.lang.isFunction(_31b)){
-this.easing=_31b;
-}
-};
-dojo.inherits(dojo.lfx.Animation,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation,{_startTime:null,_endTime:null,_timer:null,_percent:0,_startRepeatCount:0,play:function(_31e,_31f){
-if(_31f){
-clearTimeout(this._timer);
-this._active=false;
-this._paused=false;
-this._percent=0;
-}else{
-if(this._active&&!this._paused){
-return this;
-}
-}
-this.fire("handler",["beforeBegin"]);
-this.fire("beforeBegin");
-if(_31e>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_31f);
-}),_31e);
-return this;
-}
-this._startTime=new Date().valueOf();
-if(this._paused){
-this._startTime-=(this.duration*this._percent/100);
-}
-this._endTime=this._startTime+this.duration;
-this._active=true;
-this._paused=false;
-var step=this._percent/100;
-var _321=this.curve.getValue(step);
-if(this._percent==0){
-if(!this._startRepeatCount){
-this._startRepeatCount=this.repeatCount;
-}
-this.fire("handler",["begin",_321]);
-this.fire("onBegin",[_321]);
-}
-this.fire("handler",["play",_321]);
-this.fire("onPlay",[_321]);
-this._cycle();
-return this;
-},pause:function(){
-clearTimeout(this._timer);
-if(!this._active){
-return this;
-}
-this._paused=true;
-var _322=this.curve.getValue(this._percent/100);
-this.fire("handler",["pause",_322]);
-this.fire("onPause",[_322]);
-return this;
-},gotoPercent:function(pct,_324){
-clearTimeout(this._timer);
-this._active=true;
-this._paused=true;
-this._percent=pct;
-if(_324){
-this.play();
-}
-},stop:function(_325){
-clearTimeout(this._timer);
-var step=this._percent/100;
-if(_325){
-step=1;
-}
-var _327=this.curve.getValue(step);
-this.fire("handler",["stop",_327]);
-this.fire("onStop",[_327]);
-this._active=false;
-this._paused=false;
-return this;
-},status:function(){
-if(this._active){
-return this._paused?"paused":"playing";
-}else{
-return "stopped";
-}
-},_cycle:function(){
-clearTimeout(this._timer);
-if(this._active){
-var curr=new Date().valueOf();
-var step=(curr-this._startTime)/(this._endTime-this._startTime);
-if(step>=1){
-step=1;
-this._percent=100;
-}else{
-this._percent=step*100;
-}
-if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-step=this.easing(step);
-}
-var _32a=this.curve.getValue(step);
-this.fire("handler",["animate",_32a]);
-this.fire("onAnimate",[_32a]);
-if(step<1){
-this._timer=setTimeout(dojo.lang.hitch(this,"_cycle"),this.rate);
-}else{
-this._active=false;
-this.fire("handler",["end"]);
-this.fire("onEnd");
-if(this.repeatCount>0){
-this.repeatCount--;
-this.play(null,true);
-}else{
-if(this.repeatCount==-1){
-this.play(null,true);
-}else{
-if(this._startRepeatCount){
-this.repeatCount=this._startRepeatCount;
-this._startRepeatCount=0;
-}
-}
-}
-}
-}
-return this;
-}});
-dojo.lfx.Combine=function(){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._animsEnded=0;
-var _32b=arguments;
-if(_32b.length==1&&(dojo.lang.isArray(_32b[0])||dojo.lang.isArrayLike(_32b[0]))){
-_32b=_32b[0];
-}
-var _32c=this;
-dojo.lang.forEach(_32b,function(anim){
-_32c._anims.push(anim);
-var _32e=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_32e();
-_32c._onAnimsEnded();
-};
-});
-};
-dojo.inherits(dojo.lfx.Combine,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine,{_animsEnded:0,play:function(_32f,_330){
-if(!this._anims.length){
-return this;
-}
-this.fire("beforeBegin");
-if(_32f>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_330);
-}),_32f);
-return this;
-}
-if(_330||this._anims[0].percent==0){
-this.fire("onBegin");
-}
-this.fire("onPlay");
-this._animsCall("play",null,_330);
-return this;
-},pause:function(){
-this.fire("onPause");
-this._animsCall("pause");
-return this;
-},stop:function(_331){
-this.fire("onStop");
-this._animsCall("stop",_331);
-return this;
-},_onAnimsEnded:function(){
-this._animsEnded++;
-if(this._animsEnded>=this._anims.length){
-this.fire("onEnd");
-}
-return this;
-},_animsCall:function(_332){
-var args=[];
-if(arguments.length>1){
-for(var i=1;i<arguments.length;i++){
-args.push(arguments[i]);
-}
-}
-var _335=this;
-dojo.lang.forEach(this._anims,function(anim){
-anim[_332](args);
-},_335);
-return this;
-}});
-dojo.lfx.Chain=function(){
-dojo.lfx.IAnimation.call(this);
-this._anims=[];
-this._currAnim=-1;
-var _337=arguments;
-if(_337.length==1&&(dojo.lang.isArray(_337[0])||dojo.lang.isArrayLike(_337[0]))){
-_337=_337[0];
-}
-var _338=this;
-dojo.lang.forEach(_337,function(anim,i,_33b){
-_338._anims.push(anim);
-var _33c=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-if(i<_33b.length-1){
-anim.onEnd=function(){
-_33c();
-_338._playNext();
-};
-}else{
-anim.onEnd=function(){
-_33c();
-_338.fire("onEnd");
-};
-}
-},_338);
-};
-dojo.inherits(dojo.lfx.Chain,dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain,{_currAnim:-1,play:function(_33d,_33e){
-if(!this._anims.length){
-return this;
-}
-if(_33e||!this._anims[this._currAnim]){
-this._currAnim=0;
-}
-var _33f=this._anims[this._currAnim];
-this.fire("beforeBegin");
-if(_33d>0){
-setTimeout(dojo.lang.hitch(this,function(){
-this.play(null,_33e);
-}),_33d);
-return this;
-}
-if(_33f){
-if(this._currAnim==0){
-this.fire("handler",["begin",this._currAnim]);
-this.fire("onBegin",[this._currAnim]);
-}
-this.fire("onPlay",[this._currAnim]);
-_33f.play(null,_33e);
-}
-return this;
-},pause:function(){
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].pause();
-this.fire("onPause",[this._currAnim]);
-}
-return this;
-},playPause:function(){
-if(this._anims.length==0){
-return this;
-}
-if(this._currAnim==-1){
-this._currAnim=0;
-}
-var _340=this._anims[this._currAnim];
-if(_340){
-if(!_340._active||_340._paused){
-this.play();
-}else{
-this.pause();
-}
-}
-return this;
-},stop:function(){
-var _341=this._anims[this._currAnim];
-if(_341){
-_341.stop();
-this.fire("onStop",[this._currAnim]);
-}
-return _341;
-},_playNext:function(){
-if(this._currAnim==-1||this._anims.length==0){
-return this;
-}
-this._currAnim++;
-if(this._anims[this._currAnim]){
-this._anims[this._currAnim].play(null,true);
-}
-return this;
-}});
-dojo.lfx.combine=function(){
-var _342=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_342=arguments[0];
-}
-return new dojo.lfx.Combine(_342);
-};
-dojo.lfx.chain=function(){
-var _343=arguments;
-if(dojo.lang.isArray(arguments[0])){
-_343=arguments[0];
-}
-return new dojo.lfx.Chain(_343);
-};
-dojo.provide("dojo.graphics.color");
-dojo.require("dojo.lang.array");
-dojo.graphics.color.Color=function(r,g,b,a){
-if(dojo.lang.isArray(r)){
-this.r=r[0];
-this.g=r[1];
-this.b=r[2];
-this.a=r[3]||1;
-}else{
-if(dojo.lang.isString(r)){
-var rgb=dojo.graphics.color.extractRGB(r);
-this.r=rgb[0];
-this.g=rgb[1];
-this.b=rgb[2];
-this.a=g||1;
-}else{
-if(r instanceof dojo.graphics.color.Color){
-this.r=r.r;
-this.b=r.b;
-this.g=r.g;
-this.a=r.a;
-}else{
-this.r=r;
-this.g=g;
-this.b=b;
-this.a=a;
-}
-}
-}
-};
-dojo.graphics.color.Color.fromArray=function(arr){
-return new dojo.graphics.color.Color(arr[0],arr[1],arr[2],arr[3]);
-};
-dojo.lang.extend(dojo.graphics.color.Color,{toRgb:function(_34a){
-if(_34a){
-return this.toRgba();
-}else{
-return [this.r,this.g,this.b];
-}
-},toRgba:function(){
-return [this.r,this.g,this.b,this.a];
-},toHex:function(){
-return dojo.graphics.color.rgb2hex(this.toRgb());
-},toCss:function(){
-return "rgb("+this.toRgb().join()+")";
-},toString:function(){
-return this.toHex();
-},blend:function(_34b,_34c){
-return dojo.graphics.color.blend(this.toRgb(),new dojo.graphics.color.Color(_34b).toRgb(),_34c);
-}});
-dojo.graphics.color.named={white:[255,255,255],black:[0,0,0],red:[255,0,0],green:[0,255,0],blue:[0,0,255],navy:[0,0,128],gray:[128,128,128],silver:[192,192,192]};
-dojo.graphics.color.blend=function(a,b,_34f){
-if(typeof a=="string"){
-return dojo.graphics.color.blendHex(a,b,_34f);
-}
-if(!_34f){
-_34f=0;
-}else{
-if(_34f>1){
-_34f=1;
-}else{
-if(_34f<-1){
-_34f=-1;
-}
-}
-}
-var c=new Array(3);
-for(var i=0;i<3;i++){
-var half=Math.abs(a[i]-b[i])/2;
-c[i]=Math.floor(Math.min(a[i],b[i])+half+(half*_34f));
-}
-return c;
-};
-dojo.graphics.color.blendHex=function(a,b,_355){
-return dojo.graphics.color.rgb2hex(dojo.graphics.color.blend(dojo.graphics.color.hex2rgb(a),dojo.graphics.color.hex2rgb(b),_355));
-};
-dojo.graphics.color.extractRGB=function(_356){
-var hex="0123456789abcdef";
-_356=_356.toLowerCase();
-if(_356.indexOf("rgb")==0){
-var _358=_356.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-var ret=_358.splice(1,3);
-return ret;
-}else{
-var _35a=dojo.graphics.color.hex2rgb(_356);
-if(_35a){
-return _35a;
-}else{
-return dojo.graphics.color.named[_356]||[255,255,255];
-}
-}
-};
-dojo.graphics.color.hex2rgb=function(hex){
-var _35c="0123456789ABCDEF";
-var rgb=new Array(3);
-if(hex.indexOf("#")==0){
-hex=hex.substring(1);
-}
-hex=hex.toUpperCase();
-if(hex.replace(new RegExp("["+_35c+"]","g"),"")!=""){
-return null;
-}
-if(hex.length==3){
-rgb[0]=hex.charAt(0)+hex.charAt(0);
-rgb[1]=hex.charAt(1)+hex.charAt(1);
-rgb[2]=hex.charAt(2)+hex.charAt(2);
-}else{
-rgb[0]=hex.substring(0,2);
-rgb[1]=hex.substring(2,4);
-rgb[2]=hex.substring(4);
-}
-for(var i=0;i<rgb.length;i++){
-rgb[i]=_35c.indexOf(rgb[i].charAt(0))*16+_35c.indexOf(rgb[i].charAt(1));
-}
-return rgb;
-};
-dojo.graphics.color.rgb2hex=function(r,g,b){
-if(dojo.lang.isArray(r)){
-g=r[1]||0;
-b=r[2]||0;
-r=r[0]||0;
-}
-var ret=dojo.lang.map([r,g,b],function(x){
-x=new Number(x);
-var s=x.toString(16);
-while(s.length<2){
-s="0"+s;
-}
-return s;
-});
-ret.unshift("#");
-return ret.join("");
-};
-dojo.provide("dojo.uri.Uri");
-dojo.uri=new function(){
-this.joinPath=function(){
-var arr=[];
-for(var i=0;i<arguments.length;i++){
-arr.push(arguments[i]);
-}
-return arr.join("/").replace(/\/{2,}/g,"/").replace(/((https*|ftps*):)/i,"$1/");
-};
-this.dojoUri=function(uri){
-return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(),uri);
-};
-this.Uri=function(){
-var uri=arguments[0];
-for(var i=1;i<arguments.length;i++){
-if(!arguments[i]){
-continue;
-}
-var _36a=new dojo.uri.Uri(arguments[i].toString());
-var _36b=new dojo.uri.Uri(uri.toString());
-if(_36a.path==""&&_36a.scheme==null&&_36a.authority==null&&_36a.query==null){
-if(_36a.fragment!=null){
-_36b.fragment=_36a.fragment;
-}
-_36a=_36b;
-}else{
-if(_36a.scheme==null){
-_36a.scheme=_36b.scheme;
-if(_36a.authority==null){
-_36a.authority=_36b.authority;
-if(_36a.path.charAt(0)!="/"){
-var path=_36b.path.substring(0,_36b.path.lastIndexOf("/")+1)+_36a.path;
-var segs=path.split("/");
-for(var j=0;j<segs.length;j++){
-if(segs[j]=="."){
-if(j==segs.length-1){
-segs[j]="";
-}else{
-segs.splice(j,1);
-j--;
-}
-}else{
-if(j>0&&!(j==1&&segs[0]=="")&&segs[j]==".."&&segs[j-1]!=".."){
-if(j==segs.length-1){
-segs.splice(j,1);
-segs[j-1]="";
-}else{
-segs.splice(j-1,2);
-j-=2;
-}
-}
-}
-}
-_36a.path=segs.join("/");
-}
-}
-}
-}
-uri="";
-if(_36a.scheme!=null){
-uri+=_36a.scheme+":";
-}
-if(_36a.authority!=null){
-uri+="//"+_36a.authority;
-}
-uri+=_36a.path;
-if(_36a.query!=null){
-uri+="?"+_36a.query;
-}
-if(_36a.fragment!=null){
-uri+="#"+_36a.fragment;
-}
-}
-this.uri=uri.toString();
-var _36f="^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-var r=this.uri.match(new RegExp(_36f));
-this.scheme=r[2]||(r[1]?"":null);
-this.authority=r[4]||(r[3]?"":null);
-this.path=r[5];
-this.query=r[7]||(r[6]?"":null);
-this.fragment=r[9]||(r[8]?"":null);
-if(this.authority!=null){
-_36f="^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-r=this.authority.match(new RegExp(_36f));
-this.user=r[3]||null;
-this.password=r[4]||null;
-this.host=r[5];
-this.port=r[7]||null;
-}
-this.toString=function(){
-return this.uri;
-};
-};
-};
-dojo.provide("dojo.style");
-dojo.require("dojo.graphics.color");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.lang.common");
-(function(){
-var h=dojo.render.html;
-var ds=dojo.style;
-var db=document["body"]||document["documentElement"];
-ds.boxSizing={MARGIN_BOX:"margin-box",BORDER_BOX:"border-box",PADDING_BOX:"padding-box",CONTENT_BOX:"content-box"};
-var bs=ds.boxSizing;
-ds.getBoxSizing=function(node){
-if((h.ie)||(h.opera)){
-var cm=document["compatMode"];
-if((cm=="BackCompat")||(cm=="QuirksMode")){
-return bs.BORDER_BOX;
-}else{
-return bs.CONTENT_BOX;
-}
-}else{
-if(arguments.length==0){
-node=document.documentElement;
-}
-var _377=ds.getStyle(node,"-moz-box-sizing");
-if(!_377){
-_377=ds.getStyle(node,"box-sizing");
-}
-return (_377?_377:bs.CONTENT_BOX);
-}
-};
-ds.isBorderBox=function(node){
-return (ds.getBoxSizing(node)==bs.BORDER_BOX);
-};
-ds.getUnitValue=function(node,_37a,_37b){
-var s=ds.getComputedStyle(node,_37a);
-if((!s)||((s=="auto")&&(_37b))){
-return {value:0,units:"px"};
-}
-if(dojo.lang.isUndefined(s)){
-return ds.getUnitValue.bad;
-}
-var _37d=s.match(/(\-?[\d.]+)([a-z%]*)/i);
-if(!_37d){
-return ds.getUnitValue.bad;
-}
-return {value:Number(_37d[1]),units:_37d[2].toLowerCase()};
-};
-ds.getUnitValue.bad={value:NaN,units:""};
-ds.getPixelValue=function(node,_37f,_380){
-var _381=ds.getUnitValue(node,_37f,_380);
-if(isNaN(_381.value)){
-return 0;
-}
-if((_381.value)&&(_381.units!="px")){
-return NaN;
-}
-return _381.value;
-};
-ds.getNumericStyle=function(){
-dojo.deprecated("dojo.(style|html).getNumericStyle","in favor of dojo.(style|html).getPixelValue","0.4");
-return ds.getPixelValue.apply(this,arguments);
-};
-ds.setPositivePixelValue=function(node,_383,_384){
-if(isNaN(_384)){
-return false;
-}
-node.style[_383]=Math.max(0,_384)+"px";
-return true;
-};
-ds._sumPixelValues=function(node,_386,_387){
-var _388=0;
-for(var x=0;x<_386.length;x++){
-_388+=ds.getPixelValue(node,_386[x],_387);
-}
-return _388;
-};
-ds.isPositionAbsolute=function(node){
-return (ds.getComputedStyle(node,"position")=="absolute");
-};
-ds.getBorderExtent=function(node,side){
-return (ds.getStyle(node,"border-"+side+"-style")=="none"?0:ds.getPixelValue(node,"border-"+side+"-width"));
-};
-ds.getMarginWidth=function(node){
-return ds._sumPixelValues(node,["margin-left","margin-right"],ds.isPositionAbsolute(node));
-};
-ds.getBorderWidth=function(node){
-return ds.getBorderExtent(node,"left")+ds.getBorderExtent(node,"right");
-};
-ds.getPaddingWidth=function(node){
-return ds._sumPixelValues(node,["padding-left","padding-right"],true);
-};
-ds.getPadBorderWidth=function(node){
-return ds.getPaddingWidth(node)+ds.getBorderWidth(node);
-};
-ds.getContentBoxWidth=function(node){
-node=dojo.byId(node);
-return node.offsetWidth-ds.getPadBorderWidth(node);
-};
-ds.getBorderBoxWidth=function(node){
-node=dojo.byId(node);
-return node.offsetWidth;
-};
-ds.getMarginBoxWidth=function(node){
-return ds.getInnerWidth(node)+ds.getMarginWidth(node);
-};
-ds.setContentBoxWidth=function(node,_395){
-node=dojo.byId(node);
-if(ds.isBorderBox(node)){
-_395+=ds.getPadBorderWidth(node);
-}
-return ds.setPositivePixelValue(node,"width",_395);
-};
-ds.setMarginBoxWidth=function(node,_397){
-node=dojo.byId(node);
-if(!ds.isBorderBox(node)){
-_397-=ds.getPadBorderWidth(node);
-}
-_397-=ds.getMarginWidth(node);
-return ds.setPositivePixelValue(node,"width",_397);
-};
-ds.getContentWidth=ds.getContentBoxWidth;
-ds.getInnerWidth=ds.getBorderBoxWidth;
-ds.getOuterWidth=ds.getMarginBoxWidth;
-ds.setContentWidth=ds.setContentBoxWidth;
-ds.setOuterWidth=ds.setMarginBoxWidth;
-ds.getMarginHeight=function(node){
-return ds._sumPixelValues(node,["margin-top","margin-bottom"],ds.isPositionAbsolute(node));
-};
-ds.getBorderHeight=function(node){
-return ds.getBorderExtent(node,"top")+ds.getBorderExtent(node,"bottom");
-};
-ds.getPaddingHeight=function(node){
-return ds._sumPixelValues(node,["padding-top","padding-bottom"],true);
-};
-ds.getPadBorderHeight=function(node){
-return ds.getPaddingHeight(node)+ds.getBorderHeight(node);
-};
-ds.getContentBoxHeight=function(node){
-node=dojo.byId(node);
-return node.offsetHeight-ds.getPadBorderHeight(node);
-};
-ds.getBorderBoxHeight=function(node){
-node=dojo.byId(node);
-return node.offsetHeight;
-};
-ds.getMarginBoxHeight=function(node){
-return ds.getInnerHeight(node)+ds.getMarginHeight(node);
-};
-ds.setContentBoxHeight=function(node,_3a0){
-node=dojo.byId(node);
-if(ds.isBorderBox(node)){
-_3a0+=ds.getPadBorderHeight(node);
-}
-return ds.setPositivePixelValue(node,"height",_3a0);
-};
-ds.setMarginBoxHeight=function(node,_3a2){
-node=dojo.byId(node);
-if(!ds.isBorderBox(node)){
-_3a2-=ds.getPadBorderHeight(node);
-}
-_3a2-=ds.getMarginHeight(node);
-return ds.setPositivePixelValue(node,"height",_3a2);
-};
-ds.getContentHeight=ds.getContentBoxHeight;
-ds.getInnerHeight=ds.getBorderBoxHeight;
-ds.getOuterHeight=ds.getMarginBoxHeight;
-ds.setContentHeight=ds.setContentBoxHeight;
-ds.setOuterHeight=ds.setMarginBoxHeight;
-ds.getAbsolutePosition=ds.abs=function(node,_3a4){
-node=dojo.byId(node);
-var ret=[];
-ret.x=ret.y=0;
-var st=dojo.html.getScrollTop();
-var sl=dojo.html.getScrollLeft();
-if(h.ie){
-with(node.getBoundingClientRect()){
-ret.x=left-2;
-ret.y=top-2;
-}
-}else{
-if(document.getBoxObjectFor){
-var bo=document.getBoxObjectFor(node);
-ret.x=bo.x-ds.sumAncestorProperties(node,"scrollLeft");
-ret.y=bo.y-ds.sumAncestorProperties(node,"scrollTop");
-}else{
-if(node["offsetParent"]){
-var _3a9;
-if((h.safari)&&(node.style.getPropertyValue("position")=="absolute")&&(node.parentNode==db)){
-_3a9=db;
-}else{
-_3a9=db.parentNode;
-}
-if(node.parentNode!=db){
-var nd=node;
-if(window.opera){
-nd=db;
-}
-ret.x-=ds.sumAncestorProperties(nd,"scrollLeft");
-ret.y-=ds.sumAncestorProperties(nd,"scrollTop");
-}
-do{
-var n=node["offsetLeft"];
-ret.x+=isNaN(n)?0:n;
-var m=node["offsetTop"];
-ret.y+=isNaN(m)?0:m;
-node=node.offsetParent;
-}while((node!=_3a9)&&(node!=null));
-}else{
-if(node["x"]&&node["y"]){
-ret.x+=isNaN(node.x)?0:node.x;
-ret.y+=isNaN(node.y)?0:node.y;
-}
-}
-}
-}
-if(_3a4){
-ret.y+=st;
-ret.x+=sl;
-}
-ret[0]=ret.x;
-ret[1]=ret.y;
-return ret;
-};
-ds.sumAncestorProperties=function(node,prop){
-node=dojo.byId(node);
-if(!node){
-return 0;
-}
-var _3af=0;
-while(node){
-var val=node[prop];
-if(val){
-_3af+=val-0;
-if(node==document.body){
-break;
-}
-}
-node=node.parentNode;
-}
-return _3af;
-};
-ds.getTotalOffset=function(node,type,_3b3){
-return ds.abs(node,_3b3)[(type=="top")?"y":"x"];
-};
-ds.getAbsoluteX=ds.totalOffsetLeft=function(node,_3b5){
-return ds.getTotalOffset(node,"left",_3b5);
-};
-ds.getAbsoluteY=ds.totalOffsetTop=function(node,_3b7){
-return ds.getTotalOffset(node,"top",_3b7);
-};
-ds.styleSheet=null;
-ds.insertCssRule=function(_3b8,_3b9,_3ba){
-if(!ds.styleSheet){
-if(document.createStyleSheet){
-ds.styleSheet=document.createStyleSheet();
-}else{
-if(document.styleSheets[0]){
-ds.styleSheet=document.styleSheets[0];
-}else{
-return null;
-}
-}
-}
-if(arguments.length<3){
-if(ds.styleSheet.cssRules){
-_3ba=ds.styleSheet.cssRules.length;
-}else{
-if(ds.styleSheet.rules){
-_3ba=ds.styleSheet.rules.length;
-}else{
-return null;
-}
-}
-}
-if(ds.styleSheet.insertRule){
-var rule=_3b8+" { "+_3b9+" }";
-return ds.styleSheet.insertRule(rule,_3ba);
-}else{
-if(ds.styleSheet.addRule){
-return ds.styleSheet.addRule(_3b8,_3b9,_3ba);
-}else{
-return null;
-}
-}
-};
-ds.removeCssRule=function(_3bc){
-if(!ds.styleSheet){
-dojo.debug("no stylesheet defined for removing rules");
-return false;
-}
-if(h.ie){
-if(!_3bc){
-_3bc=ds.styleSheet.rules.length;
-ds.styleSheet.removeRule(_3bc);
-}
-}else{
-if(document.styleSheets[0]){
-if(!_3bc){
-_3bc=ds.styleSheet.cssRules.length;
-}
-ds.styleSheet.deleteRule(_3bc);
-}
-}
-return true;
-};
-ds.insertCssFile=function(URI,doc,_3bf){
-if(!URI){
-return;
-}
-if(!doc){
-doc=document;
-}
-var _3c0=dojo.hostenv.getText(URI);
-_3c0=ds.fixPathsInCssText(_3c0,URI);
-if(_3bf){
-var _3c1=doc.getElementsByTagName("style");
-var _3c2="";
-for(var i=0;i<_3c1.length;i++){
-_3c2=(_3c1[i].styleSheet&&_3c1[i].styleSheet.cssText)?_3c1[i].styleSheet.cssText:_3c1[i].innerHTML;
-if(_3c0==_3c2){
-return;
-}
-}
-}
-var _3c4=ds.insertCssText(_3c0);
-if(_3c4&&djConfig.isDebug){
-_3c4.setAttribute("dbgHref",URI);
-}
-return _3c4;
-};
-ds.insertCssText=function(_3c5,doc,URI){
-if(!_3c5){
-return;
-}
-if(!doc){
-doc=document;
-}
-if(URI){
-_3c5=ds.fixPathsInCssText(_3c5,URI);
-}
-var _3c8=doc.createElement("style");
-_3c8.setAttribute("type","text/css");
-var head=doc.getElementsByTagName("head")[0];
-if(!head){
-dojo.debug("No head tag in document, aborting styles");
-return;
-}else{
-head.appendChild(_3c8);
-}
-if(_3c8.styleSheet){
-_3c8.styleSheet.cssText=_3c5;
-}else{
-var _3ca=doc.createTextNode(_3c5);
-_3c8.appendChild(_3ca);
-}
-return _3c8;
-};
-ds.fixPathsInCssText=function(_3cb,URI){
-if(!_3cb||!URI){
-return;
-}
-var pos=0;
-var str="";
-var url="";
-while(pos!=-1){
-pos=0;
-url="";
-pos=_3cb.indexOf("url(",pos);
-if(pos<0){
-break;
-}
-str+=_3cb.slice(0,pos+4);
-_3cb=_3cb.substring(pos+4,_3cb.length);
-url+=_3cb.match(/^[\t\s\w()\/.\\'"-:#=&?]*\)/)[0];
-_3cb=_3cb.substring(url.length-1,_3cb.length);
-url=url.replace(/^[\s\t]*(['"]?)([\w()\/.\\'"-:#=&?]*)\1[\s\t]*?\)/,"$2");
-if(url.search(/(file|https?|ftps?):\/\//)==-1){
-url=(new dojo.uri.Uri(URI,url).toString());
-}
-str+=url;
-}
-return str+_3cb;
-};
-ds.getBackgroundColor=function(node){
-node=dojo.byId(node);
-var _3d1;
-do{
-_3d1=ds.getStyle(node,"background-color");
-if(_3d1.toLowerCase()=="rgba(0, 0, 0, 0)"){
-_3d1="transparent";
-}
-if(node==document.getElementsByTagName("body")[0]){
-node=null;
-break;
-}
-node=node.parentNode;
-}while(node&&dojo.lang.inArray(_3d1,["transparent",""]));
-if(_3d1=="transparent"){
-_3d1=[255,255,255,0];
-}else{
-_3d1=dojo.graphics.color.extractRGB(_3d1);
-}
-return _3d1;
-};
-ds.getComputedStyle=function(node,_3d3,_3d4){
-node=dojo.byId(node);
-var _3d3=ds.toSelectorCase(_3d3);
-var _3d5=ds.toCamelCase(_3d3);
-if(!node||!node.style){
-return _3d4;
-}else{
-if(document.defaultView){
-try{
-var cs=document.defaultView.getComputedStyle(node,"");
-if(cs){
-return cs.getPropertyValue(_3d3);
-}
-}
-catch(e){
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_3d3);
-}else{
-return _3d4;
-}
-}
-}else{
-if(node.currentStyle){
-return node.currentStyle[_3d5];
-}
-}
-}
-if(node.style.getPropertyValue){
-return node.style.getPropertyValue(_3d3);
-}else{
-return _3d4;
-}
-};
-ds.getStyleProperty=function(node,_3d8){
-node=dojo.byId(node);
-return (node&&node.style?node.style[ds.toCamelCase(_3d8)]:undefined);
-};
-ds.getStyle=function(node,_3da){
-var _3db=ds.getStyleProperty(node,_3da);
-return (_3db?_3db:ds.getComputedStyle(node,_3da));
-};
-ds.setStyle=function(node,_3dd,_3de){
-node=dojo.byId(node);
-if(node&&node.style){
-var _3df=ds.toCamelCase(_3dd);
-node.style[_3df]=_3de;
-}
-};
-ds.toCamelCase=function(_3e0){
-var arr=_3e0.split("-"),cc=arr[0];
-for(var i=1;i<arr.length;i++){
-cc+=arr[i].charAt(0).toUpperCase()+arr[i].substring(1);
-}
-return cc;
-};
-ds.toSelectorCase=function(_3e3){
-return _3e3.replace(/([A-Z])/g,"-$1").toLowerCase();
-};
-ds.setOpacity=function setOpacity(node,_3e5,_3e6){
-node=dojo.byId(node);
-if(!_3e6){
-if(_3e5>=1){
-if(h.ie){
-ds.clearOpacity(node);
-return;
-}else{
-_3e5=0.999999;
-}
-}else{
-if(_3e5<0){
-_3e5=0;
-}
-}
-}
-if(h.ie){
-if(node.nodeName.toLowerCase()=="tr"){
-var tds=node.getElementsByTagName("td");
-for(var x=0;x<tds.length;x++){
-tds[x].style.filter="Alpha(Opacity="+_3e5*100+")";
-}
-}
-node.style.filter="Alpha(Opacity="+_3e5*100+")";
-}else{
-if(h.moz){
-node.style.opacity=_3e5;
-node.style.MozOpacity=_3e5;
-}else{
-if(h.safari){
-node.style.opacity=_3e5;
-node.style.KhtmlOpacity=_3e5;
-}else{
-node.style.opacity=_3e5;
-}
-}
-}
-};
-ds.getOpacity=function getOpacity(node){
-node=dojo.byId(node);
-if(h.ie){
-var opac=(node.filters&&node.filters.alpha&&typeof node.filters.alpha.opacity=="number"?node.filters.alpha.opacity:100)/100;
-}else{
-var opac=node.style.opacity||node.style.MozOpacity||node.style.KhtmlOpacity||1;
-}
-return opac>=0.999999?1:Number(opac);
-};
-ds.clearOpacity=function clearOpacity(node){
-node=dojo.byId(node);
-var ns=node.style;
-if(h.ie){
-try{
-if(node.filters&&node.filters.alpha){
-ns.filter="";
-}
-}
-catch(e){
-}
-}else{
-if(h.moz){
-ns.opacity=1;
-ns.MozOpacity=1;
-}else{
-if(h.safari){
-ns.opacity=1;
-ns.KhtmlOpacity=1;
-}else{
-ns.opacity=1;
-}
-}
-}
-};
-ds.setStyleAttributes=function(node,_3ee){
-var _3ef={"opacity":dojo.style.setOpacity,"content-height":dojo.style.setContentHeight,"content-width":dojo.style.setContentWidth,"outer-height":dojo.style.setOuterHeight,"outer-width":dojo.style.setOuterWidth};
-var _3f0=_3ee.replace(/(;)?\s*$/,"").split(";");
-for(var i=0;i<_3f0.length;i++){
-var _3f2=_3f0[i].split(":");
-var name=_3f2[0].replace(/\s*$/,"").replace(/^\s*/,"").toLowerCase();
-var _3f4=_3f2[1].replace(/\s*$/,"").replace(/^\s*/,"");
-if(dojo.lang.has(_3ef,name)){
-_3ef[name](node,_3f4);
-}else{
-node.style[dojo.style.toCamelCase(name)]=_3f4;
-}
-}
-};
-ds._toggle=function(node,_3f6,_3f7){
-node=dojo.byId(node);
-_3f7(node,!_3f6(node));
-return _3f6(node);
-};
-ds.show=function(node){
-node=dojo.byId(node);
-if(ds.getStyleProperty(node,"display")=="none"){
-ds.setStyle(node,"display",(node.dojoDisplayCache||""));
-node.dojoDisplayCache=undefined;
-}
-};
-ds.hide=function(node){
-node=dojo.byId(node);
-if(typeof node["dojoDisplayCache"]=="undefined"){
-var d=ds.getStyleProperty(node,"display");
-if(d!="none"){
-node.dojoDisplayCache=d;
-}
-}
-ds.setStyle(node,"display","none");
-};
-ds.setShowing=function(node,_3fc){
-ds[(_3fc?"show":"hide")](node);
-};
-ds.isShowing=function(node){
-return (ds.getStyleProperty(node,"display")!="none");
-};
-ds.toggleShowing=function(node){
-return ds._toggle(node,ds.isShowing,ds.setShowing);
-};
-ds.displayMap={tr:"",td:"",th:"",img:"inline",span:"inline",input:"inline",button:"inline"};
-ds.suggestDisplayByTagName=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-var tag=node.tagName.toLowerCase();
-return (tag in ds.displayMap?ds.displayMap[tag]:"block");
-}
-};
-ds.setDisplay=function(node,_402){
-ds.setStyle(node,"display",(dojo.lang.isString(_402)?_402:(_402?ds.suggestDisplayByTagName(node):"none")));
-};
-ds.isDisplayed=function(node){
-return (ds.getComputedStyle(node,"display")!="none");
-};
-ds.toggleDisplay=function(node){
-return ds._toggle(node,ds.isDisplayed,ds.setDisplay);
-};
-ds.setVisibility=function(node,_406){
-ds.setStyle(node,"visibility",(dojo.lang.isString(_406)?_406:(_406?"visible":"hidden")));
-};
-ds.isVisible=function(node){
-return (ds.getComputedStyle(node,"visibility")!="hidden");
-};
-ds.toggleVisibility=function(node){
-return ds._toggle(node,ds.isVisible,ds.setVisibility);
-};
-ds.toCoordinateArray=function(_409,_40a){
-if(dojo.lang.isArray(_409)){
-while(_409.length<4){
-_409.push(0);
-}
-while(_409.length>4){
-_409.pop();
-}
-var ret=_409;
-}else{
-var node=dojo.byId(_409);
-var pos=ds.getAbsolutePosition(node,_40a);
-var ret=[pos.x,pos.y,ds.getBorderBoxWidth(node),ds.getBorderBoxHeight(node)];
-}
-ret.x=ret[0];
-ret.y=ret[1];
-ret.w=ret[2];
-ret.h=ret[3];
-return ret;
-};
-})();
-dojo.provide("dojo.html");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.dom");
-dojo.require("dojo.style");
-dojo.require("dojo.string");
-dojo.lang.mixin(dojo.html,dojo.dom);
-dojo.lang.mixin(dojo.html,dojo.style);
-dojo.html.clearSelection=function(){
-try{
-if(window["getSelection"]){
-if(dojo.render.html.safari){
-window.getSelection().collapse();
-}else{
-window.getSelection().removeAllRanges();
-}
-}else{
-if(document.selection){
-if(document.selection.empty){
-document.selection.empty();
-}else{
-if(document.selection.clear){
-document.selection.clear();
-}
-}
-}
-}
-return true;
-}
-catch(e){
-dojo.debug(e);
-return false;
-}
-};
-dojo.html.disableSelection=function(_40e){
-_40e=dojo.byId(_40e)||document.body;
-var h=dojo.render.html;
-if(h.mozilla){
-_40e.style.MozUserSelect="none";
-}else{
-if(h.safari){
-_40e.style.KhtmlUserSelect="none";
-}else{
-if(h.ie){
-_40e.unselectable="on";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.enableSelection=function(_410){
-_410=dojo.byId(_410)||document.body;
-var h=dojo.render.html;
-if(h.mozilla){
-_410.style.MozUserSelect="";
-}else{
-if(h.safari){
-_410.style.KhtmlUserSelect="";
-}else{
-if(h.ie){
-_410.unselectable="off";
-}else{
-return false;
-}
-}
-}
-return true;
-};
-dojo.html.selectElement=function(_412){
-_412=dojo.byId(_412);
-if(document.selection&&document.body.createTextRange){
-var _413=document.body.createTextRange();
-_413.moveToElementText(_412);
-_413.select();
-}else{
-if(window["getSelection"]){
-var _414=window.getSelection();
-if(_414["selectAllChildren"]){
-_414.selectAllChildren(_412);
-}
-}
-}
-};
-dojo.html.selectInputText=function(_415){
-_415=dojo.byId(_415);
-if(document.selection&&document.body.createTextRange){
-var _416=_415.createTextRange();
-_416.moveStart("character",0);
-_416.moveEnd("character",_415.value.length);
-_416.select();
-}else{
-if(window["getSelection"]){
-var _417=window.getSelection();
-_415.setSelectionRange(0,_415.value.length);
-}
-}
-_415.focus();
-};
-dojo.html.isSelectionCollapsed=function(){
-if(document["selection"]){
-return document.selection.createRange().text=="";
-}else{
-if(window["getSelection"]){
-var _418=window.getSelection();
-if(dojo.lang.isString(_418)){
-return _418=="";
-}else{
-return _418.isCollapsed;
-}
-}
-}
-};
-dojo.html.getEventTarget=function(evt){
-if(!evt){
-evt=window.event||{};
-}
-var t=(evt.srcElement?evt.srcElement:(evt.target?evt.target:null));
-while((t)&&(t.nodeType!=1)){
-t=t.parentNode;
-}
-return t;
-};
-dojo.html.getDocumentWidth=function(){
-dojo.deprecated("dojo.html.getDocument*","replaced by dojo.html.getViewport*","0.4");
-return dojo.html.getViewportWidth();
-};
-dojo.html.getDocumentHeight=function(){
-dojo.deprecated("dojo.html.getDocument*","replaced by dojo.html.getViewport*","0.4");
-return dojo.html.getViewportHeight();
-};
-dojo.html.getDocumentSize=function(){
-dojo.deprecated("dojo.html.getDocument*","replaced of dojo.html.getViewport*","0.4");
-return dojo.html.getViewportSize();
-};
-dojo.html.getViewportWidth=function(){
-var w=0;
-if(window.innerWidth){
-w=window.innerWidth;
-}
-if(dojo.exists(document,"documentElement.clientWidth")){
-var w2=document.documentElement.clientWidth;
-if(!w||w2&&w2<w){
-w=w2;
-}
-return w;
-}
-if(document.body){
-return document.body.clientWidth;
-}
-return 0;
-};
-dojo.html.getViewportHeight=function(){
-if(window.innerHeight){
-return window.innerHeight;
-}
-if(dojo.exists(document,"documentElement.clientHeight")){
-return document.documentElement.clientHeight;
-}
-if(document.body){
-return document.body.clientHeight;
-}
-return 0;
-};
-dojo.html.getViewportSize=function(){
-var ret=[dojo.html.getViewportWidth(),dojo.html.getViewportHeight()];
-ret.w=ret[0];
-ret.h=ret[1];
-return ret;
-};
-dojo.html.getScrollTop=function(){
-return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;
-};
-dojo.html.getScrollLeft=function(){
-return window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;
-};
-dojo.html.getScrollOffset=function(){
-var off=[dojo.html.getScrollLeft(),dojo.html.getScrollTop()];
-off.x=off[0];
-off.y=off[1];
-return off;
-};
-dojo.html.getParentOfType=function(node,type){
-dojo.deprecated("dojo.html.getParentOfType","replaced by dojo.html.getParentByType*","0.4");
-return dojo.html.getParentByType(node,type);
-};
-dojo.html.getParentByType=function(node,type){
-var _423=dojo.byId(node);
-type=type.toLowerCase();
-while((_423)&&(_423.nodeName.toLowerCase()!=type)){
-if(_423==(document["body"]||document["documentElement"])){
-return null;
-}
-_423=_423.parentNode;
-}
-return _423;
-};
-dojo.html.getAttribute=function(node,attr){
-node=dojo.byId(node);
-if((!node)||(!node.getAttribute)){
-return null;
-}
-var ta=typeof attr=="string"?attr:new String(attr);
-var v=node.getAttribute(ta.toUpperCase());
-if((v)&&(typeof v=="string")&&(v!="")){
-return v;
-}
-if(v&&v.value){
-return v.value;
-}
-if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-return (node.getAttributeNode(ta)).value;
-}else{
-if(node.getAttribute(ta)){
-return node.getAttribute(ta);
-}else{
-if(node.getAttribute(ta.toLowerCase())){
-return node.getAttribute(ta.toLowerCase());
-}
-}
-}
-return null;
-};
-dojo.html.hasAttribute=function(node,attr){
-node=dojo.byId(node);
-return dojo.html.getAttribute(node,attr)?true:false;
-};
-dojo.html.getClass=function(node){
-node=dojo.byId(node);
-if(!node){
-return "";
-}
-var cs="";
-if(node.className){
-cs=node.className;
-}else{
-if(dojo.html.hasAttribute(node,"class")){
-cs=dojo.html.getAttribute(node,"class");
-}
-}
-return dojo.string.trim(cs);
-};
-dojo.html.getClasses=function(node){
-var c=dojo.html.getClass(node);
-return (c=="")?[]:c.split(/\s+/g);
-};
-dojo.html.hasClass=function(node,_42f){
-return dojo.lang.inArray(dojo.html.getClasses(node),_42f);
-};
-dojo.html.prependClass=function(node,_431){
-_431+=" "+dojo.html.getClass(node);
-return dojo.html.setClass(node,_431);
-};
-dojo.html.addClass=function(node,_433){
-if(dojo.html.hasClass(node,_433)){
-return false;
-}
-_433=dojo.string.trim(dojo.html.getClass(node)+" "+_433);
-return dojo.html.setClass(node,_433);
-};
-dojo.html.setClass=function(node,_435){
-node=dojo.byId(node);
-var cs=new String(_435);
-try{
-if(typeof node.className=="string"){
-node.className=cs;
-}else{
-if(node.setAttribute){
-node.setAttribute("class",_435);
-node.className=cs;
-}else{
-return false;
-}
-}
-}
-catch(e){
-dojo.debug("dojo.html.setClass() failed",e);
-}
-return true;
-};
-dojo.html.removeClass=function(node,_438,_439){
-var _438=dojo.string.trim(new String(_438));
-try{
-var cs=dojo.html.getClasses(node);
-var nca=[];
-if(_439){
-for(var i=0;i<cs.length;i++){
-if(cs[i].indexOf(_438)==-1){
-nca.push(cs[i]);
-}
-}
-}else{
-for(var i=0;i<cs.length;i++){
-if(cs[i]!=_438){
-nca.push(cs[i]);
-}
-}
-}
-dojo.html.setClass(node,nca.join(" "));
-}
-catch(e){
-dojo.debug("dojo.html.removeClass() failed",e);
-}
-return true;
-};
-dojo.html.replaceClass=function(node,_43e,_43f){
-dojo.html.removeClass(node,_43f);
-dojo.html.addClass(node,_43e);
-};
-dojo.html.classMatchType={ContainsAll:0,ContainsAny:1,IsOnly:2};
-dojo.html.getElementsByClass=function(_440,_441,_442,_443,_444){
-_441=dojo.byId(_441)||document;
-var _445=_440.split(/\s+/g);
-var _446=[];
-if(_443!=1&&_443!=2){
-_443=0;
-}
-var _447=new RegExp("(\\s|^)(("+_445.join(")|(")+"))(\\s|$)");
-var _448=[];
-if(!_444&&document.evaluate){
-var _449="//"+(_442||"*")+"[contains(";
-if(_443!=dojo.html.classMatchType.ContainsAny){
-_449+="concat(' ',@class,' '), ' "+_445.join(" ') and contains(concat(' ',@class,' '), ' ")+" ')]";
-}else{
-_449+="concat(' ',@class,' '), ' "+_445.join(" ')) or contains(concat(' ',@class,' '), ' ")+" ')]";
-}
-var _44a=document.evaluate(_449,_441,null,XPathResult.ANY_TYPE,null);
-var _44b=_44a.iterateNext();
-while(_44b){
-try{
-_448.push(_44b);
-_44b=_44a.iterateNext();
-}
-catch(e){
-break;
-}
-}
-return _448;
-}else{
-if(!_442){
-_442="*";
-}
-_448=_441.getElementsByTagName(_442);
-var node,i=0;
-outer:
-while(node=_448[i++]){
-var _44d=dojo.html.getClasses(node);
-if(_44d.length==0){
-continue outer;
-}
-var _44e=0;
-for(var j=0;j<_44d.length;j++){
-if(_447.test(_44d[j])){
-if(_443==dojo.html.classMatchType.ContainsAny){
-_446.push(node);
-continue outer;
-}else{
-_44e++;
-}
-}else{
-if(_443==dojo.html.classMatchType.IsOnly){
-continue outer;
-}
-}
-}
-if(_44e==_445.length){
-if((_443==dojo.html.classMatchType.IsOnly)&&(_44e==_44d.length)){
-_446.push(node);
-}else{
-if(_443==dojo.html.classMatchType.ContainsAll){
-_446.push(node);
-}
-}
-}
-}
-return _446;
-}
-};
-dojo.html.getElementsByClassName=dojo.html.getElementsByClass;
-dojo.html.getCursorPosition=function(e){
-e=e||window.event;
-var _451={x:0,y:0};
-if(e.pageX||e.pageY){
-_451.x=e.pageX;
-_451.y=e.pageY;
-}else{
-var de=document.documentElement;
-var db=document.body;
-_451.x=e.clientX+((de||db)["scrollLeft"])-((de||db)["clientLeft"]);
-_451.y=e.clientY+((de||db)["scrollTop"])-((de||db)["clientTop"]);
-}
-return _451;
-};
-dojo.html.overElement=function(_454,e){
-_454=dojo.byId(_454);
-var _456=dojo.html.getCursorPosition(e);
-with(dojo.html){
-var top=getAbsoluteY(_454,true);
-var _458=top+getInnerHeight(_454);
-var left=getAbsoluteX(_454,true);
-var _45a=left+getInnerWidth(_454);
-}
-return (_456.x>=left&&_456.x<=_45a&&_456.y>=top&&_456.y<=_458);
-};
-dojo.html.setActiveStyleSheet=function(_45b){
-var i=0,a,els=document.getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")){
-a.disabled=true;
-if(a.getAttribute("title")==_45b){
-a.disabled=false;
-}
-}
-}
-};
-dojo.html.getActiveStyleSheet=function(){
-var i=0,a,els=document.getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("title")&&!a.disabled){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.getPreferredStyleSheet=function(){
-var i=0,a,els=document.getElementsByTagName("link");
-while(a=els[i++]){
-if(a.getAttribute("rel").indexOf("style")!=-1&&a.getAttribute("rel").indexOf("alt")==-1&&a.getAttribute("title")){
-return a.getAttribute("title");
-}
-}
-return null;
-};
-dojo.html.body=function(){
-return document.body||document.getElementsByTagName("body")[0];
-};
-dojo.html.isTag=function(node){
-node=dojo.byId(node);
-if(node&&node.tagName){
-var arr=dojo.lang.map(dojo.lang.toArray(arguments,1),function(a){
-return String(a).toLowerCase();
-});
-return arr[dojo.lang.find(node.tagName.toLowerCase(),arr)]||"";
-}
-return "";
-};
-dojo.html.copyStyle=function(_462,_463){
-if(dojo.lang.isUndefined(_463.style.cssText)){
-_462.setAttribute("style",_463.getAttribute("style"));
-}else{
-_462.style.cssText=_463.style.cssText;
-}
-dojo.html.addClass(_462,dojo.html.getClass(_463));
-};
-dojo.html._callExtrasDeprecated=function(_464,args){
-var _466="dojo.html.extras";
-dojo.deprecated("dojo.html."+_464,"moved to "+_466,"0.4");
-dojo["require"](_466);
-return dojo.html[_464].apply(dojo.html,args);
-};
-dojo.html.createNodesFromText=function(){
-return dojo.html._callExtrasDeprecated("createNodesFromText",arguments);
-};
-dojo.html.gravity=function(){
-return dojo.html._callExtrasDeprecated("gravity",arguments);
-};
-dojo.html.placeOnScreen=function(){
-return dojo.html._callExtrasDeprecated("placeOnScreen",arguments);
-};
-dojo.html.placeOnScreenPoint=function(){
-return dojo.html._callExtrasDeprecated("placeOnScreenPoint",arguments);
-};
-dojo.html.renderedTextContent=function(){
-return dojo.html._callExtrasDeprecated("renderedTextContent",arguments);
-};
-dojo.html.BackgroundIframe=function(){
-return dojo.html._callExtrasDeprecated("BackgroundIframe",arguments);
-};
-dojo.provide("dojo.lfx.html");
-dojo.require("dojo.lfx.Animation");
-dojo.require("dojo.html");
-dojo.lfx.html._byId=function(_467){
-if(!_467){
-return [];
-}
-if(dojo.lang.isArray(_467)){
-if(!_467.alreadyChecked){
-var n=[];
-dojo.lang.forEach(_467,function(node){
-n.push(dojo.byId(node));
-});
-n.alreadyChecked=true;
-return n;
-}else{
-return _467;
-}
-}else{
-var n=[];
-n.push(dojo.byId(_467));
-n.alreadyChecked=true;
-return n;
-}
-};
-dojo.lfx.html.propertyAnimation=function(_46a,_46b,_46c,_46d){
-_46a=dojo.lfx.html._byId(_46a);
-if(_46a.length==1){
-dojo.lang.forEach(_46b,function(prop){
-if(typeof prop["start"]=="undefined"){
-if(prop.property!="opacity"){
-prop.start=parseInt(dojo.style.getComputedStyle(_46a[0],prop.property));
-}else{
-prop.start=dojo.style.getOpacity(_46a[0]);
-}
-}
-});
-}
-var _46f=function(_470){
-var _471=new Array(_470.length);
-for(var i=0;i<_470.length;i++){
-_471[i]=Math.round(_470[i]);
-}
-return _471;
-};
-var _473=function(n,_475){
-n=dojo.byId(n);
-if(!n||!n.style){
-return;
-}
-for(var s in _475){
-if(s=="opacity"){
-dojo.style.setOpacity(n,_475[s]);
-}else{
-n.style[s]=_475[s];
-}
-}
-};
-var _477=function(_478){
-this._properties=_478;
-this.diffs=new Array(_478.length);
-dojo.lang.forEach(_478,function(prop,i){
-if(dojo.lang.isArray(prop.start)){
-this.diffs[i]=null;
-}else{
-if(prop.start instanceof dojo.graphics.color.Color){
-prop.startRgb=prop.start.toRgb();
-prop.endRgb=prop.end.toRgb();
-}else{
-this.diffs[i]=prop.end-prop.start;
-}
-}
-},this);
-this.getValue=function(n){
-var ret={};
-dojo.lang.forEach(this._properties,function(prop,i){
-var _47f=null;
-if(dojo.lang.isArray(prop.start)){
-}else{
-if(prop.start instanceof dojo.graphics.color.Color){
-_47f=(prop.units||"rgb")+"(";
-for(var j=0;j<prop.startRgb.length;j++){
-_47f+=Math.round(((prop.endRgb[j]-prop.startRgb[j])*n)+prop.startRgb[j])+(j<prop.startRgb.length-1?",":"");
-}
-_47f+=")";
-}else{
-_47f=((this.diffs[i])*n)+prop.start+(prop.property!="opacity"?prop.units||"px":"");
-}
-}
-ret[dojo.style.toCamelCase(prop.property)]=_47f;
-},this);
-return ret;
-};
-};
-var anim=new dojo.lfx.Animation({onAnimate:function(_482){
-dojo.lang.forEach(_46a,function(node){
-_473(node,_482);
-});
-}},_46c,new _477(_46b),_46d);
-return anim;
-};
-dojo.lfx.html._makeFadeable=function(_484){
-var _485=function(node){
-if(dojo.render.html.ie){
-if((node.style.zoom.length==0)&&(dojo.style.getStyle(node,"zoom")=="normal")){
-node.style.zoom="1";
-}
-if((node.style.width.length==0)&&(dojo.style.getStyle(node,"width")=="auto")){
-node.style.width="auto";
-}
-}
-};
-if(dojo.lang.isArrayLike(_484)){
-dojo.lang.forEach(_484,_485);
-}else{
-_485(_484);
-}
-};
-dojo.lfx.html.fadeIn=function(_487,_488,_489,_48a){
-_487=dojo.lfx.html._byId(_487);
-dojo.lfx.html._makeFadeable(_487);
-var anim=dojo.lfx.propertyAnimation(_487,[{property:"opacity",start:dojo.style.getOpacity(_487[0]),end:1}],_488,_489);
-if(_48a){
-var _48c=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_48c();
-_48a(_487,anim);
-};
-}
-return anim;
-};
-dojo.lfx.html.fadeOut=function(_48d,_48e,_48f,_490){
-_48d=dojo.lfx.html._byId(_48d);
-dojo.lfx.html._makeFadeable(_48d);
-var anim=dojo.lfx.propertyAnimation(_48d,[{property:"opacity",start:dojo.style.getOpacity(_48d[0]),end:0}],_48e,_48f);
-if(_490){
-var _492=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_492();
-_490(_48d,anim);
-};
-}
-return anim;
-};
-dojo.lfx.html.fadeShow=function(_493,_494,_495,_496){
-var anim=dojo.lfx.html.fadeIn(_493,_494,_495,_496);
-var _498=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){
-};
-anim.beforeBegin=function(){
-_498();
-if(dojo.lang.isArrayLike(_493)){
-dojo.lang.forEach(_493,dojo.style.show);
-}else{
-dojo.style.show(_493);
-}
-};
-return anim;
-};
-dojo.lfx.html.fadeHide=function(_499,_49a,_49b,_49c){
-var anim=dojo.lfx.html.fadeOut(_499,_49a,_49b,function(){
-if(dojo.lang.isArrayLike(_499)){
-dojo.lang.forEach(_499,dojo.style.hide);
-}else{
-dojo.style.hide(_499);
-}
-if(_49c){
-_49c(_499,anim);
-}
-});
-return anim;
-};
-dojo.lfx.html.wipeIn=function(_49e,_49f,_4a0,_4a1){
-_49e=dojo.lfx.html._byId(_49e);
-var _4a2=[];
-dojo.lang.forEach(_49e,function(node){
-var _4a4=dojo.style.getStyle(node,"overflow");
-if(_4a4=="visible"){
-node.style.overflow="hidden";
-}
-node.style.height="0px";
-dojo.style.show(node);
-var anim=dojo.lfx.propertyAnimation(node,[{property:"height",start:0,end:node.scrollHeight}],_49f,_4a0);
-var _4a6=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4a6();
-node.style.overflow=_4a4;
-node.style.height="auto";
-if(_4a1){
-_4a1(node,anim);
-}
-};
-_4a2.push(anim);
-});
-if(_49e.length>1){
-return dojo.lfx.combine(_4a2);
-}else{
-return _4a2[0];
-}
-};
-dojo.lfx.html.wipeOut=function(_4a7,_4a8,_4a9,_4aa){
-_4a7=dojo.lfx.html._byId(_4a7);
-var _4ab=[];
-dojo.lang.forEach(_4a7,function(node){
-var _4ad=dojo.style.getStyle(node,"overflow");
-if(_4ad=="visible"){
-node.style.overflow="hidden";
-}
-dojo.style.show(node);
-var anim=dojo.lfx.propertyAnimation(node,[{property:"height",start:dojo.style.getContentBoxHeight(node),end:0}],_4a8,_4a9);
-var _4af=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4af();
-dojo.style.hide(node);
-node.style.overflow=_4ad;
-if(_4aa){
-_4aa(node,anim);
-}
-};
-_4ab.push(anim);
-});
-if(_4a7.length>1){
-return dojo.lfx.combine(_4ab);
-}else{
-return _4ab[0];
-}
-};
-dojo.lfx.html.slideTo=function(_4b0,_4b1,_4b2,_4b3,_4b4){
-_4b0=dojo.lfx.html._byId(_4b0);
-var _4b5=[];
-dojo.lang.forEach(_4b0,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _4ba=node;
-return function(){
-top=_4ba.offsetTop;
-left=_4ba.offsetLeft;
-if(!dojo.style.isPositionAbsolute(_4ba)){
-var ret=dojo.style.abs(_4ba,true);
-dojo.style.setStyleAttributes(_4ba,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,[{property:"top",start:top,end:_4b1[0]},{property:"left",start:left,end:_4b1[1]}],_4b2,_4b3);
-var _4bd=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){
-};
-anim.beforeBegin=function(){
-_4bd();
-init();
-};
-if(_4b4){
-var _4be=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4be();
-_4b4(_4b0,anim);
-};
-}
-_4b5.push(anim);
-});
-if(_4b0.length>1){
-return dojo.lfx.combine(_4b5);
-}else{
-return _4b5[0];
-}
-};
-dojo.lfx.html.slideBy=function(_4bf,_4c0,_4c1,_4c2,_4c3){
-_4bf=dojo.lfx.html._byId(_4bf);
-var _4c4=[];
-dojo.lang.forEach(_4bf,function(node){
-var top=null;
-var left=null;
-var init=(function(){
-var _4c9=node;
-return function(){
-top=node.offsetTop;
-left=node.offsetLeft;
-if(!dojo.style.isPositionAbsolute(_4c9)){
-var ret=dojo.style.abs(_4c9);
-dojo.style.setStyleAttributes(_4c9,"position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-top=ret.y;
-left=ret.x;
-}
-};
-})();
-init();
-var anim=dojo.lfx.propertyAnimation(node,[{property:"top",start:top,end:top+_4c0[0]},{property:"left",start:left,end:left+_4c0[1]}],_4c1,_4c2);
-var _4cc=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){
-};
-anim.beforeBegin=function(){
-_4cc();
-init();
-};
-if(_4c3){
-var _4cd=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4cd();
-_4c3(_4bf,anim);
-};
-}
-_4c4.push(anim);
-});
-if(_4bf.length>1){
-return dojo.lfx.combine(_4c4);
-}else{
-return _4c4[0];
-}
-};
-dojo.lfx.html.explode=function(_4ce,_4cf,_4d0,_4d1,_4d2){
-_4ce=dojo.byId(_4ce);
-_4cf=dojo.byId(_4cf);
-var _4d3=dojo.style.toCoordinateArray(_4ce,true);
-var _4d4=document.createElement("div");
-dojo.html.copyStyle(_4d4,_4cf);
-with(_4d4.style){
-position="absolute";
-display="none";
-}
-document.body.appendChild(_4d4);
-with(_4cf.style){
-visibility="hidden";
-display="block";
-}
-var _4d5=dojo.style.toCoordinateArray(_4cf,true);
-with(_4cf.style){
-display="none";
-visibility="visible";
-}
-var anim=new dojo.lfx.propertyAnimation(_4d4,[{property:"height",start:_4d3[3],end:_4d5[3]},{property:"width",start:_4d3[2],end:_4d5[2]},{property:"top",start:_4d3[1],end:_4d5[1]},{property:"left",start:_4d3[0],end:_4d5[0]},{property:"opacity",start:0.3,end:1}],_4d0,_4d1);
-anim.beforeBegin=function(){
-dojo.style.setDisplay(_4d4,"block");
-};
-anim.onEnd=function(){
-dojo.style.setDisplay(_4cf,"block");
-_4d4.parentNode.removeChild(_4d4);
-};
-if(_4d2){
-var _4d7=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4d7();
-_4d2(_4cf,anim);
-};
-}
-return anim;
-};
-dojo.lfx.html.implode=function(_4d8,end,_4da,_4db,_4dc){
-_4d8=dojo.byId(_4d8);
-end=dojo.byId(end);
-var _4dd=dojo.style.toCoordinateArray(_4d8,true);
-var _4de=dojo.style.toCoordinateArray(end,true);
-var _4df=document.createElement("div");
-dojo.html.copyStyle(_4df,_4d8);
-dojo.style.setOpacity(_4df,0.3);
-with(_4df.style){
-position="absolute";
-display="none";
-}
-document.body.appendChild(_4df);
-var anim=new dojo.lfx.propertyAnimation(_4df,[{property:"height",start:_4dd[3],end:_4de[3]},{property:"width",start:_4dd[2],end:_4de[2]},{property:"top",start:_4dd[1],end:_4de[1]},{property:"left",start:_4dd[0],end:_4de[0]},{property:"opacity",start:1,end:0.3}],_4da,_4db);
-anim.beforeBegin=function(){
-dojo.style.hide(_4d8);
-dojo.style.show(_4df);
-};
-anim.onEnd=function(){
-_4df.parentNode.removeChild(_4df);
-};
-if(_4dc){
-var _4e1=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4e1();
-_4dc(_4d8,anim);
-};
-}
-return anim;
-};
-dojo.lfx.html.highlight=function(_4e2,_4e3,_4e4,_4e5,_4e6){
-_4e2=dojo.lfx.html._byId(_4e2);
-var _4e7=[];
-dojo.lang.forEach(_4e2,function(node){
-var _4e9=dojo.style.getBackgroundColor(node);
-var bg=dojo.style.getStyle(node,"background-color").toLowerCase();
-var _4eb=dojo.style.getStyle(node,"background-image");
-var _4ec=(bg=="transparent"||bg=="rgba(0, 0, 0, 0)");
-while(_4e9.length>3){
-_4e9.pop();
-}
-var rgb=new dojo.graphics.color.Color(_4e3);
-var _4ee=new dojo.graphics.color.Color(_4e9);
-var anim=dojo.lfx.propertyAnimation(node,[{property:"background-color",start:rgb,end:_4ee}],_4e4,_4e5);
-var _4f0=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){
-};
-anim.beforeBegin=function(){
-_4f0();
-if(_4eb){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+rgb.toRgb().join(",")+")";
-};
-var _4f1=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4f1();
-if(_4eb){
-node.style.backgroundImage=_4eb;
-}
-if(_4ec){
-node.style.backgroundColor="transparent";
-}
-if(_4e6){
-_4e6(node,anim);
-}
-};
-_4e7.push(anim);
-});
-if(_4e2.length>1){
-return dojo.lfx.combine(_4e7);
-}else{
-return _4e7[0];
-}
-};
-dojo.lfx.html.unhighlight=function(_4f2,_4f3,_4f4,_4f5,_4f6){
-_4f2=dojo.lfx.html._byId(_4f2);
-var _4f7=[];
-dojo.lang.forEach(_4f2,function(node){
-var _4f9=new dojo.graphics.color.Color(dojo.style.getBackgroundColor(node));
-var rgb=new dojo.graphics.color.Color(_4f3);
-var _4fb=dojo.style.getStyle(node,"background-image");
-var anim=dojo.lfx.propertyAnimation(node,[{property:"background-color",start:_4f9,end:rgb}],_4f4,_4f5);
-var _4fd=(anim["beforeBegin"])?dojo.lang.hitch(anim,"beforeBegin"):function(){
-};
-anim.beforeBegin=function(){
-_4fd();
-if(_4fb){
-node.style.backgroundImage="none";
-}
-node.style.backgroundColor="rgb("+_4f9.toRgb().join(",")+")";
-};
-var _4fe=(anim["onEnd"])?dojo.lang.hitch(anim,"onEnd"):function(){
-};
-anim.onEnd=function(){
-_4fe();
-if(_4f6){
-_4f6(node,anim);
-}
-};
-_4f7.push(anim);
-});
-if(_4f2.length>1){
-return dojo.lfx.combine(_4f7);
-}else{
-return _4f7[0];
-}
-};
-dojo.lang.mixin(dojo.lfx,dojo.lfx.html);
-dojo.kwCompoundRequire({browser:["dojo.lfx.html"],dashboard:["dojo.lfx.html"]});
-dojo.provide("dojo.lfx.*");
-

+ 0 - 7439
main/inc/lib/javascript/dojo/dojo.js.uncompressed.js

@@ -1,7439 +0,0 @@
-if(typeof dojo == "undefined"){
-
-/**
-* @file bootstrap1.js
-*
-* summary: First file that is loaded that 'bootstraps' the entire dojo library suite.
-* note:  Must run before hostenv_*.js file.
-*
-* @author  Copyright 2004 Mark D. Anderson (mda@discerning.com)
-* TODOC: should the copyright be changed to Dojo Foundation?
-* @license Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php
-*
-* $Id: dojo.js.uncompressed.js,v 1.1 2006/08/09 17:26:18 yannoo Exp $
-*/
-
-// TODOC: HOW TO DOC THE BELOW?
-// @global: djConfig
-// summary:  
-//		Application code can set the global 'djConfig' prior to loading
-//		the library to override certain global settings for how dojo works.  
-// description:  The variables that can be set are as follows:
-//			- isDebug: false
-//			- allowQueryConfig: false
-//			- baseScriptUri: ""
-//			- baseRelativePath: ""
-//			- libraryScriptUri: ""
-//			- iePreventClobber: false
-//			- ieClobberMinimal: true
-//			- preventBackButtonFix: true
-//			- searchIds: []
-//			- parseWidgets: true
-// TODOC: HOW TO DOC THESE VARIABLES?
-// TODOC: IS THIS A COMPLETE LIST?
-// note:
-//		'djConfig' does not exist under 'dojo.*' so that it can be set before the 
-//		'dojo' variable exists.  
-// note:
-//		Setting any of these variables *after* the library has loaded does nothing at all. 
-// TODOC: is this still true?  Release notes for 0.3 indicated they could be set after load.
-//
-
-
-
-//TODOC:  HOW TO DOC THIS?
-// @global: dj_global
-// summary: 
-//		an alias for the top-level global object in the host environment
-//		(e.g., the window object in a browser).
-// description:  
-//		Refer to 'dj_global' rather than referring to window to ensure your
-//		code runs correctly in contexts other than web browsers (eg: Rhino on a server).
-var dj_global = this;
-
-
-
-function dj_undef(/*String*/ name, /*Object?*/ object){
-	//summary: Returns true if 'name' is defined on 'object' (or globally if 'object' is null).
-	//description: Note that 'defined' and 'exists' are not the same concept.
-	if(object==null){ object = dj_global; }
-	// exception if object is not an Object
-	return (typeof object[name] == "undefined");	// Boolean
-}
-
-
-// make sure djConfig is defined
-if(dj_undef("djConfig")){ 
-	var djConfig = {}; 
-}
-
-
-//TODOC:  HOW TO DOC THIS?
-// dojo is the root variable of (almost all) our public symbols -- make sure it is defined.
-if(dj_undef("dojo")){ 
-	var dojo = {}; 
-}
-
-//TODOC:  HOW TO DOC THIS?
-dojo.version = {
-	// summary: version number of this instance of dojo.
-	major: 0, minor: 3, patch: 1, flag: "",
-	revision: Number("$Rev: 4342 $".match(/[0-9]+/)[0]),
-	toString: function(){
-		with(dojo.version){
-			return major + "." + minor + "." + patch + flag + " (" + revision + ")";	// String
-		}
-	}
-}
-
-dojo.evalProp = function(/*String*/ name, /*Object*/ object, /*Boolean?*/ create){
-	// summary: Returns 'object[name]'.  If not defined and 'create' is true, will return a new Object.
-	// description: 
-	//		Returns null if 'object[name]' is not defined and 'create' is not true.
-	// 		Note: 'defined' and 'exists' are not the same concept.	
-	return (object && !dj_undef(name, object) ? object[name] : (create ? (object[name]={}) : undefined));	// mixed
-}
-
-
-dojo.parseObjPath = function(/*String*/ path, /*Object?*/ context, /*Boolean?*/ create){
-	// summary: Parse string path to an object, and return corresponding object reference and property name.
-	// description: 
-	//		Returns an object with two properties, 'obj' and 'prop'.  
-	//		'obj[prop]' is the reference indicated by 'path'.
-	// path: Path to an object, in the form "A.B.C".
-	// context: Object to use as root of path.  Defaults to 'dj_global'.
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
-	var object = (context != null ? context : dj_global);
-	var names = path.split('.');
-	var prop = names.pop();
-	for (var i=0,l=names.length;i<l && object;i++){
-		object = dojo.evalProp(names[i], object, create);
-	}
-	return {obj: object, prop: prop};	// Object: {obj: Object, prop: String}
-}
-
-
-dojo.evalObjPath = function(/*String*/ path, /*Boolean?*/ create){
-	// summary: Return the value of object at 'path' in the global scope, without using 'eval()'.
-	// path: Path to an object, in the form "A.B.C".
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
-	if(typeof path != "string"){ 
-		return dj_global; 
-	}
-	// fast path for no periods
-	if(path.indexOf('.') == -1){
-		return dojo.evalProp(path, dj_global, create);		// mixed
-	}
-
-	//MOW: old 'with' syntax was confusing and would throw an error if parseObjPath returned null.
-	var ref = dojo.parseObjPath(path, dj_global, create);
-	if(ref){
-		return dojo.evalProp(ref.prop, ref.obj, create);	// mixed
-	}
-	return null;
-}
-
-// ****************************************************************
-// global public utils
-// TODOC: DO WE WANT TO NOTE THAT THESE ARE GLOBAL PUBLIC UTILS?
-// ****************************************************************
-
-dojo.errorToString = function(/*Error*/ exception){
-	// summary: Return an exception's 'message', 'description' or text.
-
-	// TODO: overriding Error.prototype.toString won't accomplish this?
- 	// 		... since natively generated Error objects do not always reflect such things?
-	if(!dj_undef("message", exception)){
-		return exception.message;		// String
-	}else if(!dj_undef("description", exception)){
-		return exception.description;	// String
-	}else{
-		return exception;				// Error
-	}
-}
-
-
-dojo.raise = function(/*String*/ message, /*Error?*/ exception){
-	// summary: Throw an error message, appending text of 'exception' if provided.
-	// note: Also prints a message to the user using 'dojo.hostenv.println'.
-	if(exception){
-		message = message + ": "+dojo.errorToString(exception);
-	}
-
-	// print the message to the user if hostenv.println is defined
-	try {	dojo.hostenv.println("FATAL: "+message); } catch (e) {}
-
-	throw Error(message);
-}
-
-//Stub functions so things don't break.
-//TODOC:  HOW TO DOC THESE?
-dojo.debug = function(){}
-dojo.debugShallow = function(obj){}
-dojo.profile = { start: function(){}, end: function(){}, stop: function(){}, dump: function(){} };
-
-
-function dj_eval(/*String*/ scriptFragment){ 
-	// summary: Perform an evaluation in the global scope.  Use this rather than calling 'eval()' directly.
-	// description: Placed in a separate function to minimize size of trapped evaluation context.
-	// note:
-	//	 - JSC eval() takes an optional second argument which can be 'unsafe'.
-	//	 - Mozilla/SpiderMonkey eval() takes an optional second argument which is the
-	//  	 scope object for new symbols.
-	return dj_global.eval ? dj_global.eval(scriptFragment) : eval(scriptFragment); 	// mixed
-}
-
-
-
-dojo.unimplemented = function(/*String*/ funcname, /*String?*/ extra){
-	// summary: Throw an exception because some function is not implemented.
-	// extra: Text to append to the exception message.
-	var message = "'" + funcname + "' not implemented";
-	if (extra != null) { message += " " + extra; }
-	dojo.raise(message);
-}
-
-
-dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
-	// summary: Log a debug message to indicate that a behavior has been deprecated.
-	// extra: Text to append to the message.
-	// removal: Text to indicate when in the future the behavior will be removed.
-	var message = "DEPRECATED: " + behaviour;
-	if(extra){ message += " " + extra; }
-	if(removal){ message += " -- will be removed in version: " + removal; }
-	dojo.debug(message);
-}
-
-
-
-dojo.inherits = function(/*Function*/ subclass, /*Function*/ superclass){
-	// summary: Set up inheritance between two classes.
-	if(typeof superclass != 'function'){ 
-		dojo.raise("dojo.inherits: superclass argument ["+superclass+"] must be a function (subclass: [" + subclass + "']");
-	}
-	subclass.prototype = new superclass();
-	subclass.prototype.constructor = subclass;
-	subclass.superclass = superclass.prototype;
-	// DEPRICATED: super is a reserved word, use 'superclass'
-	subclass['super'] = superclass.prototype;
-}
-
-dojo.render = (function(){
-	//TODOC: HOW TO DOC THIS?
-	// summary: Details rendering support, OS and browser of the current environment.
-	// TODOC: is this something many folks will interact with?  If so, we should doc the structure created...
-	function vscaffold(prefs, names){
-		var tmp = {
-			capable: false,
-			support: {
-				builtin: false,
-				plugin: false
-			},
-			prefixes: prefs
-		};
-		for(var prop in names){
-			tmp[prop] = false;
-		}
-		return tmp;
-	}
-
-	return {
-		name: "",
-		ver: dojo.version,
-		os: { win: false, linux: false, osx: false },
-		html: vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]),
-		svg: vscaffold(["svg"], ["corel", "adobe", "batik"]),
-		vml: vscaffold(["vml"], ["ie"]),
-		swf: vscaffold(["Swf", "Flash", "Mm"], ["mm"]),
-		swt: vscaffold(["Swt"], ["ibm"])
-	};
-})();
-
-// ****************************************************************
-// dojo.hostenv methods that must be defined in hostenv_*.js
-// ****************************************************************
-
-/**
- * The interface definining the interaction with the EcmaScript host environment.
-*/
-
-/*
- * None of these methods should ever be called directly by library users.
- * Instead public methods such as loadModule should be called instead.
- */
-dojo.hostenv = (function(){
-	// TODOC:  HOW TO DOC THIS?
-	// summary: Provides encapsulation of behavior that changes across different 'host environments' 
-	//			(different browsers, server via Rhino, etc).
-	// description: None of these methods should ever be called directly by library users.
-	//				Use public methods such as 'loadModule' instead.
-	
-	// default configuration options
-	var config = {
-		isDebug: false,
-		allowQueryConfig: false,
-		baseScriptUri: "",
-		baseRelativePath: "",
-		libraryScriptUri: "",
-		iePreventClobber: false,
-		ieClobberMinimal: true,
-		preventBackButtonFix: true,
-		searchIds: [],
-		parseWidgets: true
-	};
-
-	if (typeof djConfig == "undefined") { djConfig = config; }
-	else {
-		for (var option in config) {
-			if (typeof djConfig[option] == "undefined") {
-				djConfig[option] = config[option];
-			}
-		}
-	}
-
-	return {
-		name_: '(unset)',
-		version_: '(unset)',
-
-
-		getName: function(){ 
-			// sumary: Return the name of the host environment.
-			return this.name_; 	// String
-		},
-
-
-		getVersion: function(){ 
-			// summary: Return the version of the hostenv.
-			return this.version_; // String
-		},
-
-		getText: function(/*String*/ uri){
-			// summary:	Read the plain/text contents at the specified 'uri'.
-			// description: 
-			//			If 'getText()' is not implemented, then it is necessary to override 
-			//			'loadUri()' with an implementation that doesn't rely on it.
-
-			dojo.unimplemented('getText', "uri=" + uri);
-		}
-	};
-})();
-
-
-dojo.hostenv.getBaseScriptUri = function(){
-	// summary: Return the base script uri that other scripts are found relative to.
-	// TODOC: HUH?  This comment means nothing to me.  What other scripts? Is this the path to other dojo libraries?
-	//		MAYBE:  Return the base uri to scripts in the dojo library.	 ???
-	// return: Empty string or a path ending in '/'.
-	if(djConfig.baseScriptUri.length){ 
-		return djConfig.baseScriptUri;
-	}
-
-	// MOW: Why not:
-	//			uri = djConfig.libraryScriptUri || djConfig.baseRelativePath
-	//		??? Why 'new String(...)'
-	var uri = new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-	if (!uri) { dojo.raise("Nothing returned by getLibraryScriptUri(): " + uri); }
-
-	// MOW: uri seems to not be actually used.  Seems to be hard-coding to djConfig.baseRelativePath... ???
-	var lastslash = uri.lastIndexOf('/');		// MOW ???
-	djConfig.baseScriptUri = djConfig.baseRelativePath;
-	return djConfig.baseScriptUri;	// String
-}
-
-/*
- * loader.js - runs before the hostenv_*.js file. Contains all of the package loading methods.
- */
-
-//A semi-colon is at the start of the line because after doing a build, this function definition
-//get compressed onto the same line as the last line in bootstrap1.js. That list line is just a
-//curly bracket, and the browser complains about that syntax. The semicolon fixes it. Putting it
-//here instead of at the end of bootstrap1.js, since it is more of an issue for this file, (using
-//the closure), and bootstrap1.js could change in the future.
-;(function(){
-	//Additional properties for dojo.hostenv
-	var _addHostEnv = {
-		pkgFileName: "__package__",
-	
-		// for recursion protection
-		loading_modules_: {},
-		loaded_modules_: {},
-		addedToLoadingCount: [],
-		removedFromLoadingCount: [],
-	
-		inFlightCount: 0,
-	
-		// FIXME: it should be possible to pull module prefixes in from djConfig
-		modulePrefixes_: {
-			dojo: {name: "dojo", value: "src"}
-		},
-	
-	
-		setModulePrefix: function(module, prefix){
-			this.modulePrefixes_[module] = {name: module, value: prefix};
-		},
-	
-		getModulePrefix: function(module){
-			var mp = this.modulePrefixes_;
-			if((mp[module])&&(mp[module]["name"])){
-				return mp[module].value;
-			}
-			return module;
-		},
-
-		getTextStack: [],
-		loadUriStack: [],
-		loadedUris: [],
-	
-		//WARNING: This variable is referenced by packages outside of bootstrap: FloatingPane.js and undo/browser.js
-		post_load_: false,
-		
-		//Egad! Lots of test files push on this directly instead of using dojo.addOnLoad.
-		modulesLoadedListeners: [],
-		unloadListeners: [],
-		loadNotifying: false
-	};
-	
-	//Add all of these properties to dojo.hostenv
-	for(var param in _addHostEnv){
-		dojo.hostenv[param] = _addHostEnv[param];
-	}
-})();
-
-/**
- * Loads and interprets the script located at relpath, which is relative to the
- * script root directory.  If the script is found but its interpretation causes
- * a runtime exception, that exception is not caught by us, so the caller will
- * see it.  We return a true value if and only if the script is found.
- *
- * For now, we do not have an implementation of a true search path.  We
- * consider only the single base script uri, as returned by getBaseScriptUri().
- *
- * @param relpath A relative path to a script (no leading '/', and typically
- * ending in '.js').
- * @param module A module whose existance to check for after loading a path.
- * Can be used to determine success or failure of the load.
- * @param cb a function to pass the result of evaluating the script (optional)
- */
-dojo.hostenv.loadPath = function(relpath, module /*optional*/, cb /*optional*/){
-	var uri;
-	if((relpath.charAt(0) == '/')||(relpath.match(/^\w+:/))){
-		// dojo.raise("relpath '" + relpath + "'; must be relative");
-		uri = relpath;
-	}else{
-		uri = this.getBaseScriptUri() + relpath;
-	}
-	if(djConfig.cacheBust && dojo.render.html.capable){
-		uri += "?" + String(djConfig.cacheBust).replace(/\W+/g,"");
-	}
-	try{
-		return ((!module) ? this.loadUri(uri, cb) : this.loadUriAndCheck(uri, module, cb));
-	}catch(e){
-		dojo.debug(e);
-		return false;
-	}
-}
-
-/**
- * Reads the contents of the URI, and evaluates the contents.
- * Returns true if it succeeded. Returns false if the URI reading failed.
- * Throws if the evaluation throws.
- * The result of the eval is not available to the caller TODO: now it is; was this a deliberate restriction?
- *
- * @param uri a uri which points at the script to be loaded
- * @param cb a function to process the result of evaluating the script as an expression (optional)
- */
-dojo.hostenv.loadUri = function(uri, cb /*optional*/){
-	if(this.loadedUris[uri]){
-		return 1;
-	}
-	var contents = this.getText(uri, null, true);
-	if(contents == null){ return 0; }
-	this.loadedUris[uri] = true;
-	if(cb){ contents = '('+contents+')'; }
-	var value = dj_eval(contents);
-	if(cb){
-		cb(value);
-	}
-	return 1;
-}
-
-// FIXME: probably need to add logging to this method
-dojo.hostenv.loadUriAndCheck = function(uri, module, cb){
-	var ok = true;
-	try{
-		ok = this.loadUri(uri, cb);
-	}catch(e){
-		dojo.debug("failed loading ", uri, " with error: ", e);
-	}
-	return ((ok)&&(this.findModule(module, false))) ? true : false;
-}
-
-dojo.loaded = function(){ }
-dojo.unloaded = function(){ }
-
-dojo.hostenv.loaded = function(){
-	this.loadNotifying = true;
-	this.post_load_ = true;
-	var mll = this.modulesLoadedListeners;
-	for(var x=0; x<mll.length; x++){
-		mll[x]();
-	}
-
-	//Clear listeners so new ones can be added
-	//For other xdomain package loads after the initial load.
-	this.modulesLoadedListeners = [];
-	this.loadNotifying = false;
-
-	dojo.loaded();
-}
-
-dojo.hostenv.unloaded = function(){
-	var mll = this.unloadListeners;
-	while(mll.length){
-		(mll.pop())();
-	}
-	dojo.unloaded();
-}
-
-/*
-Call styles:
-	dojo.addOnLoad(functionPointer)
-	dojo.addOnLoad(object, "functionName")
-*/
-dojo.addOnLoad = function(obj, fcnName) {
-	var dh = dojo.hostenv;
-	if(arguments.length == 1) {
-		dh.modulesLoadedListeners.push(obj);
-	} else if(arguments.length > 1) {
-		dh.modulesLoadedListeners.push(function() {
-			obj[fcnName]();
-		});
-	}
-
-	//Added for xdomain loading. dojo.addOnLoad is used to
-	//indicate callbacks after doing some dojo.require() statements.
-	//In the xdomain case, if all the requires are loaded (after initial
-	//page load), then immediately call any listeners.
-	if(dh.post_load_ && dh.inFlightCount == 0 && !dh.loadNotifying){
-		dh.callLoaded();
-	}
-}
-
-dojo.addOnUnload = function(obj, fcnName){
-	var dh = dojo.hostenv;
-	if(arguments.length == 1){
-		dh.unloadListeners.push(obj);
-	} else if(arguments.length > 1) {
-		dh.unloadListeners.push(function() {
-			obj[fcnName]();
-		});
-	}
-}
-
-dojo.hostenv.modulesLoaded = function(){
-	if(this.post_load_){ return; }
-	if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-		if(this.inFlightCount > 0){ 
-			dojo.debug("files still in flight!");
-			return;
-		}
-		dojo.hostenv.callLoaded();
-	}
-}
-
-dojo.hostenv.callLoaded = function(){
-	if(typeof setTimeout == "object"){
-		setTimeout("dojo.hostenv.loaded();", 0);
-	}else{
-		dojo.hostenv.loaded();
-	}
-}
-
-dojo.hostenv.getModuleSymbols = function(modulename) {
-	var syms = modulename.split(".");
-	for(var i = syms.length - 1; i > 0; i--){
-		var parentModule = syms.slice(0, i).join(".");
-		var parentModulePath = this.getModulePrefix(parentModule);
-		if(parentModulePath != parentModule){
-			syms.splice(0, i, parentModulePath);
-			break;
-		}
-	}
-	return syms;
-}
-
-/**
-* loadModule("A.B") first checks to see if symbol A.B is defined. 
-* If it is, it is simply returned (nothing to do).
-*
-* If it is not defined, it will look for "A/B.js" in the script root directory,
-* followed by "A.js".
-*
-* It throws if it cannot find a file to load, or if the symbol A.B is not
-* defined after loading.
-*
-* It returns the object A.B.
-*
-* This does nothing about importing symbols into the current package.
-* It is presumed that the caller will take care of that. For example, to import
-* all symbols:
-*
-*    with (dojo.hostenv.loadModule("A.B")) {
-*       ...
-*    }
-*
-* And to import just the leaf symbol:
-*
-*    var B = dojo.hostenv.loadModule("A.B");
-*    ...
-*
-* dj_load is an alias for dojo.hostenv.loadModule
-*/
-dojo.hostenv._global_omit_module_check = false;
-dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){
-	if(!modulename){ return; }
-	omit_module_check = this._global_omit_module_check || omit_module_check;
-	var module = this.findModule(modulename, false);
-	if(module){
-		return module;
-	}
-
-	// protect against infinite recursion from mutual dependencies
-	if(dj_undef(modulename, this.loading_modules_)){
-		this.addedToLoadingCount.push(modulename);
-	}
-	this.loading_modules_[modulename] = 1;
-
-	// convert periods to slashes
-	var relpath = modulename.replace(/\./g, '/') + '.js';
-
-	var syms = this.getModuleSymbols(modulename);
-	var startedRelative = ((syms[0].charAt(0) != '/')&&(!syms[0].match(/^\w+:/)));
-	var last = syms[syms.length - 1];
-	// figure out if we're looking for a full package, if so, we want to do
-	// things slightly diffrently
-	var nsyms = modulename.split(".");
-	if(last=="*"){
-		modulename = (nsyms.slice(0, -1)).join('.');
-
-		while(syms.length){
-			syms.pop();
-			syms.push(this.pkgFileName);
-			relpath = syms.join("/") + '.js';
-			if(startedRelative && (relpath.charAt(0)=="/")){
-				relpath = relpath.slice(1);
-			}
-			ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-			if(ok){ break; }
-			syms.pop();
-		}
-	}else{
-		relpath = syms.join("/") + '.js';
-		modulename = nsyms.join('.');
-		var ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-		if((!ok)&&(!exact_only)){
-			syms.pop();
-			while(syms.length){
-				relpath = syms.join('/') + '.js';
-				ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-				if(ok){ break; }
-				syms.pop();
-				relpath = syms.join('/') + '/'+this.pkgFileName+'.js';
-				if(startedRelative && (relpath.charAt(0)=="/")){
-					relpath = relpath.slice(1);
-				}
-				ok = this.loadPath(relpath, ((!omit_module_check) ? modulename : null));
-				if(ok){ break; }
-			}
-		}
-
-		if((!ok)&&(!omit_module_check)){
-			dojo.raise("Could not load '" + modulename + "'; last tried '" + relpath + "'");
-		}
-	}
-
-	// check that the symbol was defined
-	//Don't bother if we're doing xdomain (asynchronous) loading.
-	if(!omit_module_check && !this["isXDomain"]){
-		// pass in false so we can give better error
-		module = this.findModule(modulename, false);
-		if(!module){
-			dojo.raise("symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
-		}
-	}
-
-	return module;
-}
-
-/**
-* startPackage("A.B") follows the path, and at each level creates a new empty
-* object or uses what already exists. It returns the result.
-*/
-dojo.hostenv.startPackage = function(packname){
-	var modref = dojo.evalObjPath((packname.split(".").slice(0, -1)).join('.'));
-	this.loaded_modules_[(new String(packname)).toLowerCase()] = modref;
-
-	var syms = packname.split(/\./);
-	if(syms[syms.length-1]=="*"){
-		syms.pop();
-	}
-	return dojo.evalObjPath(syms.join("."), true);
-}
-
-/**
- * findModule("A.B") returns the object A.B if it exists, otherwise null.
- * @param modulename A string like 'A.B'.
- * @param must_exist Optional, defualt false. throw instead of returning null
- * if the module does not currently exist.
- */
-dojo.hostenv.findModule = function(modulename, must_exist){
-	// check cache
-	/*
-	if(!dj_undef(modulename, this.modules_)){
-		return this.modules_[modulename];
-	}
-	*/
-
-	var lmn = (new String(modulename)).toLowerCase();
-
-	if(this.loaded_modules_[lmn]){
-		return this.loaded_modules_[lmn];
-	}
-
-	// see if symbol is defined anyway
-	var module = dojo.evalObjPath(modulename);
-	if((modulename)&&(typeof module != 'undefined')&&(module)){
-		this.loaded_modules_[lmn] = module;
-		return module;
-	}
-
-	if(must_exist){
-		dojo.raise("no loaded module named '" + modulename + "'");
-	}
-	return null;
-}
-
-//Start of old bootstrap2:
-
-/*
- * This method taks a "map" of arrays which one can use to optionally load dojo
- * modules. The map is indexed by the possible dojo.hostenv.name_ values, with
- * two additional values: "default" and "common". The items in the "default"
- * array will be loaded if none of the other items have been choosen based on
- * the hostenv.name_ item. The items in the "common" array will _always_ be
- * loaded, regardless of which list is chosen.  Here's how it's normally
- * called:
- *
- *	dojo.kwCompoundRequire({
- *		browser: [
- *			["foo.bar.baz", true, true], // an example that passes multiple args to loadModule()
- *			"foo.sample.*",
- *			"foo.test,
- *		],
- *		default: [ "foo.sample.*" ],
- *		common: [ "really.important.module.*" ]
- *	});
- */
-dojo.kwCompoundRequire = function(modMap){
-	var common = modMap["common"]||[];
-	var result = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]);
-
-	for(var x=0; x<result.length; x++){
-		var curr = result[x];
-		if(curr.constructor == Array){
-			dojo.hostenv.loadModule.apply(dojo.hostenv, curr);
-		}else{
-			dojo.hostenv.loadModule(curr);
-		}
-	}
-}
-
-dojo.require = function(){
-	dojo.hostenv.loadModule.apply(dojo.hostenv, arguments);
-}
-
-dojo.requireIf = function(){
-	if((arguments[0] === true)||(arguments[0]=="common")||(arguments[0] && dojo.render[arguments[0]].capable)){
-		var args = [];
-		for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
-		dojo.require.apply(dojo, args);
-	}
-}
-
-dojo.requireAfterIf = dojo.requireIf;
-
-dojo.provide = function(){
-	return dojo.hostenv.startPackage.apply(dojo.hostenv, arguments);
-}
-
-dojo.setModulePrefix = function(module, prefix){
-	return dojo.hostenv.setModulePrefix(module, prefix);
-}
-
-// determine if an object supports a given method
-// useful for longer api chains where you have to test each object in the chain
-dojo.exists = function(obj, name){
-	var p = name.split(".");
-	for(var i = 0; i < p.length; i++){
-	if(!(obj[p[i]])) return false;
-		obj = obj[p[i]];
-	}
-	return true;
-}
-
-};
-
-if(typeof window == 'undefined'){
-	dojo.raise("no window object");
-}
-
-// attempt to figure out the path to dojo if it isn't set in the config
-(function() {
-	// before we get any further with the config options, try to pick them out
-	// of the URL. Most of this code is from NW
-	if(djConfig.allowQueryConfig){
-		var baseUrl = document.location.toString(); // FIXME: use location.query instead?
-		var params = baseUrl.split("?", 2);
-		if(params.length > 1){
-			var paramStr = params[1];
-			var pairs = paramStr.split("&");
-			for(var x in pairs){
-				var sp = pairs[x].split("=");
-				// FIXME: is this eval dangerous?
-				if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){
-					var opt = sp[0].substr(9);
-					try{
-						djConfig[opt]=eval(sp[1]);
-					}catch(e){
-						djConfig[opt]=sp[1];
-					}
-				}
-			}
-		}
-	}
-
-	if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){
-		var scripts = document.getElementsByTagName("script");
-		var rePkg = /(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-		for(var i = 0; i < scripts.length; i++) {
-			var src = scripts[i].getAttribute("src");
-			if(!src) { continue; }
-			var m = src.match(rePkg);
-			if(m) {
-				var root = src.substring(0, m.index);
-				if(src.indexOf("bootstrap1") > -1) { root += "../"; }
-				if(!this["djConfig"]) { djConfig = {}; }
-				if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; }
-				if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; }
-				break;
-			}
-		}
-	}
-
-	// fill in the rendering support information in dojo.render.*
-	var dr = dojo.render;
-	var drh = dojo.render.html;
-	var drs = dojo.render.svg;
-	var dua = drh.UA = navigator.userAgent;
-	var dav = drh.AV = navigator.appVersion;
-	var t = true;
-	var f = false;
-	drh.capable = t;
-	drh.support.builtin = t;
-
-	dr.ver = parseFloat(drh.AV);
-	dr.os.mac = dav.indexOf("Macintosh") >= 0;
-	dr.os.win = dav.indexOf("Windows") >= 0;
-	// could also be Solaris or something, but it's the same browser
-	dr.os.linux = dav.indexOf("X11") >= 0;
-
-	drh.opera = dua.indexOf("Opera") >= 0;
-	drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0);
-	drh.safari = dav.indexOf("Safari") >= 0;
-	var geckoPos = dua.indexOf("Gecko");
-	drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml);
-	if (drh.mozilla) {
-		// gecko version is YYYYMMDD
-		drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14);
-	}
-	drh.ie = (document.all)&&(!drh.opera);
-	drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0;
-	drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0;
-	drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0;
-	drh.ie70 = drh.ie && dav.indexOf("MSIE 7.0")>=0;
-
-	// TODO: is the HTML LANG attribute relevant?
-	dojo.locale = (drh.ie ? navigator.userLanguage : navigator.language).toLowerCase();
-
-	dr.vml.capable=drh.ie;
-	drs.capable = f;
-	drs.support.plugin = f;
-	drs.support.builtin = f;
-	if (document.implementation
-		&& document.implementation.hasFeature
-		&& document.implementation.hasFeature("org.w3c.dom.svg", "1.0")
-	){
-		drs.capable = t;
-		drs.support.builtin = t;
-		drs.support.plugin = f;
-	}
-})();
-
-dojo.hostenv.startPackage("dojo.hostenv");
-
-dojo.render.name = dojo.hostenv.name_ = 'browser';
-dojo.hostenv.searchIds = [];
-
-// These are in order of decreasing likelihood; this will change in time.
-dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
-
-dojo.hostenv.getXmlhttpObject = function(){
-    var http = null;
-	var last_e = null;
-	try{ http = new XMLHttpRequest(); }catch(e){}
-    if(!http){
-		for(var i=0; i<3; ++i){
-			var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
-			try{
-				http = new ActiveXObject(progid);
-			}catch(e){
-				last_e = e;
-			}
-
-			if(http){
-				dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
-				break;
-			}
-		}
-
-		/*if(http && !http.toString) {
-			http.toString = function() { "[object XMLHttpRequest]"; }
-		}*/
-	}
-
-	if(!http){
-		return dojo.raise("XMLHTTP not available", last_e);
-	}
-
-	return http;
-}
-
-/**
- * Read the contents of the specified uri and return those contents.
- *
- * @param uri A relative or absolute uri. If absolute, it still must be in the
- * same "domain" as we are.
- *
- * @param async_cb If not specified, load synchronously. If specified, load
- * asynchronously, and use async_cb as the progress handler which takes the
- * xmlhttp object as its argument. If async_cb, this function returns null.
- *
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails,
- * return null instead of throwing.
- */
-dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-
-	var http = this.getXmlhttpObject();
-
-	if(async_cb){
-		http.onreadystatechange = function(){
-			if(4==http.readyState){
-				if((!http["status"])||((200 <= http.status)&&(300 > http.status))){
-					// dojo.debug("LOADED URI: "+uri);
-					async_cb(http.responseText);
-				}
-			}
-		}
-	}
-
-	http.open('GET', uri, async_cb ? true : false);
-	try{
-		http.send(null);
-		if(async_cb){
-			return null;
-		}
-		if((http["status"])&&((200 > http.status)||(300 <= http.status))){
-			throw Error("Unable to load "+uri+" status:"+ http.status);
-		}
-	}catch(e){
-		if((fail_ok)&&(!async_cb)){
-			return null;
-		}else{
-			throw e;
-		}
-	}
-
-	return http.responseText;
-}
-
-/*
- * It turns out that if we check *right now*, as this script file is being loaded,
- * then the last script element in the window DOM is ourselves.
- * That is because any subsequent script elements haven't shown up in the document
- * object yet.
- */
- /*
-function dj_last_script_src() {
-    var scripts = window.document.getElementsByTagName('script');
-    if(scripts.length < 1){
-		dojo.raise("No script elements in window.document, so can't figure out my script src");
-	}
-    var script = scripts[scripts.length - 1];
-    var src = script.src;
-    if(!src){
-		dojo.raise("Last script element (out of " + scripts.length + ") has no src");
-	}
-    return src;
-}
-
-if(!dojo.hostenv["library_script_uri_"]){
-	dojo.hostenv.library_script_uri_ = dj_last_script_src();
-}
-*/
-
-dojo.hostenv.defaultDebugContainerId = 'dojoDebug';
-dojo.hostenv._println_buffer = [];
-dojo.hostenv._println_safe = false;
-dojo.hostenv.println = function (line){
-	if(!dojo.hostenv._println_safe){
-		dojo.hostenv._println_buffer.push(line);
-	}else{
-		try {
-			var console = document.getElementById(djConfig.debugContainerId ?
-				djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);
-			if(!console) { console = document.getElementsByTagName("body")[0] || document.body; }
-
-			var div = document.createElement("div");
-			div.appendChild(document.createTextNode(line));
-			console.appendChild(div);
-		} catch (e) {
-			try{
-				// safari needs the output wrapped in an element for some reason
-				document.write("<div>" + line + "</div>");
-			}catch(e2){
-				window.status = line;
-			}
-		}
-	}
-}
-
-dojo.addOnLoad(function(){
-	dojo.hostenv._println_safe = true;
-	while(dojo.hostenv._println_buffer.length > 0){
-		dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-	}
-});
-
-function dj_addNodeEvtHdlr(node, evtName, fp, capture){
-	var oldHandler = node["on"+evtName] || function(){};
-	node["on"+evtName] = function(){
-		fp.apply(node, arguments);
-		oldHandler.apply(node, arguments);
-	}
-	return true;
-}
-
-
-/* Uncomment this to allow init after DOMLoad, not after window.onload
-
-// Mozilla exposes the event we could use
-if (dojo.render.html.mozilla) {
-   document.addEventListener("DOMContentLoaded", dj_load_init, null);
-}
-// for Internet Explorer. readyState will not be achieved on init call, but dojo doesn't need it
-//Tighten up the comments below to allow init after DOMLoad, not after window.onload
-/ * @cc_on @ * /
-/ * @if (@_win32)
-    document.write("<script defer>dj_load_init()<"+"/script>");
-/ * @end @ * /
-*/
-
-// default for other browsers
-// potential TODO: apply setTimeout approach for other browsers
-// that will cause flickering though ( document is loaded and THEN is processed)
-// maybe show/hide required in this case..
-// TODO: other browsers may support DOMContentLoaded/defer attribute. Add them to above.
-dj_addNodeEvtHdlr(window, "load", function(){
-	// allow multiple calls, only first one will take effect
-	if(arguments.callee.initialized){ return; }
-	arguments.callee.initialized = true;
-
-	var initFunc = function(){
-		//perform initialization
-		if(dojo.render.html.ie){
-			dojo.hostenv.makeWidgets();
-		}
-	};
-
-	if(dojo.hostenv.inFlightCount == 0){
-		initFunc();
-		dojo.hostenv.modulesLoaded();
-	}else{
-		dojo.addOnLoad(initFunc);
-	}
-});
-
-dj_addNodeEvtHdlr(window, "unload", function(){
-	dojo.hostenv.unloaded();
-});
-
-dojo.hostenv.makeWidgets = function(){
-	// you can put searchIds in djConfig and dojo.hostenv at the moment
-	// we should probably eventually move to one or the other
-	var sids = [];
-	if(djConfig.searchIds && djConfig.searchIds.length > 0) {
-		sids = sids.concat(djConfig.searchIds);
-	}
-	if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
-		sids = sids.concat(dojo.hostenv.searchIds);
-	}
-
-	if((djConfig.parseWidgets)||(sids.length > 0)){
-		if(dojo.evalObjPath("dojo.widget.Parse")){
-			// we must do this on a delay to avoid:
-			//	http://www.shaftek.org/blog/archives/000212.html
-			// IE is such a tremendous peice of shit.
-				var parser = new dojo.xml.Parse();
-				if(sids.length > 0){
-					for(var x=0; x<sids.length; x++){
-						var tmpNode = document.getElementById(sids[x]);
-						if(!tmpNode){ continue; }
-						var frag = parser.parseElement(tmpNode, null, true);
-						dojo.widget.getParser().createComponents(frag);
-					}
-				}else if(djConfig.parseWidgets){
-					var frag  = parser.parseElement(document.getElementsByTagName("body")[0] || document.body, null, true);
-					dojo.widget.getParser().createComponents(frag);
-				}
-		}
-	}
-}
-
-dojo.addOnLoad(function(){
-	if(!dojo.render.html.ie) {
-		dojo.hostenv.makeWidgets();
-	}
-});
-
-try {
-	if (dojo.render.html.ie) {
-		document.write('<style>v\:*{ behavior:url(#default#VML); }</style>');
-		document.write('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>');
-	}
-} catch (e) { }
-
-// stub, over-ridden by debugging code. This will at least keep us from
-// breaking when it's not included
-dojo.hostenv.writeIncludes = function(){}
-
-dojo.byId = function(id, doc){
-	if(id && (typeof id == "string" || id instanceof String)){
-		if(!doc){ doc = document; }
-		return doc.getElementById(id);
-	}
-	return id; // assume it's a node
-}
-
-//Semicolon is for when this file is integrated with a custom build on one line
-//with some other file's contents. Sometimes that makes things not get defined
-//properly, particularly with the using the closure below to do all the work.
-;(function(){
-	//Don't do this work if dojo.js has already done it.
-	if(typeof dj_usingBootstrap != "undefined"){
-		return;
-	}
-
-	var isRhino = false;
-	var isSpidermonkey = false;
-	var isDashboard = false;
-	if((typeof this["load"] == "function")&&((typeof this["Packages"] == "function")||(typeof this["Packages"] == "object"))){
-		isRhino = true;
-	}else if(typeof this["load"] == "function"){
-		isSpidermonkey  = true;
-	}else if(window.widget){
-		isDashboard = true;
-	}
-
-	var tmps = [];
-	if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-		tmps.push("debug.js");
-	}
-
-	if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!isRhino)&&(!isDashboard)){
-		tmps.push("browser_debug.js");
-	}
-
-	//Support compatibility packages. Right now this only allows setting one
-	//compatibility package. Might need to revisit later down the line to support
-	//more than one.
-	if((this["djConfig"])&&(djConfig["compat"])){
-		tmps.push("compat/" + djConfig["compat"] + ".js");
-	}
-
-	var loaderRoot = djConfig["baseScriptUri"];
-	if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-		loaderRoot = djConfig["baseLoaderUri"];
-	}
-
-	for(var x=0; x < tmps.length; x++){
-		var spath = loaderRoot+"src/"+tmps[x];
-		if(isRhino||isSpidermonkey){
-			load(spath);
-		} else {
-			try {
-				document.write("<scr"+"ipt type='text/javascript' src='"+spath+"'></scr"+"ipt>");
-			} catch (e) {
-				var script = document.createElement("script");
-				script.src = spath;
-				document.getElementsByTagName("head")[0].appendChild(script);
-			}
-		}
-	}
-})();
-
-// Localization routines
-
-/**
- * The locale to look for string bundles if none are defined for your locale.  Translations for all strings
- * should be provided in this locale.
- */
-//TODO: this really belongs in translation metadata, not in code
-dojo.fallback_locale = 'en';
-
-/**
- * Returns canonical form of locale, as used by Dojo.  All variants are case-insensitive and are separated by '-'
- * as specified in RFC 3066
- */
-dojo.normalizeLocale = function(locale) {
-	return locale ? locale.toLowerCase() : dojo.locale;
-};
-
-/**
- * requireLocalization() is for loading translated bundles provided within a package in the namespace.
- * Contents are typically strings, but may be any name/value pair, represented in JSON format.
- * A bundle is structured in a program as follows:
- *
- * <package>/
- *  nls/
- *   de/
- *    mybundle.js
- *   de-at/
- *    mybundle.js
- *   en/
- *    mybundle.js
- *   en-us/
- *    mybundle.js
- *   en-gb/
- *    mybundle.js
- *   es/
- *    mybundle.js
- *  ...etc
- *
- * where package is part of the namespace as used by dojo.require().  Each directory is named for a
- * locale as specified by RFC 3066, (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase.
- *
- * For a given locale, string bundles will be loaded for that locale and all general locales above it, as well
- * as a system-specified fallback.  For example, "de_at" will also load "de" and "en".  Lookups will traverse
- * the locales in this order.  A build step can preload the bundles to avoid data redundancy and extra network hits.
- *
- * @param modulename package in which the bundle is found
- * @param bundlename bundle name, typically the filename without the '.js' suffix
- * @param locale the locale to load (optional)  By default, the browser's user locale as defined
- *	in dojo.locale
- */
-dojo.requireLocalization = function(modulename, bundlename, locale /*optional*/){
-
-	dojo.debug("EXPERIMENTAL: dojo.requireLocalization"); //dojo.experimental
-
-	var syms = dojo.hostenv.getModuleSymbols(modulename);
-	var modpath = syms.concat("nls").join("/");
-
-	locale = dojo.normalizeLocale(locale);
-
-	var elements = locale.split('-');
-	var searchlist = [];
-	for(var i = elements.length; i > 0; i--){
-		searchlist.push(elements.slice(0, i).join('-'));
-	}
-	if(searchlist[searchlist.length-1] != dojo.fallback_locale){
-		searchlist.push(dojo.fallback_locale);
-	}
-
-	var bundlepackage = [modulename, "_nls", bundlename].join(".");
-	var bundle = dojo.hostenv.startPackage(bundlepackage);
-	dojo.hostenv.loaded_modules_[bundlepackage] = bundle;
-	
-	var inherit = false;
-	for(var i = searchlist.length - 1; i >= 0; i--){
-		var loc = searchlist[i];
-		var pkg = [bundlepackage, loc].join(".");
-		var loaded = false;
-		if(!dojo.hostenv.findModule(pkg)){
-			// Mark loaded whether it's found or not, so that further load attempts will not be made
-			dojo.hostenv.loaded_modules_[pkg] = null;
-
-			var filespec = [modpath, loc, bundlename].join("/") + '.js';
-			loaded = dojo.hostenv.loadPath(filespec, null, function(hash) {
- 				bundle[loc] = hash;
- 				if(inherit){
-					// Use mixins approach to copy string references from inherit bundle, but skip overrides.
-					for(var x in inherit){
-						if(!bundle[loc][x]){
-							bundle[loc][x] = inherit[x];
-						}
-					}
- 				}
-/*
-				// Use prototype to point to other bundle, then copy in result from loadPath
-				bundle[loc] = new function(){};
-				if(inherit){ bundle[loc].prototype = inherit; }
-				for(var i in hash){ bundle[loc][i] = hash[i]; }
-*/
-			});
-		}else{
-			loaded = true;
-		}
-		if(loaded && bundle[loc]){
-			inherit = bundle[loc];
-		}
-	}
-};
-
-dojo.provide("dojo.string.common");
-
-dojo.require("dojo.string");
-
-/**
- * Trim whitespace from 'str'. If 'wh' > 0,
- * only trim from start, if 'wh' < 0, only trim
- * from end, otherwise trim both ends
- */
-dojo.string.trim = function(str, wh){
-	if(!str.replace){ return str; }
-	if(!str.length){ return str; }
-	var re = (wh > 0) ? (/^\s+/) : (wh < 0) ? (/\s+$/) : (/^\s+|\s+$/g);
-	return str.replace(re, "");
-}
-
-/**
- * Trim whitespace at the beginning of 'str'
- */
-dojo.string.trimStart = function(str) {
-	return dojo.string.trim(str, 1);
-}
-
-/**
- * Trim whitespace at the end of 'str'
- */
-dojo.string.trimEnd = function(str) {
-	return dojo.string.trim(str, -1);
-}
-
-/**
- * Return 'str' repeated 'count' times, optionally
- * placing 'separator' between each rep
- */
-dojo.string.repeat = function(str, count, separator) {
-	var out = "";
-	for(var i = 0; i < count; i++) {
-		out += str;
-		if(separator && i < count - 1) {
-			out += separator;
-		}
-	}
-	return out;
-}
-
-/**
- * Pad 'str' to guarantee that it is at least 'len' length
- * with the character 'c' at either the start (dir=1) or
- * end (dir=-1) of the string
- */
-dojo.string.pad = function(str, len/*=2*/, c/*='0'*/, dir/*=1*/) {
-	var out = String(str);
-	if(!c) {
-		c = '0';
-	}
-	if(!dir) {
-		dir = 1;
-	}
-	while(out.length < len) {
-		if(dir > 0) {
-			out = c + out;
-		} else {
-			out += c;
-		}
-	}
-	return out;
-}
-
-/** same as dojo.string.pad(str, len, c, 1) */
-dojo.string.padLeft = function(str, len, c) {
-	return dojo.string.pad(str, len, c, 1);
-}
-
-/** same as dojo.string.pad(str, len, c, -1) */
-dojo.string.padRight = function(str, len, c) {
-	return dojo.string.pad(str, len, c, -1);
-}
-
-dojo.provide("dojo.string");
-dojo.require("dojo.string.common");
-
-dojo.provide("dojo.lang.common");
-dojo.require("dojo.lang");
-
-/*
- * Adds the given properties/methods to the specified object
- */
-dojo.lang._mixin = function(obj, props){
-	var tobj = {};
-	for(var x in props){
-		// the "tobj" condition avoid copying properties in "props"
-		// inherited from Object.prototype.  For example, if obj has a custom
-		// toString() method, don't overwrite it with the toString() method
-		// that props inherited from Object.protoype
-		if(typeof tobj[x] == "undefined" || tobj[x] != props[x]) {
-			obj[x] = props[x];
-		}
-	}
-	// IE doesn't recognize custom toStrings in for..in
-	if(dojo.render.html.ie && dojo.lang.isFunction(props["toString"]) && props["toString"] != obj["toString"]) {
-		obj.toString = props.toString;
-	}
-	return obj;
-}
-
-/*
- * Adds the properties/methods of argument Objects to obj
- */
-dojo.lang.mixin = function(obj, props /*, props, ..., props */){
-	for(var i=1, l=arguments.length; i<l; i++){
-		dojo.lang._mixin(obj, arguments[i]);
-	}
-	return obj;
-}
-
-/*
- * Adds the properties/methods of argument Objects to ctor's prototype
- */
-dojo.lang.extend = function(ctor /*function*/, props /*, props, ..., props */){
-	for(var i=1, l=arguments.length; i<l; i++){
-		dojo.lang._mixin(ctor.prototype, arguments[i]);
-	}
-	return ctor;
-}
-
-/**
- * See if val is in arr. Call signatures:
- *  find(array, value, identity) // recommended
- *  find(value, array, identity)
-**/
-dojo.lang.find = function(	/*Array*/	arr, 
-							/*Object*/	val,
-							/*boolean*/	identity,
-							/*boolean*/	findLast){
-	// support both (arr, val) and (val, arr)
-	if(!dojo.lang.isArrayLike(arr) && dojo.lang.isArrayLike(val)) {
-		var a = arr;
-		arr = val;
-		val = a;
-	}
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-
-	if(findLast) {
-		var step = -1;
-		var i = arr.length - 1;
-		var end = -1;
-	} else {
-		var step = 1;
-		var i = 0;
-		var end = arr.length;
-	}
-	if(identity){
-		while(i != end) {
-			if(arr[i] === val){ return i; }
-			i += step;
-		}
-	}else{
-		while(i != end) {
-			if(arr[i] == val){ return i; }
-			i += step;
-		}
-	}
-	return -1;
-}
-
-dojo.lang.indexOf = dojo.lang.find;
-
-dojo.lang.findLast = function(/*Array*/ arr, /*Object*/ val, /*boolean*/ identity){
-	return dojo.lang.find(arr, val, identity, true);
-}
-
-dojo.lang.lastIndexOf = dojo.lang.findLast;
-
-dojo.lang.inArray = function(arr /*Array*/, val /*Object*/){
-	return dojo.lang.find(arr, val) > -1; // return: boolean
-}
-
-/**
- * Partial implmentation of is* functions from
- * http://www.crockford.com/javascript/recommend.html
- * NOTE: some of these may not be the best thing to use in all situations
- * as they aren't part of core JS and therefore can't work in every case.
- * See WARNING messages inline for tips.
- *
- * The following is* functions are fairly "safe"
- */
-
-dojo.lang.isObject = function(wh){
-	if(typeof wh == "undefined"){ return false; }
-	return (typeof wh == "object" || wh === null || dojo.lang.isArray(wh) || dojo.lang.isFunction(wh));
-}
-
-dojo.lang.isArray = function(wh){
-	return (wh instanceof Array || typeof wh == "array");
-}
-
-dojo.lang.isArrayLike = function(wh){
-	if(dojo.lang.isString(wh)){ return false; }
-	if(dojo.lang.isFunction(wh)){ return false; } // keeps out built-in ctors (Number, String, ...) which have length properties
-	if(dojo.lang.isArray(wh)){ return true; }
-	if(typeof wh != "undefined" && wh
-		&& dojo.lang.isNumber(wh.length) && isFinite(wh.length)){ return true; }
-	return false;
-}
-
-dojo.lang.isFunction = function(wh){
-	if(!wh){ return false; }
-	return (wh instanceof Function || typeof wh == "function");
-}
-
-dojo.lang.isString = function(wh){
-	return (wh instanceof String || typeof wh == "string");
-}
-
-dojo.lang.isAlien = function(wh){
-	if(!wh){ return false; }
-	return !dojo.lang.isFunction() && /\{\s*\[native code\]\s*\}/.test(String(wh));
-}
-
-dojo.lang.isBoolean = function(wh){
-	return (wh instanceof Boolean || typeof wh == "boolean");
-}
-
-/**
- * The following is***() functions are somewhat "unsafe". Fortunately,
- * there are workarounds the the language provides and are mentioned
- * in the WARNING messages.
- *
- * WARNING: In most cases, isNaN(wh) is sufficient to determine whether or not
- * something is a number or can be used as such. For example, a number or string
- * can be used interchangably when accessing array items (arr["1"] is the same as
- * arr[1]) and isNaN will return false for both values ("1" and 1). Should you
- * use isNumber("1"), that will return false, which is generally not too useful.
- * Also, isNumber(NaN) returns true, again, this isn't generally useful, but there
- * are corner cases (like when you want to make sure that two things are really
- * the same type of thing). That is really where isNumber "shines".
- *
- * RECOMMENDATION: Use isNaN(wh) when possible
- */
-dojo.lang.isNumber = function(wh){
-	return (wh instanceof Number || typeof wh == "number");
-}
-
-/**
- * WARNING: In some cases, isUndefined will not behave as you
- * might expect. If you do isUndefined(foo) and there is no earlier
- * reference to foo, an error will be thrown before isUndefined is
- * called. It behaves correctly if you scope yor object first, i.e.
- * isUndefined(foo.bar) where foo is an object and bar isn't a
- * property of the object.
- *
- * RECOMMENDATION: Use `typeof foo == "undefined"` when possible
- *
- * FIXME: Should isUndefined go away since it is error prone?
- */
-dojo.lang.isUndefined = function(wh){
-	return ((wh == undefined)&&(typeof wh == "undefined"));
-}
-
-// end Crockford functions
-
-dojo.provide("dojo.lang.extras");
-
-dojo.require("dojo.lang.common");
-
-/**
- * Sets a timeout in milliseconds to execute a function in a given context
- * with optional arguments.
- *
- * setTimeout (Object context, function func, number delay[, arg1[, ...]]);
- * setTimeout (function func, number delay[, arg1[, ...]]);
- */
-dojo.lang.setTimeout = function(func, delay){
-	var context = window, argsStart = 2;
-	if(!dojo.lang.isFunction(func)){
-		context = func;
-		func = delay;
-		delay = arguments[2];
-		argsStart++;
-	}
-
-	if(dojo.lang.isString(func)){
-		func = context[func];
-	}
-	
-	var args = [];
-	for (var i = argsStart; i < arguments.length; i++) {
-		args.push(arguments[i]);
-	}
-	return setTimeout(function () { func.apply(context, args); }, delay);
-}
-
-dojo.lang.getNameInObj = function(ns, item){
-	if(!ns){ ns = dj_global; }
-
-	for(var x in ns){
-		if(ns[x] === item){
-			return new String(x);
-		}
-	}
-	return null;
-}
-
-dojo.lang.shallowCopy = function(obj) {
-	var ret = {}, key;
-	for(key in obj) {
-		if(dojo.lang.isUndefined(ret[key])) {
-			ret[key] = obj[key];
-		}
-	}
-	return ret;
-}
-
-/**
- * Return the first argument that isn't undefined
- */
-dojo.lang.firstValued = function(/* ... */) {
-	for(var i = 0; i < arguments.length; i++) {
-		if(typeof arguments[i] != "undefined") {
-			return arguments[i];
-		}
-	}
-	return undefined;
-}
-
-/**
- * Get a value from a reference specified as a string descriptor,
- * (e.g. "A.B") in the given context.
- * 
- * getObjPathValue(String objpath [, Object context, Boolean create])
- *
- * If context is not specified, dj_global is used
- * If create is true, undefined objects in the path are created.
- */
-dojo.lang.getObjPathValue = function(objpath, context, create){
-	with(dojo.parseObjPath(objpath, context, create)){
-		return dojo.evalProp(prop, obj, create);
-	}
-}
-
-/**
- * Set a value on a reference specified as a string descriptor. 
- * (e.g. "A.B") in the given context.
- * 
- * setObjPathValue(String objpath, value [, Object context, Boolean create])
- *
- * If context is not specified, dj_global is used
- * If create is true, undefined objects in the path are created.
- */
-dojo.lang.setObjPathValue = function(objpath, value, context, create){
-	if(arguments.length < 4){
-		create = true;
-	}
-	with(dojo.parseObjPath(objpath, context, create)){
-		if(obj && (create || (prop in obj))){
-			obj[prop] = value;
-		}
-	}
-}
-
-dojo.provide("dojo.io.IO");
-dojo.require("dojo.string");
-dojo.require("dojo.lang.extras");
-
-/******************************************************************************
- *	Notes about dojo.io design:
- *	
- *	The dojo.io.* package has the unenviable task of making a lot of different
- *	types of I/O feel natural, despite a universal lack of good (or even
- *	reasonable!) I/O capability in the host environment. So lets pin this down
- *	a little bit further.
- *
- *	Rhino:
- *		perhaps the best situation anywhere. Access to Java classes allows you
- *		to do anything one might want in terms of I/O, both synchronously and
- *		async. Can open TCP sockets and perform low-latency client/server
- *		interactions. HTTP transport is available through Java HTTP client and
- *		server classes. Wish it were always this easy.
- *
- *	xpcshell:
- *		XPCOM for I/O. A cluster-fuck to be sure.
- *
- *	spidermonkey:
- *		S.O.L.
- *
- *	Browsers:
- *		Browsers generally do not provide any useable filesystem access. We are
- *		therefore limited to HTTP for moving information to and from Dojo
- *		instances living in a browser.
- *
- *		XMLHTTP:
- *			Sync or async, allows reading of arbitrary text files (including
- *			JS, which can then be eval()'d), writing requires server
- *			cooperation and is limited to HTTP mechanisms (POST and GET).
- *
- *		<iframe> hacks:
- *			iframe document hacks allow browsers to communicate asynchronously
- *			with a server via HTTP POST and GET operations. With significant
- *			effort and server cooperation, low-latency data transit between
- *			client and server can be acheived via iframe mechanisms (repubsub).
- *
- *		SVG:
- *			Adobe's SVG viewer implements helpful primitives for XML-based
- *			requests, but receipt of arbitrary text data seems unlikely w/o
- *			<![CDATA[]]> sections.
- *
- *
- *	A discussion between Dylan, Mark, Tom, and Alex helped to lay down a lot
- *	the IO API interface. A transcript of it can be found at:
- *		http://dojotoolkit.org/viewcvs/viewcvs.py/documents/irc/irc_io_api_log.txt?rev=307&view=auto
- *	
- *	Also referenced in the design of the API was the DOM 3 L&S spec:
- *		http://www.w3.org/TR/2004/REC-DOM-Level-3-LS-20040407/load-save.html
- ******************************************************************************/
-
-// a map of the available transport options. Transports should add themselves
-// by calling add(name)
-dojo.io.transports = [];
-dojo.io.hdlrFuncNames = [ "load", "error", "timeout" ]; // we're omitting a progress() event for now
-
-dojo.io.Request = function(url, mimetype, transport, changeUrl){
-	if((arguments.length == 1)&&(arguments[0].constructor == Object)){
-		this.fromKwArgs(arguments[0]);
-	}else{
-		this.url = url;
-		if(mimetype){ this.mimetype = mimetype; }
-		if(transport){ this.transport = transport; }
-		if(arguments.length >= 4){ this.changeUrl = changeUrl; }
-	}
-}
-
-dojo.lang.extend(dojo.io.Request, {
-
-	/** The URL to hit */
-	url: "",
-	
-	/** The mime type used to interrpret the response body */
-	mimetype: "text/plain",
-	
-	/** The HTTP method to use */
-	method: "GET",
-	
-	/** An Object containing key-value pairs to be included with the request */
-	content: undefined, // Object
-	
-	/** The transport medium to use */
-	transport: undefined, // String
-	
-	/** If defined the URL of the page is physically changed */
-	changeUrl: undefined, // String
-	
-	/** A form node to use in the request */
-	formNode: undefined, // HTMLFormElement
-	
-	/** Whether the request should be made synchronously */
-	sync: false,
-	
-	bindSuccess: false,
-
-	/** Cache/look for the request in the cache before attempting to request?
-	 *  NOTE: this isn't a browser cache, this is internal and would only cache in-page
-	 */
-	useCache: false,
-
-	/** Prevent the browser from caching this by adding a query string argument to the URL */
-	preventCache: false,
-	
-	// events stuff
-	load: function(type, data, evt){ },
-	error: function(type, error){ },
-	timeout: function(type){ },
-	handle: function(){ },
-
-	//FIXME: change BrowserIO.js to use timeouts? IframeIO?
-	// The number of seconds to wait until firing a timeout callback.
-	// If it is zero, that means, don't do a timeout check.
-	timeoutSeconds: 0,
-	
-	// the abort method needs to be filled in by the transport that accepts the
-	// bind() request
-	abort: function(){ },
-	
-	// backButton: function(){ },
-	// forwardButton: function(){ },
-
-	fromKwArgs: function(kwArgs){
-		// normalize args
-		if(kwArgs["url"]){ kwArgs.url = kwArgs.url.toString(); }
-		if(kwArgs["formNode"]) { kwArgs.formNode = dojo.byId(kwArgs.formNode); }
-		if(!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {
-			kwArgs.method = kwArgs["formNode"].method;
-		}
-		
-		// backwards compatibility
-		if(!kwArgs["handle"] && kwArgs["handler"]){ kwArgs.handle = kwArgs.handler; }
-		if(!kwArgs["load"] && kwArgs["loaded"]){ kwArgs.load = kwArgs.loaded; }
-		if(!kwArgs["changeUrl"] && kwArgs["changeURL"]) { kwArgs.changeUrl = kwArgs.changeURL; }
-
-		// encoding fun!
-		kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");
-
-		kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], false);
-
-		var isFunction = dojo.lang.isFunction;
-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
-			var fn = dojo.io.hdlrFuncNames[x];
-			if(isFunction(kwArgs[fn])){ continue; }
-			if(isFunction(kwArgs["handle"])){
-				kwArgs[fn] = kwArgs.handle;
-			}
-			// handler is aliased above, shouldn't need this check
-			/* else if(dojo.lang.isObject(kwArgs.handler)){
-				if(isFunction(kwArgs.handler[fn])){
-					kwArgs[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"]||function(){};
-				}
-			}*/
-		}
-		dojo.lang.mixin(this, kwArgs);
-	}
-
-});
-
-dojo.io.Error = function(msg, type, num){
-	this.message = msg;
-	this.type =  type || "unknown"; // must be one of "io", "parse", "unknown"
-	this.number = num || 0; // per-substrate error number, not normalized
-}
-
-dojo.io.transports.addTransport = function(name){
-	this.push(name);
-	// FIXME: do we need to handle things that aren't direct children of the
-	// dojo.io namespace? (say, dojo.io.foo.fooTransport?)
-	this[name] = dojo.io[name];
-}
-
-// binding interface, the various implementations register their capabilities
-// and the bind() method dispatches
-dojo.io.bind = function(request){
-	// if the request asks for a particular implementation, use it
-	if(!(request instanceof dojo.io.Request)){
-		try{
-			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
-	}
-	var tsName = "";
-	if(request["transport"]){
-		tsName = request["transport"];
-		// FIXME: it would be good to call the error handler, although we'd
-		// need to use setTimeout or similar to accomplish this and we can't
-		// garuntee that this facility is available.
-		if(!this[tsName]){ return request; }
-	}else{
-		// otherwise we do our best to auto-detect what available transports
-		// will handle 
-		for(var x=0; x<dojo.io.transports.length; x++){
-			var tmp = dojo.io.transports[x];
-			if((this[tmp])&&(this[tmp].canHandle(request))){
-				tsName = tmp;
-			}
-		}
-		if(tsName == ""){ return request; }
-	}
-	this[tsName].bind(request);
-	request.bindSuccess = true;
-	return request;
-}
-
-dojo.io.queueBind = function(request){
-	if(!(request instanceof dojo.io.Request)){
-		try{
-			request = new dojo.io.Request(request);
-		}catch(e){ dojo.debug(e); }
-	}
-
-	// make sure we get called if/when we get a response
-	var oldLoad = request.load;
-	request.load = function(){
-		dojo.io._queueBindInFlight = false;
-		var ret = oldLoad.apply(this, arguments);
-		dojo.io._dispatchNextQueueBind();
-		return ret;
-	}
-
-	var oldErr = request.error;
-	request.error = function(){
-		dojo.io._queueBindInFlight = false;
-		var ret = oldErr.apply(this, arguments);
-		dojo.io._dispatchNextQueueBind();
-		return ret;
-	}
-
-	dojo.io._bindQueue.push(request);
-	dojo.io._dispatchNextQueueBind();
-	return request;
-}
-
-dojo.io._dispatchNextQueueBind = function(){
-	if(!dojo.io._queueBindInFlight){
-		dojo.io._queueBindInFlight = true;
-		if(dojo.io._bindQueue.length > 0){
-			dojo.io.bind(dojo.io._bindQueue.shift());
-		}else{
-			dojo.io._queueBindInFlight = false;
-		}
-	}
-}
-dojo.io._bindQueue = [];
-dojo.io._queueBindInFlight = false;
-
-dojo.io.argsFromMap = function(map, encoding, last){
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
-	var mapped = [];
-	var control = new Object();
-	for(var name in map){
-		var domap = function(elt){
-			var val = enc(name)+"="+enc(elt);
-			mapped[(last == name) ? "push" : "unshift"](val);
-		}
-		if(!control[name]){
-			var value = map[name];
-			// FIXME: should be isArrayLike?
-			if (dojo.lang.isArray(value)){
-				dojo.lang.forEach(value, domap);
-			}else{
-				domap(value);
-			}
-		}
-	}
-	return mapped.join("&");
-}
-
-dojo.io.setIFrameSrc = function(iframe, src, replace){
-	try{
-		var r = dojo.render.html;
-		// dojo.debug(iframe);
-		if(!replace){
-			if(r.safari){
-				iframe.location = src;
-			}else{
-				frames[iframe.name].location = src;
-			}
-		}else{
-			// Fun with DOM 0 incompatibilities!
-			var idoc;
-			if(r.ie){
-				idoc = iframe.contentWindow.document;
-			}else if(r.safari){
-				idoc = iframe.document;
-			}else{ //  if(r.moz){
-				idoc = iframe.contentWindow;
-			}
-
-			//For Safari (at least 2.0.3) and Opera, if the iframe
-			//has just been created but it doesn't have content
-			//yet, then iframe.document may be null. In that case,
-			//use iframe.location and return.
-			if(!idoc){
-				iframe.location = src;
-				return;
-			}else{
-				idoc.location.replace(src);
-			}
-		}
-	}catch(e){ 
-		dojo.debug(e); 
-		dojo.debug("setIFrameSrc: "+e); 
-	}
-}
-
-/*
-dojo.io.sampleTranport = new function(){
-	this.canHandle = function(kwArgs){
-		// canHandle just tells dojo.io.bind() if this is a good transport to
-		// use for the particular type of request.
-		if(	
-			(
-				(kwArgs["mimetype"] == "text/plain") ||
-				(kwArgs["mimetype"] == "text/html") ||
-				(kwArgs["mimetype"] == "text/javascript")
-			)&&(
-				(kwArgs["method"] == "get") ||
-				( (kwArgs["method"] == "post") && (!kwArgs["formNode"]) )
-			)
-		){
-			return true;
-		}
-
-		return false;
-	}
-
-	this.bind = function(kwArgs){
-		var hdlrObj = {};
-
-		// set up a handler object
-		for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){
-			var fn = dojo.io.hdlrFuncNames[x];
-			if(typeof kwArgs.handler == "object"){
-				if(typeof kwArgs.handler[fn] == "function"){
-					hdlrObj[fn] = kwArgs.handler[fn]||kwArgs.handler["handle"];
-				}
-			}else if(typeof kwArgs[fn] == "function"){
-				hdlrObj[fn] = kwArgs[fn];
-			}else{
-				hdlrObj[fn] = kwArgs["handle"]||function(){};
-			}
-		}
-
-		// build a handler function that calls back to the handler obj
-		var hdlrFunc = function(evt){
-			if(evt.type == "onload"){
-				hdlrObj.load("load", evt.data, evt);
-			}else if(evt.type == "onerr"){
-				var errObj = new dojo.io.Error("sampleTransport Error: "+evt.msg);
-				hdlrObj.error("error", errObj);
-			}
-		}
-
-		// the sample transport would attach the hdlrFunc() when sending the
-		// request down the pipe at this point
-		var tgtURL = kwArgs.url+"?"+dojo.io.argsFromMap(kwArgs.content);
-		// sampleTransport.sendRequest(tgtURL, hdlrFunc);
-	}
-
-	dojo.io.transports.addTransport("sampleTranport");
-}
-*/
-
-dojo.provide("dojo.lang.array");
-
-dojo.require("dojo.lang.common");
-
-// FIXME: Is this worthless since you can do: if(name in obj)
-// is this the right place for this?
-dojo.lang.has = function(obj, name){
-	try{
-		return (typeof obj[name] != "undefined");
-	}catch(e){ return false; }
-}
-
-dojo.lang.isEmpty = function(obj) {
-	if(dojo.lang.isObject(obj)) {
-		var tmp = {};
-		var count = 0;
-		for(var x in obj){
-			if(obj[x] && (!tmp[x])){
-				count++;
-				break;
-			} 
-		}
-		return (count == 0);
-	} else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)) {
-		return obj.length == 0;
-	}
-}
-
-dojo.lang.map = function(arr, obj, unary_func){
-	var isString = dojo.lang.isString(arr);
-	if(isString){
-		arr = arr.split("");
-	}
-	if(dojo.lang.isFunction(obj)&&(!unary_func)){
-		unary_func = obj;
-		obj = dj_global;
-	}else if(dojo.lang.isFunction(obj) && unary_func){
-		// ff 1.5 compat
-		var tmpObj = obj;
-		obj = unary_func;
-		unary_func = tmpObj;
-	}
-	if(Array.map){
-	 	var outArr = Array.map(arr, unary_func, obj);
-	}else{
-		var outArr = [];
-		for(var i=0;i<arr.length;++i){
-			outArr.push(unary_func.call(obj, arr[i]));
-		}
-	}
-	if(isString) {
-		return outArr.join("");
-	} else {
-		return outArr;
-	}
-}
-
-// http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:forEach
-dojo.lang.forEach = function(anArray /* Array */, callback /* Function */, thisObject /* Object */){
-	if(dojo.lang.isString(anArray)){ 
-		anArray = anArray.split(""); 
-	}
-	if(Array.forEach){
-		Array.forEach(anArray, callback, thisObject);
-	}else{
-		// FIXME: there are several ways of handilng thisObject. Is dj_global always the default context?
-		if(!thisObject){
-			thisObject=dj_global;
-		}
-		for(var i=0,l=anArray.length; i<l; i++){ 
-			callback.call(thisObject, anArray[i], i, anArray);
-		}
-	}
-}
-
-dojo.lang._everyOrSome = function(every, arr, callback, thisObject){
-	if(dojo.lang.isString(arr)){ 
-		arr = arr.split(""); 
-	}
-	if(Array.every){
-		return Array[ (every) ? "every" : "some" ](arr, callback, thisObject);
-	}else{
-		if(!thisObject){
-			thisObject = dj_global;
-		}
-		for(var i=0,l=arr.length; i<l; i++){
-			var result = callback.call(thisObject, arr[i], i, arr);
-			if((every)&&(!result)){
-				return false;
-			}else if((!every)&&(result)){
-				return true;
-			}
-		}
-		return (every) ? true : false;
-	}
-}
-
-dojo.lang.every = function(arr, callback, thisObject){
-	return this._everyOrSome(true, arr, callback, thisObject);
-}
-
-dojo.lang.some = function(arr, callback, thisObject){
-	return this._everyOrSome(false, arr, callback, thisObject);
-}
-
-dojo.lang.filter = function(arr, callback, thisObject) {
-	var isString = dojo.lang.isString(arr);
-	if(isString) { arr = arr.split(""); }
-	if(Array.filter) {
-		var outArr = Array.filter(arr, callback, thisObject);
-	} else {
-		if(!thisObject) {
-			if(arguments.length >= 3) { dojo.raise("thisObject doesn't exist!"); }
-			thisObject = dj_global;
-		}
-
-		var outArr = [];
-		for(var i = 0; i < arr.length; i++) {
-			if(callback.call(thisObject, arr[i], i, arr)) {
-				outArr.push(arr[i]);
-			}
-		}
-	}
-	if(isString) {
-		return outArr.join("");
-	} else {
-		return outArr;
-	}
-}
-
-/**
- * Creates a 1-D array out of all the arguments passed,
- * unravelling any array-like objects in the process
- *
- * Ex:
- * unnest(1, 2, 3) ==> [1, 2, 3]
- * unnest(1, [2, [3], [[[4]]]]) ==> [1, 2, 3, 4]
- */
-dojo.lang.unnest = function(/* ... */) {
-	var out = [];
-	for(var i = 0; i < arguments.length; i++) {
-		if(dojo.lang.isArrayLike(arguments[i])) {
-			var add = dojo.lang.unnest.apply(this, arguments[i]);
-			out = out.concat(add);
-		} else {
-			out.push(arguments[i]);
-		}
-	}
-	return out;
-}
-
-/**
- * Converts an array-like object (i.e. arguments, DOMCollection)
- * to an array
-**/
-dojo.lang.toArray = function(arrayLike, startOffset) {
-	var array = [];
-	for(var i = startOffset||0; i < arrayLike.length; i++) {
-		array.push(arrayLike[i]);
-	}
-	return array;
-}
-
-dojo.provide("dojo.lang.func");
-
-dojo.require("dojo.lang.common");
-
-/**
- * Runs a function in a given scope (thisObject), can
- * also be used to preserve scope.
- *
- * hitch(foo, "bar"); // runs foo.bar() in the scope of foo
- * hitch(foo, myFunction); // runs myFunction in the scope of foo
- */
-dojo.lang.hitch = function(thisObject, method) {
-	if(dojo.lang.isString(method)) {
-		var fcn = thisObject[method];
-	} else {
-		var fcn = method;
-	}
-
-	return function() {
-		return fcn.apply(thisObject, arguments);
-	}
-}
-
-dojo.lang.anonCtr = 0;
-dojo.lang.anon = {};
-dojo.lang.nameAnonFunc = function(anonFuncPtr, namespaceObj, searchForNames){
-	var nso = (namespaceObj || dojo.lang.anon);
-	if( (searchForNames) ||
-		((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"] == true)) ){
-		for(var x in nso){
-			if(nso[x] === anonFuncPtr){
-				return x;
-			}
-		}
-	}
-	var ret = "__"+dojo.lang.anonCtr++;
-	while(typeof nso[ret] != "undefined"){
-		ret = "__"+dojo.lang.anonCtr++;
-	}
-	nso[ret] = anonFuncPtr;
-	return ret;
-}
-
-dojo.lang.forward = function(funcName){
-	// Returns a function that forwards a method call to this.func(...)
-	return function(){
-		return this[funcName].apply(this, arguments);
-	};
-}
-
-dojo.lang.curry = function(ns, func /* args ... */){
-	var outerArgs = [];
-	ns = ns||dj_global;
-	if(dojo.lang.isString(func)){
-		func = ns[func];
-	}
-	for(var x=2; x<arguments.length; x++){
-		outerArgs.push(arguments[x]);
-	}
-	// since the event system replaces the original function with a new
-	// join-point runner with an arity of 0, we check to see if it's left us
-	// any clues about the original arity in lieu of the function's actual
-	// length property
-	var ecount = (func["__preJoinArity"]||func.length) - outerArgs.length;
-	// borrowed from svend tofte
-	function gather(nextArgs, innerArgs, expected){
-		var texpected = expected;
-		var totalArgs = innerArgs.slice(0); // copy
-		for(var x=0; x<nextArgs.length; x++){
-			totalArgs.push(nextArgs[x]);
-		}
-		// check the list of provided nextArgs to see if it, plus the
-		// number of innerArgs already supplied, meets the total
-		// expected.
-		expected = expected-nextArgs.length;
-		if(expected<=0){
-			var res = func.apply(ns, totalArgs);
-			expected = texpected;
-			return res;
-		}else{
-			return function(){
-				return gather(arguments,// check to see if we've been run
-										// with enough args
-							totalArgs,	// a copy
-							expected);	// how many more do we need to run?;
-			}
-		}
-	}
-	return gather([], outerArgs, ecount);
-}
-
-dojo.lang.curryArguments = function(ns, func, args, offset){
-	var targs = [];
-	var x = offset||0;
-	for(x=offset; x<args.length; x++){
-		targs.push(args[x]); // ensure that it's an arr
-	}
-	return dojo.lang.curry.apply(dojo.lang, [ns, func].concat(targs));
-}
-
-dojo.lang.tryThese = function(){
-	for(var x=0; x<arguments.length; x++){
-		try{
-			if(typeof arguments[x] == "function"){
-				var ret = (arguments[x]());
-				if(ret){
-					return ret;
-				}
-			}
-		}catch(e){
-			dojo.debug(e);
-		}
-	}
-}
-
-dojo.lang.delayThese = function(farr, cb, delay, onend){
-	/**
-	 * alternate: (array funcArray, function callback, function onend)
-	 * alternate: (array funcArray, function callback)
-	 * alternate: (array funcArray)
-	 */
-	if(!farr.length){ 
-		if(typeof onend == "function"){
-			onend();
-		}
-		return;
-	}
-	if((typeof delay == "undefined")&&(typeof cb == "number")){
-		delay = cb;
-		cb = function(){};
-	}else if(!cb){
-		cb = function(){};
-		if(!delay){ delay = 0; }
-	}
-	setTimeout(function(){
-		(farr.shift())();
-		cb();
-		dojo.lang.delayThese(farr, cb, delay, onend);
-	}, delay);
-}
-
-dojo.provide("dojo.string.extras");
-
-dojo.require("dojo.string.common");
-dojo.require("dojo.lang");
-
-/**
- * Performs parameterized substitutions on a string.  For example,
- *   dojo.string.substituteParams("File '%{0}' is not found in directory '%{1}'.","foo.html","/temp");
- * returns
- *   "File 'foo.html' is not found in directory '/temp'."
- * 
- * @param template the original string template with %{values} to be replaced
- * @param hash name/value pairs (type object) to provide substitutions.  Alternatively, substitutions may be
- *  included as arguments 1..n to this function, corresponding to template parameters 0..n-1
- * @return the completed string. Throws an exception if any parameter is unmatched
- */
-//TODO: use ${} substitution syntax instead, like widgets do?
-dojo.string.substituteParams = function(template /*string */, hash /* object - optional or ... */) {
-	var map = (typeof hash == 'object') ? hash : dojo.lang.toArray(arguments, 1);
-
-	return template.replace(/\%\{(\w+)\}/g, function(match, key){
-		return map[key] || dojo.raise("Substitution not found: " + key);
-	});
-};
-
-/**
- * Parameterized string function
- * str - formatted string with %{values} to be replaces
- * pairs - object of name: "value" value pairs
- * killExtra - remove all remaining %{values} after pairs are inserted
- */
-dojo.string.paramString = function(str, pairs, killExtra) {
-	dojo.deprecated("dojo.string.paramString",
-		"use dojo.string.substituteParams instead", "0.4");
-
-	for(var name in pairs) {
-		var re = new RegExp("\\%\\{" + name + "\\}", "g");
-		str = str.replace(re, pairs[name]);
-	}
-
-	if(killExtra) { str = str.replace(/%\{([^\}\s]+)\}/g, ""); }
-	return str;
-}
-
-/** Uppercases the first letter of each word */
-dojo.string.capitalize = function (str) {
-	if (!dojo.lang.isString(str)) { return ""; }
-	if (arguments.length == 0) { str = this; }
-
-	var words = str.split(' ');
-	for(var i=0; i<words.length; i++){
-		words[i] = words[i].charAt(0).toUpperCase() + words[i].substring(1);
-	}
-	return words.join(" ");
-}
-
-/**
- * Return true if the entire string is whitespace characters
- */
-dojo.string.isBlank = function (str) {
-	if(!dojo.lang.isString(str)) { return true; }
-	return (dojo.string.trim(str).length == 0);
-}
-
-dojo.string.encodeAscii = function(str) {
-	if(!dojo.lang.isString(str)) { return str; }
-	var ret = "";
-	var value = escape(str);
-	var match, re = /%u([0-9A-F]{4})/i;
-	while((match = value.match(re))) {
-		var num = Number("0x"+match[1]);
-		var newVal = escape("&#" + num + ";");
-		ret += value.substring(0, match.index) + newVal;
-		value = value.substring(match.index+match[0].length);
-	}
-	ret += value.replace(/\+/g, "%2B");
-	return ret;
-}
-
-dojo.string.escape = function(type, str) {
-	var args = dojo.lang.toArray(arguments, 1);
-	switch(type.toLowerCase()) {
-		case "xml":
-		case "html":
-		case "xhtml":
-			return dojo.string.escapeXml.apply(this, args);
-		case "sql":
-			return dojo.string.escapeSql.apply(this, args);
-		case "regexp":
-		case "regex":
-			return dojo.string.escapeRegExp.apply(this, args);
-		case "javascript":
-		case "jscript":
-		case "js":
-			return dojo.string.escapeJavaScript.apply(this, args);
-		case "ascii":
-			// so it's encode, but it seems useful
-			return dojo.string.encodeAscii.apply(this, args);
-		default:
-			return str;
-	}
-}
-
-dojo.string.escapeXml = function(str, noSingleQuotes) {
-	str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;")
-		.replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
-	if(!noSingleQuotes) { str = str.replace(/'/gm, "&#39;"); }
-	return str;
-}
-
-dojo.string.escapeSql = function(str) {
-	return str.replace(/'/gm, "''");
-}
-
-dojo.string.escapeRegExp = function(str) {
-	return str.replace(/\\/gm, "\\\\").replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1");
-}
-
-dojo.string.escapeJavaScript = function(str) {
-	return str.replace(/(["'\f\b\n\t\r])/gm, "\\$1");
-}
-
-dojo.string.escapeString = function(str){ 
-	return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'
-		).replace(/[\f]/g, "\\f"
-		).replace(/[\b]/g, "\\b"
-		).replace(/[\n]/g, "\\n"
-		).replace(/[\t]/g, "\\t"
-		).replace(/[\r]/g, "\\r");
-}
-
-// TODO: make an HTML version
-dojo.string.summary = function(str, len) {
-	if(!len || str.length <= len) {
-		return str;
-	} else {
-		return str.substring(0, len).replace(/\.+$/, "") + "...";
-	}
-}
-
-/**
- * Returns true if 'str' ends with 'end'
- */
-dojo.string.endsWith = function(str, end, ignoreCase) {
-	if(ignoreCase) {
-		str = str.toLowerCase();
-		end = end.toLowerCase();
-	}
-	if((str.length - end.length) < 0){
-		return false;
-	}
-	return str.lastIndexOf(end) == str.length - end.length;
-}
-
-/**
- * Returns true if 'str' ends with any of the arguments[2 -> n]
- */
-dojo.string.endsWithAny = function(str /* , ... */) {
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.endsWith(str, arguments[i])) {
-			return true;
-		}
-	}
-	return false;
-}
-
-/**
- * Returns true if 'str' starts with 'start'
- */
-dojo.string.startsWith = function(str, start, ignoreCase) {
-	if(ignoreCase) {
-		str = str.toLowerCase();
-		start = start.toLowerCase();
-	}
-	return str.indexOf(start) == 0;
-}
-
-/**
- * Returns true if 'str' starts with any of the arguments[2 -> n]
- */
-dojo.string.startsWithAny = function(str /* , ... */) {
-	for(var i = 1; i < arguments.length; i++) {
-		if(dojo.string.startsWith(str, arguments[i])) {
-			return true;
-		}
-	}
-	return false;
-}
-
-/**
- * Returns true if 'str' contains any of the arguments 2 -> n
- */
-dojo.string.has = function(str /* , ... */) {
-	for(var i = 1; i < arguments.length; i++) {
-		if(str.indexOf(arguments[i]) > -1){
-			return true;
-		}
-	}
-	return false;
-}
-
-dojo.string.normalizeNewlines = function (text,newlineChar) {
-	if (newlineChar == "\n") {
-		text = text.replace(/\r\n/g, "\n");
-		text = text.replace(/\r/g, "\n");
-	} else if (newlineChar == "\r") {
-		text = text.replace(/\r\n/g, "\r");
-		text = text.replace(/\n/g, "\r");
-	} else {
-		text = text.replace(/([^\r])\n/g, "$1\r\n");
-		text = text.replace(/\r([^\n])/g, "\r\n$1");
-	}
-	return text;
-}
-
-dojo.string.splitEscaped = function (str,charac) {
-	var components = [];
-	for (var i = 0, prevcomma = 0; i < str.length; i++) {
-		if (str.charAt(i) == '\\') { i++; continue; }
-		if (str.charAt(i) == charac) {
-			components.push(str.substring(prevcomma, i));
-			prevcomma = i + 1;
-		}
-	}
-	components.push(str.substr(prevcomma));
-	return components;
-}
-
-dojo.provide("dojo.dom");
-dojo.require("dojo.lang.array");
-
-dojo.dom.ELEMENT_NODE                  = 1;
-dojo.dom.ATTRIBUTE_NODE                = 2;
-dojo.dom.TEXT_NODE                     = 3;
-dojo.dom.CDATA_SECTION_NODE            = 4;
-dojo.dom.ENTITY_REFERENCE_NODE         = 5;
-dojo.dom.ENTITY_NODE                   = 6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE   = 7;
-dojo.dom.COMMENT_NODE                  = 8;
-dojo.dom.DOCUMENT_NODE                 = 9;
-dojo.dom.DOCUMENT_TYPE_NODE            = 10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE        = 11;
-dojo.dom.NOTATION_NODE                 = 12;
-	
-dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml";
-
-/**
- *	comprehensive list of XML namespaces
-**/
-dojo.dom.xmlns = {
-	svg : "http://www.w3.org/2000/svg",
-	smil : "http://www.w3.org/2001/SMIL20/",
-	mml : "http://www.w3.org/1998/Math/MathML",
-	cml : "http://www.xml-cml.org",
-	xlink : "http://www.w3.org/1999/xlink",
-	xhtml : "http://www.w3.org/1999/xhtml",
-	xul : "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-	xbl : "http://www.mozilla.org/xbl",
-	fo : "http://www.w3.org/1999/XSL/Format",
-	xsl : "http://www.w3.org/1999/XSL/Transform",
-	xslt : "http://www.w3.org/1999/XSL/Transform",
-	xi : "http://www.w3.org/2001/XInclude",
-	xforms : "http://www.w3.org/2002/01/xforms",
-	saxon : "http://icl.com/saxon",
-	xalan : "http://xml.apache.org/xslt",
-	xsd : "http://www.w3.org/2001/XMLSchema",
-	dt: "http://www.w3.org/2001/XMLSchema-datatypes",
-	xsi : "http://www.w3.org/2001/XMLSchema-instance",
-	rdf : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
-	rdfs : "http://www.w3.org/2000/01/rdf-schema#",
-	dc : "http://purl.org/dc/elements/1.1/",
-	dcq: "http://purl.org/dc/qualifiers/1.0",
-	"soap-env" : "http://schemas.xmlsoap.org/soap/envelope/",
-	wsdl : "http://schemas.xmlsoap.org/wsdl/",
-	AdobeExtensions : "http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-};
-
-dojo.dom.isNode = function(wh){
-	if(typeof Element == "object") {
-		try {
-			return wh instanceof Element;
-		} catch(E) {}
-	} else {
-		// best-guess
-		return wh && !isNaN(wh.nodeType);
-	}
-}
-
-dojo.dom.getTagName = function(node){
-	dojo.deprecated("dojo.dom.getTagName", "use node.tagName instead", "0.4");
-
-	var tagName = node.tagName;
-	if(tagName.substr(0,5).toLowerCase()!="dojo:"){
-		
-		if(tagName.substr(0,4).toLowerCase()=="dojo"){
-			// FIXME: this assuumes tag names are always lower case
-			return "dojo:" + tagName.substring(4).toLowerCase();
-		}
-
-		// allow lower-casing
-		var djt = node.getAttribute("dojoType")||node.getAttribute("dojotype");
-		if(djt){
-			return "dojo:"+djt.toLowerCase();
-		}
-		
-		if((node.getAttributeNS)&&(node.getAttributeNS(this.dojoml,"type"))){
-			return "dojo:" + node.getAttributeNS(this.dojoml,"type").toLowerCase();
-		}
-		try{
-			// FIXME: IE really really doesn't like this, so we squelch
-			// errors for it
-			djt = node.getAttribute("dojo:type");
-		}catch(e){ /* FIXME: log? */ }
-		if(djt){
-			return "dojo:"+djt.toLowerCase();
-		}
-
-		if((!dj_global["djConfig"])||(!djConfig["ignoreClassNames"])){
-			// FIXME: should we make this optionally enabled via djConfig?
-			var classes = node.className||node.getAttribute("class");
-			// FIXME: following line, without check for existence of classes.indexOf
-			// breaks firefox 1.5's svg widgets
-			if((classes)&&(classes.indexOf)&&(classes.indexOf("dojo-") != -1)){
-				var aclasses = classes.split(" ");
-				for(var x=0; x<aclasses.length; x++){
-					if((aclasses[x].length>5)&&(aclasses[x].indexOf("dojo-")>=0)){
-						return "dojo:"+aclasses[x].substr(5).toLowerCase();
-					}
-				}
-			}
-		}
-
-	}
-	return tagName.toLowerCase();
-}
-
-dojo.dom.getUniqueId = function(){
-	do {
-		var id = "dj_unique_" + (++arguments.callee._idIncrement);
-	}while(document.getElementById(id));
-	return id;
-}
-dojo.dom.getUniqueId._idIncrement = 0;
-
-dojo.dom.firstElement = dojo.dom.getFirstChildElement = function(parentNode, tagName){
-	var node = parentNode.firstChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE){
-		node = node.nextSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.nextElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.lastElement = dojo.dom.getLastChildElement = function(parentNode, tagName){
-	var node = parentNode.lastChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE) {
-		node = node.previousSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.prevElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function(node, tagName){
-	if(!node) { return null; }
-	do {
-		node = node.nextSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.nextElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function(node, tagName){
-	if(!node) { return null; }
-	if(tagName) { tagName = tagName.toLowerCase(); }
-	do {
-		node = node.previousSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.prevElement(node, tagName);
-	}
-	return node;
-}
-
-// TODO: hmph
-/*this.forEachChildTag = function(node, unaryFunc) {
-	var child = this.getFirstChildTag(node);
-	while(child) {
-		if(unaryFunc(child) == "break") { break; }
-		child = this.getNextSiblingTag(child);
-	}
-}*/
-
-dojo.dom.moveChildren = function(srcNode, destNode, trim){
-	var count = 0;
-	if(trim) {
-		while(srcNode.hasChildNodes() &&
-			srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.firstChild);
-		}
-		while(srcNode.hasChildNodes() &&
-			srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.lastChild);
-		}
-	}
-	while(srcNode.hasChildNodes()){
-		destNode.appendChild(srcNode.firstChild);
-		count++;
-	}
-	return count;
-}
-
-dojo.dom.copyChildren = function(srcNode, destNode, trim){
-	var clonedNode = srcNode.cloneNode(true);
-	return this.moveChildren(clonedNode, destNode, trim);
-}
-
-dojo.dom.removeChildren = function(node){
-	var count = node.childNodes.length;
-	while(node.hasChildNodes()){ node.removeChild(node.firstChild); }
-	return count;
-}
-
-dojo.dom.replaceChildren = function(node, newChild){
-	// FIXME: what if newChild is an array-like object?
-	dojo.dom.removeChildren(node);
-	node.appendChild(newChild);
-}
-
-dojo.dom.removeNode = function(node){
-	if(node && node.parentNode){
-		// return a ref to the removed child
-		return node.parentNode.removeChild(node);
-	}
-}
-
-dojo.dom.getAncestors = function(node, filterFunction, returnFirstHit) {
-	var ancestors = [];
-	var isFunction = dojo.lang.isFunction(filterFunction);
-	while(node) {
-		if (!isFunction || filterFunction(node)) {
-			ancestors.push(node);
-		}
-		if (returnFirstHit && ancestors.length > 0) { return ancestors[0]; }
-		
-		node = node.parentNode;
-	}
-	if (returnFirstHit) { return null; }
-	return ancestors;
-}
-
-dojo.dom.getAncestorsByTag = function(node, tag, returnFirstHit) {
-	tag = tag.toLowerCase();
-	return dojo.dom.getAncestors(node, function(el){
-		return ((el.tagName)&&(el.tagName.toLowerCase() == tag));
-	}, returnFirstHit);
-}
-
-dojo.dom.getFirstAncestorByTag = function(node, tag) {
-	return dojo.dom.getAncestorsByTag(node, tag, true);
-}
-
-dojo.dom.isDescendantOf = function(node, ancestor, guaranteeDescendant){
-	// guaranteeDescendant allows us to be a "true" isDescendantOf function
-	if(guaranteeDescendant && node) { node = node.parentNode; }
-	while(node) {
-		if(node == ancestor){ return true; }
-		node = node.parentNode;
-	}
-	return false;
-}
-
-dojo.dom.innerXML = function(node){
-	if(node.innerXML){
-		return node.innerXML;
-	}else if (node.xml){
-		return node.xml;
-	}else if(typeof XMLSerializer != "undefined"){
-		return (new XMLSerializer()).serializeToString(node);
-	}
-}
-
-dojo.dom.createDocument = function(){
-	var doc = null;
-
-	if(!dj_undef("ActiveXObject")){
-		var prefixes = [ "MSXML2", "Microsoft", "MSXML", "MSXML3" ];
-		for(var i = 0; i<prefixes.length; i++){
-			try{
-				doc = new ActiveXObject(prefixes[i]+".XMLDOM");
-			}catch(e){ /* squelch */ };
-
-			if(doc){ break; }
-		}
-	}else if((document.implementation)&&
-		(document.implementation.createDocument)){
-		doc = document.implementation.createDocument("", "", null);
-	}
-	
-	return doc;
-}
-
-dojo.dom.createDocumentFromText = function(str, mimetype){
-	if(!mimetype){ mimetype = "text/xml"; }
-	if(!dj_undef("DOMParser")){
-		var parser = new DOMParser();
-		return parser.parseFromString(str, mimetype);
-	}else if(!dj_undef("ActiveXObject")){
-		var domDoc = dojo.dom.createDocument();
-		if(domDoc){
-			domDoc.async = false;
-			domDoc.loadXML(str);
-			return domDoc;
-		}else{
-			dojo.debug("toXml didn't work?");
-		}
-	/*
-	}else if((dojo.render.html.capable)&&(dojo.render.html.safari)){
-		// FIXME: this doesn't appear to work!
-		// from: http://web-graphics.com/mtarchive/001606.php
-		// var xml = '<?xml version="1.0"?>'+str;
-		var mtype = "text/xml";
-		var xml = '<?xml version="1.0"?>'+str;
-		var url = "data:"+mtype+";charset=utf-8,"+encodeURIComponent(xml);
-		var req = new XMLHttpRequest();
-		req.open("GET", url, false);
-		req.overrideMimeType(mtype);
-		req.send(null);
-		return req.responseXML;
-	*/
-	}else if(document.createElement){
-		// FIXME: this may change all tags to uppercase!
-		var tmp = document.createElement("xml");
-		tmp.innerHTML = str;
-		if(document.implementation && document.implementation.createDocument) {
-			var xmlDoc = document.implementation.createDocument("foo", "", null);
-			for(var i = 0; i < tmp.childNodes.length; i++) {
-				xmlDoc.importNode(tmp.childNodes.item(i), true);
-			}
-			return xmlDoc;
-		}
-		// FIXME: probably not a good idea to have to return an HTML fragment
-		// FIXME: the tmp.doc.firstChild is as tested from IE, so it may not
-		// work that way across the board
-		return ((tmp.document)&&
-			(tmp.document.firstChild ?  tmp.document.firstChild : tmp));
-	}
-	return null;
-}
-
-dojo.dom.prependChild = function(node, parent) {
-	if(parent.firstChild) {
-		parent.insertBefore(node, parent.firstChild);
-	} else {
-		parent.appendChild(node);
-	}
-	return true;
-}
-
-dojo.dom.insertBefore = function(node, ref, force){
-	if (force != true &&
-		(node === ref || node.nextSibling === ref)){ return false; }
-	var parent = ref.parentNode;
-	parent.insertBefore(node, ref);
-	return true;
-}
-
-dojo.dom.insertAfter = function(node, ref, force){
-	var pn = ref.parentNode;
-	if(ref == pn.lastChild){
-		if((force != true)&&(node === ref)){
-			return false;
-		}
-		pn.appendChild(node);
-	}else{
-		return this.insertBefore(node, ref.nextSibling, force);
-	}
-	return true;
-}
-
-dojo.dom.insertAtPosition = function(node, ref, position){
-	if((!node)||(!ref)||(!position)){ return false; }
-	switch(position.toLowerCase()){
-		case "before":
-			return dojo.dom.insertBefore(node, ref);
-		case "after":
-			return dojo.dom.insertAfter(node, ref);
-		case "first":
-			if(ref.firstChild){
-				return dojo.dom.insertBefore(node, ref.firstChild);
-			}else{
-				ref.appendChild(node);
-				return true;
-			}
-			break;
-		default: // aka: last
-			ref.appendChild(node);
-			return true;
-	}
-}
-
-dojo.dom.insertAtIndex = function(node, containingNode, insertionIndex){
-	var siblingNodes = containingNode.childNodes;
-
-	// if there aren't any kids yet, just add it to the beginning
-
-	if (!siblingNodes.length){
-		containingNode.appendChild(node);
-		return true;
-	}
-
-	// otherwise we need to walk the childNodes
-	// and find our spot
-
-	var after = null;
-
-	for(var i=0; i<siblingNodes.length; i++){
-
-		var sibling_index = siblingNodes.item(i)["getAttribute"] ? parseInt(siblingNodes.item(i).getAttribute("dojoinsertionindex")) : -1;
-
-		if (sibling_index < insertionIndex){
-			after = siblingNodes.item(i);
-		}
-	}
-
-	if (after){
-		// add it after the node in {after}
-
-		return dojo.dom.insertAfter(node, after);
-	}else{
-		// add it to the start
-
-		return dojo.dom.insertBefore(node, siblingNodes.item(0));
-	}
-}
-	
-/**
- * implementation of the DOM Level 3 attribute.
- * 
- * @param node The node to scan for text
- * @param text Optional, set the text to this value.
- */
-dojo.dom.textContent = function(node, text){
-	if (text) {
-		dojo.dom.replaceChildren(node, document.createTextNode(text));
-		return text;
-	} else {
-		var _result = "";
-		if (node == null) { return _result; }
-		for (var i = 0; i < node.childNodes.length; i++) {
-			switch (node.childNodes[i].nodeType) {
-				case 1: // ELEMENT_NODE
-				case 5: // ENTITY_REFERENCE_NODE
-					_result += dojo.dom.textContent(node.childNodes[i]);
-					break;
-				case 3: // TEXT_NODE
-				case 2: // ATTRIBUTE_NODE
-				case 4: // CDATA_SECTION_NODE
-					_result += node.childNodes[i].nodeValue;
-					break;
-				default:
-					break;
-			}
-		}
-		return _result;
-	}
-}
-
-dojo.dom.collectionToArray = function(collection){
-	dojo.deprecated("dojo.dom.collectionToArray", "use dojo.lang.toArray instead", "0.4");
-	return dojo.lang.toArray(collection);
-}
-
-dojo.dom.hasParent = function (node) {
-	return node && node.parentNode && dojo.dom.isNode(node.parentNode);
-}
-
-/**
- * Determines if node has any of the provided tag names and
- * returns the tag name that matches, empty string otherwise.
- *
- * Examples:
- *
- * myFooNode = <foo />
- * isTag(myFooNode, "foo"); // returns "foo"
- * isTag(myFooNode, "bar"); // returns ""
- * isTag(myFooNode, "FOO"); // returns ""
- * isTag(myFooNode, "hey", "foo", "bar"); // returns "foo"
-**/
-dojo.dom.isTag = function(node /* ... */) {
-	if(node && node.tagName) {
-		var arr = dojo.lang.toArray(arguments, 1);
-		return arr[ dojo.lang.find(node.tagName, arr) ] || "";
-	}
-	return "";
-}
-
-dojo.provide("dojo.undo.browser");
-dojo.require("dojo.io");
-
-try{
-	if((!djConfig["preventBackButtonFix"])&&(!dojo.hostenv.post_load_)){
-		document.write("<iframe style='border: 0px; width: 1px; height: 1px; position: absolute; bottom: 0px; right: 0px; visibility: visible;' name='djhistory' id='djhistory' src='"+(dojo.hostenv.getBaseScriptUri()+'iframe_history.html')+"'></iframe>");
-	}
-}catch(e){/* squelch */}
-
-if(dojo.render.html.opera){
-	dojo.debug("Opera is not supported with dojo.undo.browser, so back/forward detection will not work.");
-}
-
-/* NOTES:
- *  Safari 1.2: 
- *	back button "works" fine, however it's not possible to actually
- *	DETECT that you've moved backwards by inspecting window.location.
- *	Unless there is some other means of locating.
- *	FIXME: perhaps we can poll on history.length?
- *  Safari 2.0.3+ (and probably 1.3.2+):
- *	works fine, except when changeUrl is used. When changeUrl is used,
- *	Safari jumps all the way back to whatever page was shown before
- *	the page that uses dojo.undo.browser support.
- *  IE 5.5 SP2:
- *	back button behavior is macro. It does not move back to the
- *	previous hash value, but to the last full page load. This suggests
- *	that the iframe is the correct way to capture the back button in
- *	these cases.
- *	Don't test this page using local disk for MSIE. MSIE will not create 
- *	a history list for iframe_history.html if served from a file: URL. 
- *	The XML served back from the XHR tests will also not be properly 
- *	created if served from local disk. Serve the test pages from a web 
- *	server to test in that browser.
- *  IE 6.0:
- *	same behavior as IE 5.5 SP2
- * Firefox 1.0:
- *	the back button will return us to the previous hash on the same
- *	page, thereby not requiring an iframe hack, although we do then
- *	need to run a timer to detect inter-page movement.
- */
-dojo.undo.browser = {
-	initialHref: window.location.href,
-	initialHash: window.location.hash,
-
-	moveForward: false,
-	historyStack: [],
-	forwardStack: [],
-	historyIframe: null,
-	bookmarkAnchor: null,
-	locationTimer: null,
-
-	/**
-	 * setInitialState sets the state object and back callback for the very first page that is loaded.
-	 * It is recommended that you call this method as part of an event listener that is registered via
-	 * dojo.addOnLoad().
-	 */
-	setInitialState: function(args){
-		this.initialState = {"url": this.initialHref, "kwArgs": args, "urlHash": this.initialHash};
-	},
-
-	//FIXME: Would like to support arbitrary back/forward jumps. Have to rework iframeLoaded among other things.
-	//FIXME: is there a slight race condition in moz using change URL with the timer check and when
-	//       the hash gets set? I think I have seen a back/forward call in quick succession, but not consistent.
-	/**
-	 * addToHistory takes one argument, and it is an object that defines the following functions:
-	 * - To support getting back button notifications, the object argument should implement a
-	 *   function called either "back", "backButton", or "handle". The string "back" will be
-	 *   passed as the first and only argument to this callback.
-	 * - To support getting forward button notifications, the object argument should implement a
-	 *   function called either "forward", "forwardButton", or "handle". The string "forward" will be
-	 *   passed as the first and only argument to this callback.
-	 * - If you want the browser location string to change, define "changeUrl" on the object. If the
-	 *   value of "changeUrl" is true, then a unique number will be appended to the URL as a fragment
-	 *   identifier (http://some.domain.com/path#uniquenumber). If it is any other value that does
-	 *   not evaluate to false, that value will be used as the fragment identifier. For example,
-	 *   if changeUrl: 'page1', then the URL will look like: http://some.domain.com/path#page1
-	 *   
-	 * Full example:
-	 * 
-	 * dojo.undo.browser.addToHistory({
-	 *   back: function() { alert('back pressed'); },
-	 *   forward: function() { alert('forward pressed'); },
-	 *   changeUrl: true
-	 * });
-	 */
-	addToHistory: function(args){
-		var hash = null;
-		if(!this.historyIframe){
-			this.historyIframe = window.frames["djhistory"];
-		}
-		if(!this.bookmarkAnchor){
-			this.bookmarkAnchor = document.createElement("a");
-			(document.body||document.getElementsByTagName("body")[0]).appendChild(this.bookmarkAnchor);
-			this.bookmarkAnchor.style.display = "none";
-		}
-		if((!args["changeUrl"])||(dojo.render.html.ie)){
-			var url = dojo.hostenv.getBaseScriptUri()+"iframe_history.html?"+(new Date()).getTime();
-			this.moveForward = true;
-			dojo.io.setIFrameSrc(this.historyIframe, url, false);
-		}
-		if(args["changeUrl"]){
-			this.changingUrl = true;
-			hash = "#"+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime());
-			setTimeout("window.location.href = '"+hash+"'; dojo.undo.browser.changingUrl = false;", 1);
-			this.bookmarkAnchor.href = hash;
-			
-			if(dojo.render.html.ie){
-				var oldCB = args["back"]||args["backButton"]||args["handle"];
-
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tcb = function(handleName){
-					if(window.location.hash != ""){
-						setTimeout("window.location.href = '"+hash+"';", 1);
-					}
-					//Use apply to set "this" to args, and to try to avoid memory leaks.
-					oldCB.apply(this, [handleName]);
-				}
-		
-				//Set interceptor function in the right place.
-				if(args["back"]){
-					args.back = tcb;
-				}else if(args["backButton"]){
-					args.backButton = tcb;
-				}else if(args["handle"]){
-					args.handle = tcb;
-				}
-		
-				//If addToHistory is called, then that means we prune the
-				//forward stack -- the user went back, then wanted to
-				//start a new forward path.
-				this.forwardStack = []; 
-				var oldFW = args["forward"]||args["forwardButton"]||args["handle"];
-		
-				//The function takes handleName as a parameter, in case the
-				//callback we are overriding was "handle". In that case,
-				//we will need to pass the handle name to handle.
-				var tfw = function(handleName){
-					if(window.location.hash != ""){
-						window.location.href = hash;
-					}
-					if(oldFW){ // we might not actually have one
-						//Use apply to set "this" to args, and to try to avoid memory leaks.
-						oldFW.apply(this, [handleName]);
-					}
-				}
-
-				//Set interceptor function in the right place.
-				if(args["forward"]){
-					args.forward = tfw;
-				}else if(args["forwardButton"]){
-					args.forwardButton = tfw;
-				}else if(args["handle"]){
-					args.handle = tfw;
-				}
-
-			}else if(dojo.render.html.moz){
-				// start the timer
-				if(!this.locationTimer){
-					this.locationTimer = setInterval("dojo.undo.browser.checkLocation();", 200);
-				}
-			}
-		}
-
-		this.historyStack.push({"url": url, "kwArgs": args, "urlHash": hash});
-	},
-
-	checkLocation: function(){
-		if (!this.changingUrl){
-			var hsl = this.historyStack.length;
-
-			if((window.location.hash == this.initialHash||window.location.href == this.initialHref)&&(hsl == 1)){
-				// FIXME: could this ever be a forward button?
-				// we can't clear it because we still need to check for forwards. Ugg.
-				// clearInterval(this.locationTimer);
-				this.handleBackButton();
-				return;
-			}
-			// first check to see if we could have gone forward. We always halt on
-			// a no-hash item.
-			if(this.forwardStack.length > 0){
-				if(this.forwardStack[this.forwardStack.length-1].urlHash == window.location.hash){
-					this.handleForwardButton();
-					return;
-				}
-			}
-	
-			// ok, that didn't work, try someplace back in the history stack
-			if((hsl >= 2)&&(this.historyStack[hsl-2])){
-				if(this.historyStack[hsl-2].urlHash==window.location.hash){
-					this.handleBackButton();
-					return;
-				}
-			}
-		}
-	},
-
-	iframeLoaded: function(evt, ifrLoc){
-		if(!dojo.render.html.opera){
-			var query = this._getUrlQuery(ifrLoc.href);
-			if(query == null){ 
-				// alert("iframeLoaded");
-				// we hit the end of the history, so we should go back
-				if(this.historyStack.length == 1){
-					this.handleBackButton();
-				}
-				return;
-			}
-			if(this.moveForward){
-				// we were expecting it, so it's not either a forward or backward movement
-				this.moveForward = false;
-				return;
-			}
-	
-			//Check the back stack first, since it is more likely.
-			//Note that only one step back or forward is supported.
-			if(this.historyStack.length >= 2 && query == this._getUrlQuery(this.historyStack[this.historyStack.length-2].url)){
-				this.handleBackButton();
-			}
-			else if(this.forwardStack.length > 0 && query == this._getUrlQuery(this.forwardStack[this.forwardStack.length-1].url)){
-				this.handleForwardButton();
-			}
-		}
-	},
-
-	handleBackButton: function(){
-		//The "current" page is always at the top of the history stack.
-		var current = this.historyStack.pop();
-		if(!current){ return; }
-		var last = this.historyStack[this.historyStack.length-1];
-		if(!last && this.historyStack.length == 0){
-			last = this.initialState;
-		}
-		if (last){
-			if(last.kwArgs["back"]){
-				last.kwArgs["back"]();
-			}else if(last.kwArgs["backButton"]){
-				last.kwArgs["backButton"]();
-			}else if(last.kwArgs["handle"]){
-				last.kwArgs.handle("back");
-			}
-		}
-		this.forwardStack.push(current);
-	},
-
-	handleForwardButton: function(){
-		var last = this.forwardStack.pop();
-		if(!last){ return; }
-		if(last.kwArgs["forward"]){
-			last.kwArgs.forward();
-		}else if(last.kwArgs["forwardButton"]){
-			last.kwArgs.forwardButton();
-		}else if(last.kwArgs["handle"]){
-			last.kwArgs.handle("forward");
-		}
-		this.historyStack.push(last);
-	},
-
-	_getUrlQuery: function(url){
-		var segments = url.split("?");
-		if (segments.length < 2){
-			return null;
-		}
-		else{
-			return segments[1];
-		}
-	}
-}
-
-dojo.provide("dojo.io.BrowserIO");
-
-dojo.require("dojo.io");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.string.extras");
-dojo.require("dojo.dom");
-dojo.require("dojo.undo.browser");
-
-dojo.io.checkChildrenForFile = function(node){
-	var hasFile = false;
-	var inputs = node.getElementsByTagName("input");
-	dojo.lang.forEach(inputs, function(input){
-		if(hasFile){ return; }
-		if(input.getAttribute("type")=="file"){
-			hasFile = true;
-		}
-	});
-	return hasFile;
-}
-
-dojo.io.formHasFile = function(formNode){
-	return dojo.io.checkChildrenForFile(formNode);
-}
-
-dojo.io.updateNode = function(node, urlOrArgs){
-	node = dojo.byId(node);
-	var args = urlOrArgs;
-	if(dojo.lang.isString(urlOrArgs)){
-		args = { url: urlOrArgs };
-	}
-	args.mimetype = "text/html";
-	args.load = function(t, d, e){
-		while(node.firstChild){
-			if(dojo["event"]){
-				try{
-					dojo.event.browser.clean(node.firstChild);
-				}catch(e){}
-			}
-			node.removeChild(node.firstChild);
-		}
-		node.innerHTML = d;
-	};
-	dojo.io.bind(args);
-}
-
-dojo.io.formFilter = function(node) {
-	var type = (node.type||"").toLowerCase();
-	return !node.disabled && node.name
-		&& !dojo.lang.inArray(type, ["file", "submit", "image", "reset", "button"]);
-}
-
-// TODO: Move to htmlUtils
-dojo.io.encodeForm = function(formNode, encoding, formFilter){
-	if((!formNode)||(!formNode.tagName)||(!formNode.tagName.toLowerCase() == "form")){
-		dojo.raise("Attempted to encode a non-form element.");
-	}
-	if(!formFilter) { formFilter = dojo.io.formFilter; }
-	var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;
-	var values = [];
-
-	for(var i = 0; i < formNode.elements.length; i++){
-		var elm = formNode.elements[i];
-		if(!elm || elm.tagName.toLowerCase() == "fieldset" || !formFilter(elm)) { continue; }
-		var name = enc(elm.name);
-		var type = elm.type.toLowerCase();
-
-		if(type == "select-multiple"){
-			for(var j = 0; j < elm.options.length; j++){
-				if(elm.options[j].selected) {
-					values.push(name + "=" + enc(elm.options[j].value));
-				}
-			}
-		}else if(dojo.lang.inArray(type, ["radio", "checkbox"])){
-			if(elm.checked){
-				values.push(name + "=" + enc(elm.value));
-			}
-		}else{
-			values.push(name + "=" + enc(elm.value));
-		}
-	}
-
-	// now collect input type="image", which doesn't show up in the elements array
-	var inputs = formNode.getElementsByTagName("input");
-	for(var i = 0; i < inputs.length; i++) {
-		var input = inputs[i];
-		if(input.type.toLowerCase() == "image" && input.form == formNode
-			&& formFilter(input)) {
-			var name = enc(input.name);
-			values.push(name + "=" + enc(input.value));
-			values.push(name + ".x=0");
-			values.push(name + ".y=0");
-		}
-	}
-	return values.join("&") + "&";
-}
-
-dojo.io.FormBind = function(args) {
-	this.bindArgs = {};
-
-	if(args && args.formNode) {
-		this.init(args);
-	} else if(args) {
-		this.init({formNode: args});
-	}
-}
-dojo.lang.extend(dojo.io.FormBind, {
-	form: null,
-
-	bindArgs: null,
-
-	clickedButton: null,
-
-	init: function(args) {
-		var form = dojo.byId(args.formNode);
-
-		if(!form || !form.tagName || form.tagName.toLowerCase() != "form") {
-			throw new Error("FormBind: Couldn't apply, invalid form");
-		} else if(this.form == form) {
-			return;
-		} else if(this.form) {
-			throw new Error("FormBind: Already applied to a form");
-		}
-
-		dojo.lang.mixin(this.bindArgs, args);
-		this.form = form;
-
-		this.connect(form, "onsubmit", "submit");
-
-		for(var i = 0; i < form.elements.length; i++) {
-			var node = form.elements[i];
-			if(node && node.type && dojo.lang.inArray(node.type.toLowerCase(), ["submit", "button"])) {
-				this.connect(node, "onclick", "click");
-			}
-		}
-
-		var inputs = form.getElementsByTagName("input");
-		for(var i = 0; i < inputs.length; i++) {
-			var input = inputs[i];
-			if(input.type.toLowerCase() == "image" && input.form == form) {
-				this.connect(input, "onclick", "click");
-			}
-		}
-	},
-
-	onSubmit: function(form) {
-		return true;
-	},
-
-	submit: function(e) {
-		e.preventDefault();
-		if(this.onSubmit(this.form)) {
-			dojo.io.bind(dojo.lang.mixin(this.bindArgs, {
-				formFilter: dojo.lang.hitch(this, "formFilter")
-			}));
-		}
-	},
-
-	click: function(e) {
-		var node = e.currentTarget;
-		if(node.disabled) { return; }
-		this.clickedButton = node;
-	},
-
-	formFilter: function(node) {
-		var type = (node.type||"").toLowerCase();
-		var accept = false;
-		if(node.disabled || !node.name) {
-			accept = false;
-		} else if(dojo.lang.inArray(type, ["submit", "button", "image"])) {
-			if(!this.clickedButton) { this.clickedButton = node; }
-			accept = node == this.clickedButton;
-		} else {
-			accept = !dojo.lang.inArray(type, ["file", "submit", "reset", "button"]);
-		}
-		return accept;
-	},
-
-	// in case you don't have dojo.event.* pulled in
-	connect: function(srcObj, srcFcn, targetFcn) {
-		if(dojo.evalObjPath("dojo.event.connect")) {
-			dojo.event.connect(srcObj, srcFcn, this, targetFcn);
-		} else {
-			var fcn = dojo.lang.hitch(this, targetFcn);
-			srcObj[srcFcn] = function(e) {
-				if(!e) { e = window.event; }
-				if(!e.currentTarget) { e.currentTarget = e.srcElement; }
-				if(!e.preventDefault) { e.preventDefault = function() { window.event.returnValue = false; } }
-				fcn(e);
-			}
-		}
-	}
-});
-
-dojo.io.XMLHTTPTransport = new function(){
-	var _this = this;
-
-	var _cache = {}; // FIXME: make this public? do we even need to?
-	this.useCache = false; // if this is true, we'll cache unless kwArgs.useCache = false
-	this.preventCache = false; // if this is true, we'll always force GET requests to cache
-
-	// FIXME: Should this even be a function? or do we just hard code it in the next 2 functions?
-	function getCacheKey(url, query, method) {
-		return url + "|" + query + "|" + method.toLowerCase();
-	}
-
-	function addToCache(url, query, method, http) {
-		_cache[getCacheKey(url, query, method)] = http;
-	}
-
-	function getFromCache(url, query, method) {
-		return _cache[getCacheKey(url, query, method)];
-	}
-
-	this.clearCache = function() {
-		_cache = {};
-	}
-
-	// moved successful load stuff here
-	function doLoad(kwArgs, http, url, query, useCache) {
-		if(	((http.status>=200)&&(http.status<300))|| 	// allow any 2XX response code
-			(http.status==304)|| 						// get it out of the cache
-			(location.protocol=="file:" && (http.status==0 || http.status==undefined))||
-			(location.protocol=="chrome:" && (http.status==0 || http.status==undefined))
-		){
-			var ret;
-			if(kwArgs.method.toLowerCase() == "head"){
-				var headers = http.getAllResponseHeaders();
-				ret = {};
-				ret.toString = function(){ return headers; }
-				var values = headers.split(/[\r\n]+/g);
-				for(var i = 0; i < values.length; i++) {
-					var pair = values[i].match(/^([^:]+)\s*:\s*(.+)$/i);
-					if(pair) {
-						ret[pair[1]] = pair[2];
-					}
-				}
-			}else if(kwArgs.mimetype == "text/javascript"){
-				try{
-					ret = dj_eval(http.responseText);
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = null;
-				}
-			}else if(kwArgs.mimetype == "text/json"){
-				try{
-					ret = dj_eval("("+http.responseText+")");
-				}catch(e){
-					dojo.debug(e);
-					dojo.debug(http.responseText);
-					ret = false;
-				}
-			}else if((kwArgs.mimetype == "application/xml")||
-						(kwArgs.mimetype == "text/xml")){
-				ret = http.responseXML;
-				if(!ret || typeof ret == "string" || !http.getResponseHeader("Content-Type")) {
-					ret = dojo.dom.createDocumentFromText(http.responseText);
-				}
-			}else{
-				ret = http.responseText;
-			}
-
-			if(useCache){ // only cache successful responses
-				addToCache(url, query, kwArgs.method, http);
-			}
-			kwArgs[(typeof kwArgs.load == "function") ? "load" : "handle"]("load", ret, http, kwArgs);
-		}else{
-			var errObj = new dojo.io.Error("XMLHttpTransport Error: "+http.status+" "+http.statusText);
-			kwArgs[(typeof kwArgs.error == "function") ? "error" : "handle"]("error", errObj, http, kwArgs);
-		}
-	}
-
-	// set headers (note: Content-Type will get overriden if kwArgs.contentType is set)
-	function setHeaders(http, kwArgs){
-		if(kwArgs["headers"]) {
-			for(var header in kwArgs["headers"]) {
-				if(header.toLowerCase() == "content-type" && !kwArgs["contentType"]) {
-					kwArgs["contentType"] = kwArgs["headers"][header];
-				} else {
-					http.setRequestHeader(header, kwArgs["headers"][header]);
-				}
-			}
-		}
-	}
-
-	this.inFlight = [];
-	this.inFlightTimer = null;
-
-	this.startWatchingInFlight = function(){
-		if(!this.inFlightTimer){
-			this.inFlightTimer = setInterval("dojo.io.XMLHTTPTransport.watchInFlight();", 10);
-		}
-	}
-
-	this.watchInFlight = function(){
-		var now = null;
-		for(var x=this.inFlight.length-1; x>=0; x--){
-			var tif = this.inFlight[x];
-			if(!tif){ this.inFlight.splice(x, 1); continue; }
-			if(4==tif.http.readyState){
-				// remove it so we can clean refs
-				this.inFlight.splice(x, 1);
-				doLoad(tif.req, tif.http, tif.url, tif.query, tif.useCache);
-			}else if (tif.startTime){
-				//See if this is a timeout case.
-				if(!now){
-					now = (new Date()).getTime();
-				}
-				if(tif.startTime + (tif.req.timeoutSeconds * 1000) < now){
-					//Stop the request.
-					if(typeof tif.http.abort == "function"){
-						tif.http.abort();
-					}
-
-					// remove it so we can clean refs
-					this.inFlight.splice(x, 1);
-					tif.req[(typeof tif.req.timeout == "function") ? "timeout" : "handle"]("timeout", null, tif.http, tif.req);
-				}
-			}
-		}
-
-		if(this.inFlight.length == 0){
-			clearInterval(this.inFlightTimer);
-			this.inFlightTimer = null;
-		}
-	}
-
-	var hasXmlHttp = dojo.hostenv.getXmlhttpObject() ? true : false;
-	this.canHandle = function(kwArgs){
-		// canHandle just tells dojo.io.bind() if this is a good transport to
-		// use for the particular type of request.
-
-		// FIXME: we need to determine when form values need to be
-		// multi-part mime encoded and avoid using this transport for those
-		// requests.
-		return hasXmlHttp
-			&& dojo.lang.inArray((kwArgs["mimetype"].toLowerCase()||""), ["text/plain", "text/html", "application/xml", "text/xml", "text/javascript", "text/json"])
-			&& !( kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]) );
-	}
-
-	this.multipartBoundary = "45309FFF-BD65-4d50-99C9-36986896A96F";	// unique guid as a boundary value for multipart posts
-
-	this.bind = function(kwArgs){
-		if(!kwArgs["url"]){
-			// are we performing a history action?
-			if( !kwArgs["formNode"]
-				&& (kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"] || kwArgs["watchForURL"])
-				&& (!djConfig.preventBackButtonFix)) {
-        dojo.deprecated("Using dojo.io.XMLHTTPTransport.bind() to add to browser history without doing an IO request",
-        				"Use dojo.undo.browser.addToHistory() instead.", "0.4");
-				dojo.undo.browser.addToHistory(kwArgs);
-				return true;
-			}
-		}
-
-		// build this first for cache purposes
-		var url = kwArgs.url;
-		var query = "";
-		if(kwArgs["formNode"]){
-			var ta = kwArgs.formNode.getAttribute("action");
-			if((ta)&&(!kwArgs["url"])){ url = ta; }
-			var tp = kwArgs.formNode.getAttribute("method");
-			if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; }
-			query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);
-		}
-
-		if(url.indexOf("#") > -1) {
-			dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);
-			url = url.split("#")[0];
-		}
-
-		if(kwArgs["file"]){
-			// force post for file transfer
-			kwArgs.method = "post";
-		}
-
-		if(!kwArgs["method"]){
-			kwArgs.method = "get";
-		}
-
-		// guess the multipart value		
-		if(kwArgs.method.toLowerCase() == "get"){
-			// GET cannot use multipart
-			kwArgs.multipart = false;
-		}else{
-			if(kwArgs["file"]){
-				// enforce multipart when sending files
-				kwArgs.multipart = true;
-			}else if(!kwArgs["multipart"]){
-				// default 
-				kwArgs.multipart = false;
-			}
-		}
-
-		if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){
-			dojo.undo.browser.addToHistory(kwArgs);
-		}
-
-		var content = kwArgs["content"] || {};
-
-		if(kwArgs.sendTransport) {
-			content["dojo.transport"] = "xmlhttp";
-		}
-
-		do { // break-block
-			if(kwArgs.postContent){
-				query = kwArgs.postContent;
-				break;
-			}
-
-			if(content) {
-				query += dojo.io.argsFromMap(content, kwArgs.encoding);
-			}
-			
-			if(kwArgs.method.toLowerCase() == "get" || !kwArgs.multipart){
-				break;
-			}
-
-			var	t = [];
-			if(query.length){
-				var q = query.split("&");
-				for(var i = 0; i < q.length; ++i){
-					if(q[i].length){
-						var p = q[i].split("=");
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + p[0] + "\"", 
-								"",
-								p[1]);
-					}
-				}
-			}
-
-			if(kwArgs.file){
-				if(dojo.lang.isArray(kwArgs.file)){
-					for(var i = 0; i < kwArgs.file.length; ++i){
-						var o = kwArgs.file[i];
-						t.push(	"--" + this.multipartBoundary,
-								"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-								"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-								"",
-								o.content);
-					}
-				}else{
-					var o = kwArgs.file;
-					t.push(	"--" + this.multipartBoundary,
-							"Content-Disposition: form-data; name=\"" + o.name + "\"; filename=\"" + ("fileName" in o ? o.fileName : o.name) + "\"",
-							"Content-Type: " + ("contentType" in o ? o.contentType : "application/octet-stream"),
-							"",
-							o.content);
-				}
-			}
-
-			if(t.length){
-				t.push("--"+this.multipartBoundary+"--", "");
-				query = t.join("\r\n");
-			}
-		}while(false);
-
-		// kwArgs.Connection = "close";
-
-		var async = kwArgs["sync"] ? false : true;
-
-		var preventCache = kwArgs["preventCache"] ||
-			(this.preventCache == true && kwArgs["preventCache"] != false);
-		var useCache = kwArgs["useCache"] == true ||
-			(this.useCache == true && kwArgs["useCache"] != false );
-
-		// preventCache is browser-level (add query string junk), useCache
-		// is for the local cache. If we say preventCache, then don't attempt
-		// to look in the cache, but if useCache is true, we still want to cache
-		// the response
-		if(!preventCache && useCache){
-			var cachedHttp = getFromCache(url, query, kwArgs.method);
-			if(cachedHttp){
-				doLoad(kwArgs, cachedHttp, url, query, false);
-				return;
-			}
-		}
-
-		// much of this is from getText, but reproduced here because we need
-		// more flexibility
-		var http = dojo.hostenv.getXmlhttpObject(kwArgs);	
-		var received = false;
-
-		// build a handler function that calls back to the handler obj
-		if(async){
-			var startTime = 
-			// FIXME: setting up this callback handler leaks on IE!!!
-			this.inFlight.push({
-				"req":		kwArgs,
-				"http":		http,
-				"url":	 	url,
-				"query":	query,
-				"useCache":	useCache,
-				"startTime": kwArgs.timeoutSeconds ? (new Date()).getTime() : 0
-			});
-			this.startWatchingInFlight();
-		}
-
-		if(kwArgs.method.toLowerCase() == "post"){
-			// FIXME: need to hack in more flexible Content-Type setting here!
-			http.open("POST", url, async);
-			setHeaders(http, kwArgs);
-			http.setRequestHeader("Content-Type", kwArgs.multipart ? ("multipart/form-data; boundary=" + this.multipartBoundary) : 
-				(kwArgs.contentType || "application/x-www-form-urlencoded"));
-			try{
-				http.send(query);
-			}catch(e){
-				if(typeof http.abort == "function"){
-					http.abort();
-				}
-				doLoad(kwArgs, {status: 404}, url, query, useCache);
-			}
-		}else{
-			var tmpUrl = url;
-			if(query != "") {
-				tmpUrl += (tmpUrl.indexOf("?") > -1 ? "&" : "?") + query;
-			}
-			if(preventCache) {
-				tmpUrl += (dojo.string.endsWithAny(tmpUrl, "?", "&")
-					? "" : (tmpUrl.indexOf("?") > -1 ? "&" : "?")) + "dojo.preventCache=" + new Date().valueOf();
-			}
-			http.open(kwArgs.method.toUpperCase(), tmpUrl, async);
-			setHeaders(http, kwArgs);
-			try {
-				http.send(null);
-			}catch(e)	{
-				if(typeof http.abort == "function"){
-					http.abort();
-				}
-				doLoad(kwArgs, {status: 404}, url, query, useCache);
-			}
-		}
-
-		if( !async ) {
-			doLoad(kwArgs, http, url, query, useCache);
-		}
-
-		kwArgs.abort = function(){
-			return http.abort();
-		}
-
-		return;
-	}
-	dojo.io.transports.addTransport("XMLHTTPTransport");
-}
-
-dojo.provide("dojo.event");
-
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.func");
-
-dojo.event = new function(){
-	this.canTimeout = dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-
-	// FIXME: where should we put this method (not here!)?
-	function interpolateArgs(args, searchForNames){
-		var dl = dojo.lang;
-		var ao = {
-			srcObj: dj_global,
-			srcFunc: null,
-			adviceObj: dj_global,
-			adviceFunc: null,
-			aroundObj: null,
-			aroundFunc: null,
-			adviceType: (args.length>2) ? args[0] : "after",
-			precedence: "last",
-			once: false,
-			delay: null,
-			rate: 0,
-			adviceMsg: false
-		};
-
-		switch(args.length){
-			case 0: return;
-			case 1: return;
-			case 2:
-				ao.srcFunc = args[0];
-				ao.adviceFunc = args[1];
-				break;
-			case 3:
-				if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					var tmpName  = dl.nameAnonFunc(args[2], ao.adviceObj, searchForNames);
-					ao.adviceFunc = tmpName;
-				}else if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[0], ao.srcObj, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[1];
-					ao.adviceFunc = args[2];
-				}
-				break;
-			case 4:
-				if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-					// we can assume that we've got an old-style "connect" from
-					// the sigslot school of event attachment. We therefore
-					// assume after-advice.
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[1], dj_global, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					var tmpName  = dl.nameAnonFunc(args[3], dj_global, searchForNames);
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = tmpName;
-				}else if(dl.isObject(args[1])){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = args[3];
-				}else if(dl.isObject(args[2])){
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else{
-					ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-					ao.aroundFunc = args[3];
-				}
-				break;
-			case 6:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundFunc = args[5];
-				ao.aroundObj = dj_global;
-				break;
-			default:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundObj = args[5];
-				ao.aroundFunc = args[6];
-				ao.once = args[7];
-				ao.delay = args[8];
-				ao.rate = args[9];
-				ao.adviceMsg = args[10];
-				break;
-		}
-
-		if(dl.isFunction(ao.aroundFunc)){
-			var tmpName  = dl.nameAnonFunc(ao.aroundFunc, ao.aroundObj, searchForNames);
-			ao.aroundFunc = tmpName;
-		}
-
-		if(dl.isFunction(ao.srcFunc)){
-			ao.srcFunc = dl.getNameInObj(ao.srcObj, ao.srcFunc);
-		}
-
-		if(dl.isFunction(ao.adviceFunc)){
-			ao.adviceFunc = dl.getNameInObj(ao.adviceObj, ao.adviceFunc);
-		}
-
-		if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-			ao.aroundFunc = dl.getNameInObj(ao.aroundObj, ao.aroundFunc);
-		}
-
-		if(!ao.srcObj){
-			dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-		}
-		if(!ao.adviceObj){
-			dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-		}
-		return ao;
-	}
-
-	this.connect = function(){
-		if(arguments.length == 1){
-			var ao = arguments[0];
-		}else{
-			var ao = interpolateArgs(arguments, true);
-		}
-
-		if(dojo.lang.isArray(ao.srcObj) && ao.srcObj!=""){
-			var tmpAO = {};
-			for(var x in ao){
-				tmpAO[x] = ao[x];
-			}
-			var mjps = [];
-			dojo.lang.forEach(ao.srcObj, function(src){
-				if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-					src = dojo.byId(src);
-					// dojo.debug(src);
-				}
-				tmpAO.srcObj = src;
-				// dojo.debug(tmpAO.srcObj, tmpAO.srcFunc);
-				// dojo.debug(tmpAO.adviceObj, tmpAO.adviceFunc);
-				mjps.push(dojo.event.connect.call(dojo.event, tmpAO));
-			});
-			return mjps;
-		}
-
-		// FIXME: just doing a "getForMethod()" seems to be enough to put this into infinite recursion!!
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		if(ao.adviceFunc){
-			var mjp2 = dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj, ao.adviceFunc);
-		}
-
-		mjp.kwAddAdvice(ao);
-
-		return mjp;	// advanced users might want to fsck w/ the join point
-					// manually
-	}
-
-	this.log = function(a1, a2){
-		var kwArgs;
-		if((arguments.length == 1)&&(typeof a1 == "object")){
-			kwArgs = a1;
-		}else{
-			kwArgs = {
-				srcObj: a1,
-				srcFunc: a2
-			};
-		}
-		kwArgs.adviceFunc = function(){
-			var argsStr = [];
-			for(var x=0; x<arguments.length; x++){
-				argsStr.push(arguments[x]);
-			}
-			dojo.debug("("+kwArgs.srcObj+")."+kwArgs.srcFunc, ":", argsStr.join(", "));
-		}
-		this.kwConnect(kwArgs);
-	}
-
-	this.connectBefore = function(){
-		var args = ["before"];
-		for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }
-		return this.connect.apply(this, args);
-	}
-
-	this.connectAround = function(){
-		var args = ["around"];
-		for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }
-		return this.connect.apply(this, args);
-	}
-
-	this.connectOnce = function(){
-		var ao = interpolateArgs(arguments, true);
-		ao.once = true;
-		return this.connect(ao);
-	}
-
-	this._kwConnectImpl = function(kwArgs, disconnect){
-		var fn = (disconnect) ? "disconnect" : "connect";
-		if(typeof kwArgs["srcFunc"] == "function"){
-			kwArgs.srcObj = kwArgs["srcObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj, true);
-			kwArgs.srcFunc = tmpName;
-		}
-		if(typeof kwArgs["adviceFunc"] == "function"){
-			kwArgs.adviceObj = kwArgs["adviceObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj, true);
-			kwArgs.adviceFunc = tmpName;
-		}
-		return dojo.event[fn](	(kwArgs["type"]||kwArgs["adviceType"]||"after"),
-									kwArgs["srcObj"]||dj_global,
-									kwArgs["srcFunc"],
-									kwArgs["adviceObj"]||kwArgs["targetObj"]||dj_global,
-									kwArgs["adviceFunc"]||kwArgs["targetFunc"],
-									kwArgs["aroundObj"],
-									kwArgs["aroundFunc"],
-									kwArgs["once"],
-									kwArgs["delay"],
-									kwArgs["rate"],
-									kwArgs["adviceMsg"]||false );
-	}
-
-	this.kwConnect = function(kwArgs){
-		return this._kwConnectImpl(kwArgs, false);
-
-	}
-
-	this.disconnect = function(){
-		var ao = interpolateArgs(arguments, true);
-		if(!ao.adviceFunc){ return; } // nothing to disconnect
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		return mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once);
-	}
-
-	this.kwDisconnect = function(kwArgs){
-		return this._kwConnectImpl(kwArgs, true);
-	}
-}
-
-// exactly one of these is created whenever a method with a joint point is run,
-// if there is at least one 'around' advice.
-dojo.event.MethodInvocation = function(join_point, obj, args) {
-	this.jp_ = join_point;
-	this.object = obj;
-	this.args = [];
-	for(var x=0; x<args.length; x++){
-		this.args[x] = args[x];
-	}
-	// the index of the 'around' that is currently being executed.
-	this.around_index = -1;
-}
-
-dojo.event.MethodInvocation.prototype.proceed = function() {
-	this.around_index++;
-	if(this.around_index >= this.jp_.around.length){
-		return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
-		// return this.jp_.run_before_after(this.object, this.args);
-	}else{
-		var ti = this.jp_.around[this.around_index];
-		var mobj = ti[0]||dj_global;
-		var meth = ti[1];
-		return mobj[meth].call(mobj, this);
-	}
-} 
-
-
-dojo.event.MethodJoinPoint = function(obj, methname){
-	this.object = obj||dj_global;
-	this.methodname = methname;
-	this.methodfunc = this.object[methname];
-	this.before = [];
-	this.after = [];
-	this.around = [];
-}
-
-dojo.event.MethodJoinPoint.getForMethod = function(obj, methname) {
-	// if(!(methname in obj)){
-	if(!obj){ obj = dj_global; }
-	if(!obj[methname]){
-		// supply a do-nothing method implementation
-		obj[methname] = function(){};
-		if(!obj[methname]){
-			// e.g. cannot add to inbuilt objects in IE6
-			dojo.raise("Cannot set do-nothing method on that object "+methname);
-		}
-	}else if((!dojo.lang.isFunction(obj[methname]))&&(!dojo.lang.isAlien(obj[methname]))){
-		return null; // FIXME: should we throw an exception here instead?
-	}
-	// we hide our joinpoint instance in obj[methname + '$joinpoint']
-	var jpname = methname + "$joinpoint";
-	var jpfuncname = methname + "$joinpoint$method";
-	var joinpoint = obj[jpname];
-	if(!joinpoint){
-		var isNode = false;
-		if(dojo.event["browser"]){
-			if( (obj["attachEvent"])||
-				(obj["nodeType"])||
-				(obj["addEventListener"]) ){
-				isNode = true;
-				dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, methname]);
-			}
-		}
-		var origArity = obj[methname].length;
-		obj[jpfuncname] = obj[methname];
-		// joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, methname);
-		joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
-		obj[methname] = function(){ 
-			var args = [];
-
-			if((isNode)&&(!arguments.length)){
-				var evt = null;
-				try{
-					if(obj.ownerDocument){
-						evt = obj.ownerDocument.parentWindow.event;
-					}else if(obj.documentElement){
-						evt = obj.documentElement.ownerDocument.parentWindow.event;
-					}else{
-						evt = window.event;
-					}
-				}catch(e){
-					evt = window.event;
-				}
-
-				if(evt){
-					args.push(dojo.event.browser.fixEvent(evt, this));
-				}
-			}else{
-				for(var x=0; x<arguments.length; x++){
-					if((x==0)&&(isNode)&&(dojo.event.browser.isEvent(arguments[x]))){
-						args.push(dojo.event.browser.fixEvent(arguments[x], this));
-					}else{
-						args.push(arguments[x]);
-					}
-				}
-			}
-			// return joinpoint.run.apply(joinpoint, arguments); 
-			return joinpoint.run.apply(joinpoint, args); 
-		}
-		obj[methname].__preJoinArity = origArity;
-	}
-	return joinpoint;
-}
-
-dojo.lang.extend(dojo.event.MethodJoinPoint, {
-	unintercept: function(){
-		this.object[this.methodname] = this.methodfunc;
-		this.before = [];
-		this.after = [];
-		this.around = [];
-	},
-
-	disconnect: dojo.lang.forward("unintercept"),
-
-	run: function() {
-		var obj = this.object||dj_global;
-		var args = arguments;
-
-		// optimization. We only compute once the array version of the arguments
-		// pseudo-arr in order to prevent building it each time advice is unrolled.
-		var aargs = [];
-		for(var x=0; x<args.length; x++){
-			aargs[x] = args[x];
-		}
-
-		var unrollAdvice  = function(marr){ 
-			if(!marr){
-				dojo.debug("Null argument to unrollAdvice()");
-				return;
-			}
-		  
-			var callObj = marr[0]||dj_global;
-			var callFunc = marr[1];
-			
-			if(!callObj[callFunc]){
-				dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
-			}
-			
-			var aroundObj = marr[2]||dj_global;
-			var aroundFunc = marr[3];
-			var msg = marr[6];
-			var undef;
-
-			var to = {
-				args: [],
-				jp_: this,
-				object: obj,
-				proceed: function(){
-					return callObj[callFunc].apply(callObj, to.args);
-				}
-			};
-			to.args = aargs;
-
-			var delay = parseInt(marr[4]);
-			var hasDelay = ((!isNaN(delay))&&(marr[4]!==null)&&(typeof marr[4] != "undefined"));
-			if(marr[5]){
-				var rate = parseInt(marr[5]);
-				var cur = new Date();
-				var timerSet = false;
-				if((marr["last"])&&((cur-marr.last)<=rate)){
-					if(dojo.event.canTimeout){
-						if(marr["delayTimer"]){
-							clearTimeout(marr.delayTimer);
-						}
-						var tod = parseInt(rate*2); // is rate*2 naive?
-						var mcpy = dojo.lang.shallowCopy(marr);
-						marr.delayTimer = setTimeout(function(){
-							// FIXME: on IE at least, event objects from the
-							// browser can go out of scope. How (or should?) we
-							// deal with it?
-							mcpy[5] = 0;
-							unrollAdvice(mcpy);
-						}, tod);
-					}
-					return;
-				}else{
-					marr.last = cur;
-				}
-			}
-
-			// FIXME: need to enforce rates for a connection here!
-
-			if(aroundFunc){
-				// NOTE: around advice can't delay since we might otherwise depend
-				// on execution order!
-				aroundObj[aroundFunc].call(aroundObj, to);
-			}else{
-				// var tmjp = dojo.event.MethodJoinPoint.getForMethod(obj, methname);
-				if((hasDelay)&&((dojo.render.html)||(dojo.render.svg))){  // FIXME: the render checks are grotty!
-					dj_global["setTimeout"](function(){
-						if(msg){
-							callObj[callFunc].call(callObj, to); 
-						}else{
-							callObj[callFunc].apply(callObj, args); 
-						}
-					}, delay);
-				}else{ // many environments can't support delay!
-					if(msg){
-						callObj[callFunc].call(callObj, to); 
-					}else{
-						callObj[callFunc].apply(callObj, args); 
-					}
-				}
-			}
-		}
-
-		if(this.before.length>0){
-			dojo.lang.forEach(this.before, unrollAdvice);
-		}
-
-		var result;
-		if(this.around.length>0){
-			var mi = new dojo.event.MethodInvocation(this, obj, args);
-			result = mi.proceed();
-		}else if(this.methodfunc){
-			result = this.object[this.methodname].apply(this.object, args);
-		}
-
-		if(this.after.length>0){
-			dojo.lang.forEach(this.after, unrollAdvice);
-		}
-
-		return (this.methodfunc) ? result : null;
-	},
-
-	getArr: function(kind){
-		var arr = this.after;
-		// FIXME: we should be able to do this through props or Array.in()
-		if((typeof kind == "string")&&(kind.indexOf("before")!=-1)){
-			arr = this.before;
-		}else if(kind=="around"){
-			arr = this.around;
-		}
-		return arr;
-	},
-
-	kwAddAdvice: function(args){
-		this.addAdvice(	args["adviceObj"], args["adviceFunc"], 
-						args["aroundObj"], args["aroundFunc"], 
-						args["adviceType"], args["precedence"], 
-						args["once"], args["delay"], args["rate"], 
-						args["adviceMsg"]);
-	},
-
-	addAdvice: function(	thisAdviceObj, thisAdvice, 
-							thisAroundObj, thisAround, 
-							advice_kind, precedence, 
-							once, delay, rate, asMessage){
-		var arr = this.getArr(advice_kind);
-		if(!arr){
-			dojo.raise("bad this: " + this);
-		}
-
-		var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage];
-		
-		if(once){
-			if(this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr) >= 0){
-				return;
-			}
-		}
-
-		if(precedence == "first"){
-			arr.unshift(ao);
-		}else{
-			arr.push(ao);
-		}
-	},
-
-	hasAdvice: function(thisAdviceObj, thisAdvice, advice_kind, arr){
-		if(!arr){ arr = this.getArr(advice_kind); }
-		var ind = -1;
-		for(var x=0; x<arr.length; x++){
-			var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
-			var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
-			if((arr[x][0] == thisAdviceObj)&&(a1o == aao)){
-				ind = x;
-			}
-		}
-		return ind;
-	},
-
-	removeAdvice: function(thisAdviceObj, thisAdvice, advice_kind, once){
-		var arr = this.getArr(advice_kind);
-		var ind = this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr);
-		if(ind == -1){
-			return false;
-		}
-		while(ind != -1){
-			arr.splice(ind, 1);
-			if(once){ break; }
-			ind = this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr);
-		}
-		return true;
-	}
-});
-
-dojo.require("dojo.event");
-dojo.provide("dojo.event.topic");
-
-dojo.event.topic = new function(){
-	this.topics = {};
-
-	this.getTopic = function(topicName){
-		if(!this.topics[topicName]){
-			this.topics[topicName] = new this.TopicImpl(topicName);
-		}
-		return this.topics[topicName];
-	}
-
-	this.registerPublisher = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.registerPublisher(obj, funcName);
-	}
-
-	this.subscribe = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.subscribe(obj, funcName);
-	}
-
-	this.unsubscribe = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.unsubscribe(obj, funcName);
-	}
-
-	this.destroy = function(topic){
-		this.getTopic(topic).destroy();
-		delete this.topics[topic];
-	}
-
-	this.publishApply = function(topic, args){
-		var topic = this.getTopic(topic);
-		topic.sendMessage.apply(topic, args);
-	}
-
-	this.publish = function(topic, message){
-		var topic = this.getTopic(topic);
-		// if message is an array, we treat it as a set of arguments,
-		// otherwise, we just pass on the arguments passed in as-is
-		var args = [];
-		// could we use concat instead here?
-		for(var x=1; x<arguments.length; x++){
-			args.push(arguments[x]);
-		}
-		topic.sendMessage.apply(topic, args);
-	}
-}
-
-dojo.event.topic.TopicImpl = function(topicName){
-	this.topicName = topicName;
-
-	this.subscribe = function(listenerObject, listenerMethod){
-		var tf = listenerMethod||listenerObject;
-		var to = (!listenerMethod) ? dj_global : listenerObject;
-		dojo.event.kwConnect({
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this.unsubscribe = function(listenerObject, listenerMethod){
-		var tf = (!listenerMethod) ? listenerObject : listenerMethod;
-		var to = (!listenerMethod) ? null : listenerObject;
-		dojo.event.kwDisconnect({
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this.destroy = function(){
-		dojo.event.MethodJoinPoint.getForMethod(this, "sendMessage").disconnect();
-	}
-
-	this.registerPublisher = function(publisherObject, publisherMethod){
-		dojo.event.connect(publisherObject, publisherMethod, this, "sendMessage");
-	}
-
-	this.sendMessage = function(message){
-		// The message has been propagated
-	}
-}
-
-
-dojo.provide("dojo.event.browser");
-dojo.require("dojo.event");
-
-// FIXME: any particular reason this is in the global scope?
-dojo._ie_clobber = new function(){
-	this.clobberNodes = [];
-
-	function nukeProp(node, prop){
-		// try{ node.removeAttribute(prop); 	}catch(e){ /* squelch */ }
-		try{ node[prop] = null; 			}catch(e){ /* squelch */ }
-		try{ delete node[prop]; 			}catch(e){ /* squelch */ }
-		// FIXME: JotLive needs this, but I'm not sure if it's too slow or not
-		try{ node.removeAttribute(prop);	}catch(e){ /* squelch */ }
-	}
-
-	this.clobber = function(nodeRef){
-		var na;
-		var tna;
-		if(nodeRef){
-			tna = nodeRef.all || nodeRef.getElementsByTagName("*");
-			na = [nodeRef];
-			for(var x=0; x<tna.length; x++){
-				// if we're gonna be clobbering the thing, at least make sure
-				// we aren't trying to do it twice
-				if(tna[x]["__doClobber__"]){
-					na.push(tna[x]);
-				}
-			}
-		}else{
-			try{ window.onload = null; }catch(e){}
-			na = (this.clobberNodes.length) ? this.clobberNodes : document.all;
-		}
-		tna = null;
-		var basis = {};
-		for(var i = na.length-1; i>=0; i=i-1){
-			var el = na[i];
-			if(el["__clobberAttrs__"]){
-				for(var j=0; j<el.__clobberAttrs__.length; j++){
-					nukeProp(el, el.__clobberAttrs__[j]);
-				}
-				nukeProp(el, "__clobberAttrs__");
-				nukeProp(el, "__doClobber__");
-			}
-		}
-		na = null;
-	}
-}
-
-if(dojo.render.html.ie){
-	dojo.addOnUnload(function(){
-		dojo._ie_clobber.clobber();
-		try{
-			if((dojo["widget"])&&(dojo.widget["manager"])){
-				dojo.widget.manager.destroyAll();
-			}
-		}catch(e){}
-		try{ window.onload = null; }catch(e){}
-		try{ window.onunload = null; }catch(e){}
-		dojo._ie_clobber.clobberNodes = [];
-		// CollectGarbage();
-	});
-}
-
-dojo.event.browser = new function(){
-
-	var clobberIdx = 0;
-
-	this.clean = function(node){
-		if(dojo.render.html.ie){ 
-			dojo._ie_clobber.clobber(node);
-		}
-	}
-
-	this.addClobberNode = function(node){
-		if(!dojo.render.html.ie){ return; }
-		if(!node["__doClobber__"]){
-			node.__doClobber__ = true;
-			dojo._ie_clobber.clobberNodes.push(node);
-			// this might not be the most efficient thing to do, but it's
-			// much less error prone than other approaches which were
-			// previously tried and failed
-			node.__clobberAttrs__ = [];
-		}
-	}
-
-	this.addClobberNodeAttrs = function(node, props){
-		if(!dojo.render.html.ie){ return; }
-		this.addClobberNode(node);
-		for(var x=0; x<props.length; x++){
-			node.__clobberAttrs__.push(props[x]);
-		}
-	}
-
-	this.removeListener = function(node, evtName, fp, capture){
-		if(!capture){ var capture = false; }
-		evtName = evtName.toLowerCase();
-		if(evtName.substr(0,2)=="on"){ evtName = evtName.substr(2); }
-		// FIXME: this is mostly a punt, we aren't actually doing anything on IE
-		if(node.removeEventListener){
-			node.removeEventListener(evtName, fp, capture);
-		}
-	}
-
-	this.addListener = function(node, evtName, fp, capture, dontFix){
-		if(!node){ return; } // FIXME: log and/or bail?
-		if(!capture){ var capture = false; }
-		evtName = evtName.toLowerCase();
-		if(evtName.substr(0,2)!="on"){ evtName = "on"+evtName; }
-
-		if(!dontFix){
-			// build yet another closure around fp in order to inject fixEvent
-			// around the resulting event
-			var newfp = function(evt){
-				if(!evt){ evt = window.event; }
-				var ret = fp(dojo.event.browser.fixEvent(evt, this));
-				if(capture){
-					dojo.event.browser.stopEvent(evt);
-				}
-				return ret;
-			}
-		}else{
-			newfp = fp;
-		}
-
-		if(node.addEventListener){ 
-			node.addEventListener(evtName.substr(2), newfp, capture);
-			return newfp;
-		}else{
-			if(typeof node[evtName] == "function" ){
-				var oldEvt = node[evtName];
-				node[evtName] = function(e){
-					oldEvt(e);
-					return newfp(e);
-				}
-			}else{
-				node[evtName]=newfp;
-			}
-			if(dojo.render.html.ie){
-				this.addClobberNodeAttrs(node, [evtName]);
-			}
-			return newfp;
-		}
-	}
-
-	this.isEvent = function(obj){
-		// FIXME: event detection hack ... could test for additional attributes
-		// if necessary
-		return (typeof obj != "undefined")&&(typeof Event != "undefined")&&(obj.eventPhase);
-		// Event does not support instanceof in Opera, otherwise:
-		//return (typeof Event != "undefined")&&(obj instanceof Event);
-	}
-
-	this.currentEvent = null;
-	
-	this.callListener = function(listener, curTarget){
-		if(typeof listener != 'function'){
-			dojo.raise("listener not a function: " + listener);
-		}
-		dojo.event.browser.currentEvent.currentTarget = curTarget;
-		return listener.call(curTarget, dojo.event.browser.currentEvent);
-	}
-
-	this.stopPropagation = function(){
-		dojo.event.browser.currentEvent.cancelBubble = true;
-	}
-
-	this.preventDefault = function(){
-	  dojo.event.browser.currentEvent.returnValue = false;
-	}
-
-	this.keys = {
-		KEY_BACKSPACE: 8,
-		KEY_TAB: 9,
-		KEY_ENTER: 13,
-		KEY_SHIFT: 16,
-		KEY_CTRL: 17,
-		KEY_ALT: 18,
-		KEY_PAUSE: 19,
-		KEY_CAPS_LOCK: 20,
-		KEY_ESCAPE: 27,
-		KEY_SPACE: 32,
-		KEY_PAGE_UP: 33,
-		KEY_PAGE_DOWN: 34,
-		KEY_END: 35,
-		KEY_HOME: 36,
-		KEY_LEFT_ARROW: 37,
-		KEY_UP_ARROW: 38,
-		KEY_RIGHT_ARROW: 39,
-		KEY_DOWN_ARROW: 40,
-		KEY_INSERT: 45,
-		KEY_DELETE: 46,
-		KEY_LEFT_WINDOW: 91,
-		KEY_RIGHT_WINDOW: 92,
-		KEY_SELECT: 93,
-		KEY_F1: 112,
-		KEY_F2: 113,
-		KEY_F3: 114,
-		KEY_F4: 115,
-		KEY_F5: 116,
-		KEY_F6: 117,
-		KEY_F7: 118,
-		KEY_F8: 119,
-		KEY_F9: 120,
-		KEY_F10: 121,
-		KEY_F11: 122,
-		KEY_F12: 123,
-		KEY_NUM_LOCK: 144,
-		KEY_SCROLL_LOCK: 145
-	};
-
-	// reverse lookup
-	this.revKeys = [];
-	for(var key in this.keys){
-		this.revKeys[this.keys[key]] = key;
-	}
-
-	this.fixEvent = function(evt, sender){
-		if((!evt)&&(window["event"])){
-			var evt = window.event;
-		}
-		
-		if((evt["type"])&&(evt["type"].indexOf("key") == 0)){ // key events
-			evt.keys = this.revKeys;
-			// FIXME: how can we eliminate this iteration?
-			for(var key in this.keys) {
-				evt[key] = this.keys[key];
-			}
-			if((dojo.render.html.ie)&&(evt["type"] == "keypress")){
-				evt.charCode = evt.keyCode;
-			}
-		}
-	
-		if(dojo.render.html.ie){
-			if(!evt.target){ evt.target = evt.srcElement; }
-			if(!evt.currentTarget){ evt.currentTarget = (sender ? sender : evt.srcElement); }
-			if(!evt.layerX){ evt.layerX = evt.offsetX; }
-			if(!evt.layerY){ evt.layerY = evt.offsetY; }
-			// FIXME: scroll position query is duped from dojo.html to avoid dependency on that entire module
-			var docBody = ((dojo.render.html.ie55)||(document["compatMode"] == "BackCompat")) ? document.body : document.documentElement;
-			if(!evt.pageX){ evt.pageX = evt.clientX + (docBody.scrollLeft || 0) }
-			if(!evt.pageY){ evt.pageY = evt.clientY + (docBody.scrollTop || 0) }
-			// mouseover
-			if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; }
-			// mouseout
-			if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; }
-			this.currentEvent = evt;
-			evt.callListener = this.callListener;
-			evt.stopPropagation = this.stopPropagation;
-			evt.preventDefault = this.preventDefault;
-		}
-		return evt;
-	}
-
-	this.stopEvent = function(ev) {
-		if(window.event){
-			ev.returnValue = false;
-			ev.cancelBubble = true;
-		}else{
-			ev.preventDefault();
-			ev.stopPropagation();
-		}
-	}
-}
-
-dojo.kwCompoundRequire({
-	common: ["dojo.event", "dojo.event.topic"],
-	browser: ["dojo.event.browser"],
-	dashboard: ["dojo.event.browser"]
-});
-dojo.provide("dojo.event.*");
-
-dojo.provide("dojo.lfx.Animation");
-dojo.provide("dojo.lfx.Line");
-
-dojo.require("dojo.lang.func");
-
-/*
-	Animation package based on Dan Pupius' work: http://pupius.co.uk/js/Toolkit.Drawing.js
-*/
-dojo.lfx.Line = function(start, end){
-	this.start = start;
-	this.end = end;
-	if(dojo.lang.isArray(start)){
-		var diff = [];
-		dojo.lang.forEach(this.start, function(s,i){
-			diff[i] = this.end[i] - s;
-		}, this);
-		
-		this.getValue = function(/*float*/ n){
-			var res = [];
-			dojo.lang.forEach(this.start, function(s, i){
-				res[i] = (diff[i] * n) + s;
-			}, this);
-			return res;
-		}
-	}else{
-		var diff = end - start;
-			
-		this.getValue = function(/*float*/ n){
-			//	summary: returns the point on the line
-			//	n: a floating point number greater than 0 and less than 1
-			return (diff * n) + this.start;
-		}
-	}
-}
-
-dojo.lfx.easeIn = function(n){
-	//	summary: returns the point on an easing curve
-	//	n: a floating point number greater than 0 and less than 1
-	return Math.pow(n, 3);
-}
-
-dojo.lfx.easeOut = function(n){
-	//	summary: returns the point on the line
-	//	n: a floating point number greater than 0 and less than 1
-	return ( 1 - Math.pow(1 - n, 3) );
-}
-
-dojo.lfx.easeInOut = function(n){
-	//	summary: returns the point on the line
-	//	n: a floating point number greater than 0 and less than 1
-	return ( (3 * Math.pow(n, 2)) - (2 * Math.pow(n, 3)) );
-}
-
-dojo.lfx.IAnimation = function(){}
-dojo.lang.extend(dojo.lfx.IAnimation, {
-	// public properties
-	curve: null,
-	duration: 1000,
-	easing: null,
-	repeatCount: 0,
-	rate: 25,
-	
-	// events
-	handler: null,
-	beforeBegin: null,
-	onBegin: null,
-	onAnimate: null,
-	onEnd: null,
-	onPlay: null,
-	onPause: null,
-	onStop: null,
-	
-	// public methods
-	play: null,
-	pause: null,
-	stop: null,
-	
-	fire: function(evt, args){
-		if(this[evt]){
-			this[evt].apply(this, (args||[]));
-		}
-	},
-	
-	// private properties
-	_active: false,
-	_paused: false
-});
-
-dojo.lfx.Animation = function(/*Object*/ handlers, /*int*/ duration, /*Array*/ curve, /*function*/ easing, /*int*/ repeatCount, /*int*/ rate){
-	//	summary
-	//		a generic animation object that fires callbacks into it's handlers
-	//		object at various states
-	//	handlers
-	//		object { 
-	//			handler: function(){}, 
-	//			onstart: function(){}, 
-	//			onstop: function(){}, 
-	//			onanimate: function(){}
-	//		}
-	dojo.lfx.IAnimation.call(this);
-	if(dojo.lang.isNumber(handlers)||(!handlers && duration.getValue)){
-		// no handlers argument:
-		rate = repeatCount;
-		repeatCount = easing;
-		easing = curve;
-		curve = duration;
-		duration = handlers;
-		handlers = null;
-	}else if(handlers.getValue||dojo.lang.isArray(handlers)){
-		// no handlers or duration:
-		rate = easing;
-		repeatCount = curve;
-		easing = duration;
-		curve = handlers;
-		duration = null;
-		handlers = null;
-	}
-	if(dojo.lang.isArray(curve)){
-		this.curve = new dojo.lfx.Line(curve[0], curve[1]);
-	}else{
-		this.curve = curve;
-	}
-	if(duration != null && duration > 0){ this.duration = duration; }
-	if(repeatCount){ this.repeatCount = repeatCount; }
-	if(rate){ this.rate = rate; }
-	if(handlers){
-		this.handler = handlers.handler;
-		this.beforeBegin = handlers.beforeBegin;
-		this.onBegin = handlers.onBegin;
-		this.onEnd = handlers.onEnd;
-		this.onPlay = handlers.onPlay;
-		this.onPause = handlers.onPause;
-		this.onStop = handlers.onStop;
-		this.onAnimate = handlers.onAnimate;
-	}
-	if(easing && dojo.lang.isFunction(easing)){
-		this.easing=easing;
-	}
-}
-dojo.inherits(dojo.lfx.Animation, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Animation, {
-	// "private" properties
-	_startTime: null,
-	_endTime: null,
-	_timer: null,
-	_percent: 0,
-	_startRepeatCount: 0,
-
-	// public methods
-	play: function(delay, gotoStart){
-		if(gotoStart){
-			clearTimeout(this._timer);
-			this._active = false;
-			this._paused = false;
-			this._percent = 0;
-		}else if(this._active && !this._paused){
-			return this;
-		}
-		
-		this.fire("handler", ["beforeBegin"]);
-		this.fire("beforeBegin");
-
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this;
-		}
-		
-		this._startTime = new Date().valueOf();
-		if(this._paused){
-			this._startTime -= (this.duration * this._percent / 100);
-		}
-		this._endTime = this._startTime + this.duration;
-
-		this._active = true;
-		this._paused = false;
-		
-		var step = this._percent / 100;
-		var value = this.curve.getValue(step);
-		if( this._percent == 0 ) {
-			if(!this._startRepeatCount) {
-				this._startRepeatCount = this.repeatCount;
-			}
-			this.fire("handler", ["begin", value]);
-			this.fire("onBegin", [value]);
-		}
-
-		this.fire("handler", ["play", value]);
-		this.fire("onPlay", [value]);
-
-		this._cycle();
-		return this;
-	},
-
-	pause: function() {
-		clearTimeout(this._timer);
-		if(!this._active){ return this; }
-		this._paused = true;
-		var value = this.curve.getValue(this._percent / 100);
-		this.fire("handler", ["pause", value]);
-		this.fire("onPause", [value]);
-		return this;
-	},
-
-	gotoPercent: function(pct, andPlay) {
-		clearTimeout(this._timer);
-		this._active = true;
-		this._paused = true;
-		this._percent = pct;
-		if( andPlay ) { this.play(); }
-	},
-
-	stop: function(gotoEnd) {
-		clearTimeout(this._timer);
-		var step = this._percent / 100;
-		if( gotoEnd ) {
-			step = 1;
-		}
-		var value = this.curve.getValue(step);
-		this.fire("handler", ["stop", value]);
-		this.fire("onStop", [value]);
-		this._active = false;
-		this._paused = false;
-		return this;
-	},
-
-	status: function() {
-		if( this._active ) {
-			return this._paused ? "paused" : "playing";
-		} else {
-			return "stopped";
-		}
-	},
-
-	// "private" methods
-	_cycle: function() {
-		clearTimeout(this._timer);
-		if(this._active){
-			var curr = new Date().valueOf();
-			var step = (curr - this._startTime) / (this._endTime - this._startTime);
-
-			if(step >= 1){
-				step = 1;
-				this._percent = 100;
-			}else{
-				this._percent = step * 100;
-			}
-			
-			// Perform easing
-			if((this.easing)&&(dojo.lang.isFunction(this.easing))){
-				step = this.easing(step);
-			}
-
-			var value = this.curve.getValue(step);
-			this.fire("handler", ["animate", value]);
-			this.fire("onAnimate", [value]);
-
-			if( step < 1 ) {
-				this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
-			} else {
-				this._active = false;
-				this.fire("handler", ["end"]);
-				this.fire("onEnd");
-
-				if( this.repeatCount > 0 ) {
-					this.repeatCount--;
-					this.play(null, true);
-				} else if( this.repeatCount == -1 ) {
-					this.play(null, true);
-				} else {
-					if(this._startRepeatCount) {
-						this.repeatCount = this._startRepeatCount;
-						this._startRepeatCount = 0;
-					}
-				}
-			}
-		}
-		return this;
-	}
-});
-
-dojo.lfx.Combine = function(){
-	dojo.lfx.IAnimation.call(this);
-	this._anims = [];
-	this._animsEnded = 0;
-	
-	var anims = arguments;
-	if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){
-		anims = anims[0];
-	}
-	
-	var _this = this;
-	dojo.lang.forEach(anims, function(anim){
-		_this._anims.push(anim);
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ oldOnEnd(); _this._onAnimsEnded(); };
-	});
-}
-dojo.inherits(dojo.lfx.Combine, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Combine, {
-	// private members
-	_animsEnded: 0,
-	
-	// public methods
-	play: function(delay, gotoStart){
-		if( !this._anims.length ){ return this; }
-
-		this.fire("beforeBegin");
-
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this;
-		}
-		
-		if(gotoStart || this._anims[0].percent == 0){
-			this.fire("onBegin");
-		}
-		this.fire("onPlay");
-		this._animsCall("play", null, gotoStart);
-		return this;
-	},
-	
-	pause: function(){
-		this.fire("onPause");
-		this._animsCall("pause"); 
-		return this;
-	},
-	
-	stop: function(gotoEnd){
-		this.fire("onStop");
-		this._animsCall("stop", gotoEnd);
-		return this;
-	},
-	
-	// private methods
-	_onAnimsEnded: function(){
-		this._animsEnded++;
-		if(this._animsEnded >= this._anims.length){
-			this.fire("onEnd");
-		}
-		return this;
-	},
-	
-	_animsCall: function(funcName){
-		var args = [];
-		if(arguments.length > 1){
-			for(var i = 1 ; i < arguments.length ; i++){
-				args.push(arguments[i]);
-			}
-		}
-		var _this = this;
-		dojo.lang.forEach(this._anims, function(anim){
-			anim[funcName](args);
-		}, _this);
-		return this;
-	}
-});
-
-dojo.lfx.Chain = function() {
-	dojo.lfx.IAnimation.call(this);
-	this._anims = [];
-	this._currAnim = -1;
-	
-	var anims = arguments;
-	if(anims.length == 1 && (dojo.lang.isArray(anims[0]) || dojo.lang.isArrayLike(anims[0]))){
-		anims = anims[0];
-	}
-	
-	var _this = this;
-	dojo.lang.forEach(anims, function(anim, i, anims_arr){
-		_this._anims.push(anim);
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		if(i < anims_arr.length - 1){
-			anim.onEnd = function(){ oldOnEnd(); _this._playNext(); };
-		}else{
-			anim.onEnd = function(){ oldOnEnd(); _this.fire("onEnd"); };
-		}
-	}, _this);
-}
-dojo.inherits(dojo.lfx.Chain, dojo.lfx.IAnimation);
-dojo.lang.extend(dojo.lfx.Chain, {
-	// private members
-	_currAnim: -1,
-	
-	// public methods
-	play: function(delay, gotoStart){
-		if( !this._anims.length ) { return this; }
-		if( gotoStart || !this._anims[this._currAnim] ) {
-			this._currAnim = 0;
-		}
-
-		var currentAnimation = this._anims[this._currAnim];
-
-		this.fire("beforeBegin");
-		if(delay > 0){
-			setTimeout(dojo.lang.hitch(this, function(){ this.play(null, gotoStart); }), delay);
-			return this;
-		}
-		
-		if(currentAnimation){
-			if(this._currAnim == 0){
-				this.fire("handler", ["begin", this._currAnim]);
-				this.fire("onBegin", [this._currAnim]);
-			}
-			this.fire("onPlay", [this._currAnim]);
-			currentAnimation.play(null, gotoStart);
-		}
-		return this;
-	},
-	
-	pause: function(){
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].pause();
-			this.fire("onPause", [this._currAnim]);
-		}
-		return this;
-	},
-	
-	playPause: function(){
-		if(this._anims.length == 0){ return this; }
-		if(this._currAnim == -1){ this._currAnim = 0; }
-		var currAnim = this._anims[this._currAnim];
-		if( currAnim ) {
-			if( !currAnim._active || currAnim._paused ) {
-				this.play();
-			} else {
-				this.pause();
-			}
-		}
-		return this;
-	},
-	
-	stop: function(){
-		var currAnim = this._anims[this._currAnim];
-		if(currAnim){
-			currAnim.stop();
-			this.fire("onStop", [this._currAnim]);
-		}
-		return currAnim;
-	},
-	
-	// private methods
-	_playNext: function(){
-		if( this._currAnim == -1 || this._anims.length == 0 ) { return this; }
-		this._currAnim++;
-		if( this._anims[this._currAnim] ){
-			this._anims[this._currAnim].play(null, true);
-		}
-		return this;
-	}
-});
-
-dojo.lfx.combine = function(){
-	var anims = arguments;
-	if(dojo.lang.isArray(arguments[0])){
-		anims = arguments[0];
-	}
-	return new dojo.lfx.Combine(anims);
-}
-
-dojo.lfx.chain = function(){
-	var anims = arguments;
-	if(dojo.lang.isArray(arguments[0])){
-		anims = arguments[0];
-	}
-	return new dojo.lfx.Chain(anims);
-}
-
-dojo.provide("dojo.graphics.color");
-dojo.require("dojo.lang.array");
-
-// TODO: rewrite the "x2y" methods to take advantage of the parsing
-//       abilities of the Color object. Also, beef up the Color
-//       object (as possible) to parse most common formats
-
-// takes an r, g, b, a(lpha) value, [r, g, b, a] array, "rgb(...)" string, hex string (#aaa, #aaaaaa, aaaaaaa)
-dojo.graphics.color.Color = function(r, g, b, a) {
-	// dojo.debug("r:", r[0], "g:", r[1], "b:", r[2]);
-	if(dojo.lang.isArray(r)) {
-		this.r = r[0];
-		this.g = r[1];
-		this.b = r[2];
-		this.a = r[3]||1.0;
-	} else if(dojo.lang.isString(r)) {
-		var rgb = dojo.graphics.color.extractRGB(r);
-		this.r = rgb[0];
-		this.g = rgb[1];
-		this.b = rgb[2];
-		this.a = g||1.0;
-	} else if(r instanceof dojo.graphics.color.Color) {
-		this.r = r.r;
-		this.b = r.b;
-		this.g = r.g;
-		this.a = r.a;
-	} else {
-		this.r = r;
-		this.g = g;
-		this.b = b;
-		this.a = a;
-	}
-}
-
-dojo.graphics.color.Color.fromArray = function(arr) {
-	return new dojo.graphics.color.Color(arr[0], arr[1], arr[2], arr[3]);
-}
-
-dojo.lang.extend(dojo.graphics.color.Color, {
-	toRgb: function(includeAlpha) {
-		if(includeAlpha) {
-			return this.toRgba();
-		} else {
-			return [this.r, this.g, this.b];
-		}
-	},
-
-	toRgba: function() {
-		return [this.r, this.g, this.b, this.a];
-	},
-
-	toHex: function() {
-		return dojo.graphics.color.rgb2hex(this.toRgb());
-	},
-
-	toCss: function() {
-		return "rgb(" + this.toRgb().join() + ")";
-	},
-
-	toString: function() {
-		return this.toHex(); // decent default?
-	},
-
-	blend: function(color, weight) {
-		return dojo.graphics.color.blend(this.toRgb(), new dojo.graphics.color.Color(color).toRgb(), weight);
-	}
-});
-
-dojo.graphics.color.named = {
-	white:      [255,255,255],
-	black:      [0,0,0],
-	red:        [255,0,0],
-	green:	    [0,255,0],
-	blue:       [0,0,255],
-	navy:       [0,0,128],
-	gray:       [128,128,128],
-	silver:     [192,192,192]
-};
-
-// blend colors a and b (both as RGB array or hex strings) with weight from -1 to +1, 0 being a 50/50 blend
-dojo.graphics.color.blend = function(a, b, weight) {
-	if(typeof a == "string") { return dojo.graphics.color.blendHex(a, b, weight); }
-	if(!weight) { weight = 0; }
-	else if(weight > 1) { weight = 1; }
-	else if(weight < -1) { weight = -1; }
-	var c = new Array(3);
-	for(var i = 0; i < 3; i++) {
-		var half = Math.abs(a[i] - b[i])/2;
-		c[i] = Math.floor(Math.min(a[i], b[i]) + half + (half * weight));
-	}
-	return c;
-}
-
-// very convenient blend that takes and returns hex values
-// (will get called automatically by blend when blend gets strings)
-dojo.graphics.color.blendHex = function(a, b, weight) {
-	return dojo.graphics.color.rgb2hex(dojo.graphics.color.blend(dojo.graphics.color.hex2rgb(a), dojo.graphics.color.hex2rgb(b), weight));
-}
-
-// get RGB array from css-style color declarations
-dojo.graphics.color.extractRGB = function(color) {
-	var hex = "0123456789abcdef";
-	color = color.toLowerCase();
-	if( color.indexOf("rgb") == 0 ) {
-		var matches = color.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-		var ret = matches.splice(1, 3);
-		return ret;
-	} else {
-		var colors = dojo.graphics.color.hex2rgb(color);
-		if(colors) {
-			return colors;
-		} else {
-			// named color (how many do we support?)
-			return dojo.graphics.color.named[color] || [255, 255, 255];
-		}
-	}
-}
-
-dojo.graphics.color.hex2rgb = function(hex) {
-	var hexNum = "0123456789ABCDEF";
-	var rgb = new Array(3);
-	if( hex.indexOf("#") == 0 ) { hex = hex.substring(1); }
-	hex = hex.toUpperCase();
-	if(hex.replace(new RegExp("["+hexNum+"]", "g"), "") != "") {
-		return null;
-	}
-	if( hex.length == 3 ) {
-		rgb[0] = hex.charAt(0) + hex.charAt(0)
-		rgb[1] = hex.charAt(1) + hex.charAt(1)
-		rgb[2] = hex.charAt(2) + hex.charAt(2);
-	} else {
-		rgb[0] = hex.substring(0, 2);
-		rgb[1] = hex.substring(2, 4);
-		rgb[2] = hex.substring(4);
-	}
-	for(var i = 0; i < rgb.length; i++) {
-		rgb[i] = hexNum.indexOf(rgb[i].charAt(0)) * 16 + hexNum.indexOf(rgb[i].charAt(1));
-	}
-	return rgb;
-}
-
-dojo.graphics.color.rgb2hex = function(r, g, b) {
-	if(dojo.lang.isArray(r)) {
-		g = r[1] || 0;
-		b = r[2] || 0;
-		r = r[0] || 0;
-	}
-	var ret = dojo.lang.map([r, g, b], function(x) {
-		x = new Number(x);
-		var s = x.toString(16);
-		while(s.length < 2) { s = "0" + s; }
-		return s;
-	});
-	ret.unshift("#");
-	return ret.join("");
-}
-
-dojo.provide("dojo.uri.Uri");
-
-dojo.uri = new function() {
-	this.joinPath = function() {
-		// DEPRECATED: use the dojo.uri.Uri object instead
-		var arr = [];
-		for(var i = 0; i < arguments.length; i++) { arr.push(arguments[i]); }
-		return arr.join("/").replace(/\/{2,}/g, "/").replace(/((https*|ftps*):)/i, "$1/");
-	}
-	
-	this.dojoUri = function (uri) {
-		// returns a Uri object resolved relative to the dojo root
-		return new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri(), uri);
-	}
-		
-	this.Uri = function (/*uri1, uri2, [...]*/) {
-		// An object representing a Uri.
-		// Each argument is evaluated in order relative to the next until
-		// a conanical uri is producued. To get an absolute Uri relative
-		// to the current document use
-		//      new dojo.uri.Uri(document.baseURI, uri)
-
-		// TODO: support for IPv6, see RFC 2732
-
-		// resolve uri components relative to each other
-		var uri = arguments[0];
-		for (var i = 1; i < arguments.length; i++) {
-			if(!arguments[i]) { continue; }
-
-			// Safari doesn't support this.constructor so we have to be explicit
-			var relobj = new dojo.uri.Uri(arguments[i].toString());
-			var uriobj = new dojo.uri.Uri(uri.toString());
-
-			if (relobj.path == "" && relobj.scheme == null &&
-				relobj.authority == null && relobj.query == null) {
-				if (relobj.fragment != null) { uriobj.fragment = relobj.fragment; }
-				relobj = uriobj;
-			} else if (relobj.scheme == null) {
-				relobj.scheme = uriobj.scheme;
-			
-				if (relobj.authority == null) {
-					relobj.authority = uriobj.authority;
-					
-					if (relobj.path.charAt(0) != "/") {
-						var path = uriobj.path.substring(0,
-							uriobj.path.lastIndexOf("/") + 1) + relobj.path;
-
-						var segs = path.split("/");
-						for (var j = 0; j < segs.length; j++) {
-							if (segs[j] == ".") {
-								if (j == segs.length - 1) { segs[j] = ""; }
-								else { segs.splice(j, 1); j--; }
-							} else if (j > 0 && !(j == 1 && segs[0] == "") &&
-								segs[j] == ".." && segs[j-1] != "..") {
-
-								if (j == segs.length - 1) { segs.splice(j, 1); segs[j - 1] = ""; }
-								else { segs.splice(j - 1, 2); j -= 2; }
-							}
-						}
-						relobj.path = segs.join("/");
-					}
-				}
-			}
-
-			uri = "";
-			if (relobj.scheme != null) { uri += relobj.scheme + ":"; }
-			if (relobj.authority != null) { uri += "//" + relobj.authority; }
-			uri += relobj.path;
-			if (relobj.query != null) { uri += "?" + relobj.query; }
-			if (relobj.fragment != null) { uri += "#" + relobj.fragment; }
-		}
-
-		this.uri = uri.toString();
-
-		// break the uri into its main components
-		var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";
-	    var r = this.uri.match(new RegExp(regexp));
-
-		this.scheme = r[2] || (r[1] ? "" : null);
-		this.authority = r[4] || (r[3] ? "" : null);
-		this.path = r[5]; // can never be undefined
-		this.query = r[7] || (r[6] ? "" : null);
-		this.fragment  = r[9] || (r[8] ? "" : null);
-		
-		if (this.authority != null) {
-			// server based naming authority
-			regexp = "^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$";
-			r = this.authority.match(new RegExp(regexp));
-			
-			this.user = r[3] || null;
-			this.password = r[4] || null;
-			this.host = r[5];
-			this.port = r[7] || null;
-		}
-	
-		this.toString = function(){ return this.uri; }
-	}
-};
-
-dojo.provide("dojo.style");
-dojo.require("dojo.graphics.color");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.lang.common");
-
-(function(){
-	var h = dojo.render.html;
-	var ds = dojo.style;
-	var db = document["body"]||document["documentElement"];
-
-	ds.boxSizing = {
-		MARGIN_BOX: "margin-box",
-		BORDER_BOX: "border-box",
-		PADDING_BOX: "padding-box",
-		CONTENT_BOX: "content-box"
-	};
-	var bs = ds.boxSizing;
-	
-	ds.getBoxSizing = function(node){
-		if((h.ie)||(h.opera)){ 
-			var cm = document["compatMode"];
-			if((cm == "BackCompat")||(cm == "QuirksMode")){ 
-				return bs.BORDER_BOX; 
-			}else{
-				return bs.CONTENT_BOX; 
-			}
-		}else{
-			if(arguments.length == 0){ node = document.documentElement; }
-			var sizing = ds.getStyle(node, "-moz-box-sizing");
-			if(!sizing){ sizing = ds.getStyle(node, "box-sizing"); }
-			return (sizing ? sizing : bs.CONTENT_BOX);
-		}
-	}
-
-	/*
-
-	The following several function use the dimensions shown below
-
-		+-------------------------+
-		|  margin                 |
-		| +---------------------+ |
-		| |  border             | |
-		| | +-----------------+ | |
-		| | |  padding        | | |
-		| | | +-------------+ | | |
-		| | | |   content   | | | |
-		| | | +-------------+ | | |
-		| | +-|-------------|-+ | |
-		| +-|-|-------------|-|-+ |
-		+-|-|-|-------------|-|-|-+
-		| | | |             | | | |
-		| | | |<- content ->| | | |
-		| |<------ inner ------>| |
-		|<-------- outer -------->|
-		+-------------------------+
-
-		* content-box
-
-		|m|b|p|             |p|b|m|
-		| |<------ offset ----->| |
-		| | |<---- client --->| | |
-		| | | |<-- width -->| | | |
-
-		* border-box
-
-		|m|b|p|             |p|b|m|
-		| |<------ offset ----->| |
-		| | |<---- client --->| | |
-		| |<------ width ------>| |
-	*/
-
-	/*
-		Notes:
-
-		General:
-			- Uncomputable values are returned as NaN.
-			- setOuterWidth/Height return *false* if the outer size could not
-			  be computed, otherwise *true*.
-			- (sjmiles) knows no way to find the calculated values for auto-margins. 
-			- All returned values are floating point in 'px' units. If a
-			  non-zero computed style value is not specified in 'px', NaN is
-			  returned.
-
-		FF:
-			- styles specified as '0' (unitless 0) show computed as '0pt'.
-
-		IE:
-			- clientWidth/Height are unreliable (0 unless the object has 'layout').
-			- margins must be specified in px, or 0 (in any unit) for any
-			  sizing function to work. Otherwise margins detect as 'auto'.
-			- padding can be empty or, if specified, must be in px, or 0 (in
-			  any unit) for any sizing function to work.
-
-		Safari:
-			- Safari defaults padding values to 'auto'.
-
-		See the unit tests for examples of (un)computable values in a given browser.
-
-	*/
-
-	// FIXME: these work for some elements (e.g. DIV) but not others (e.g. TABLE, TEXTAREA)
-
-	ds.isBorderBox = function(node){
-		return (ds.getBoxSizing(node) == bs.BORDER_BOX);
-	}
-
-	ds.getUnitValue = function(node, cssSelector, autoIsZero){
-		var s = ds.getComputedStyle(node, cssSelector);
-		if((!s)||((s == 'auto')&&(autoIsZero))){ return { value: 0, units: 'px' }; }
-		if(dojo.lang.isUndefined(s)){return ds.getUnitValue.bad;}
-		// FIXME: is regex inefficient vs. parseInt or some manual test? 
-		var match = s.match(/(\-?[\d.]+)([a-z%]*)/i);
-		if (!match){return ds.getUnitValue.bad;}
-		return { value: Number(match[1]), units: match[2].toLowerCase() };
-	}
-	// FIXME: 'bad' value should be 0?
-	ds.getUnitValue.bad = { value: NaN, units: '' };
-	
-	ds.getPixelValue = function(node, cssSelector, autoIsZero){
-		var result = ds.getUnitValue(node, cssSelector, autoIsZero);
-		// FIXME: there is serious debate as to whether or not this is the right solution
-		if(isNaN(result.value)){ return 0; }
-		// FIXME: code exists for converting other units to px (see Dean Edward's IE7) 
-		// but there are cross-browser complexities
-		if((result.value)&&(result.units != 'px')){ return NaN; }
-		return result.value;
-	}
-	
-	// FIXME: deprecated
-	ds.getNumericStyle = function() {
-		dojo.deprecated('dojo.(style|html).getNumericStyle', 'in favor of dojo.(style|html).getPixelValue', '0.4');
-		return ds.getPixelValue.apply(this, arguments); 
-	}
-
-	ds.setPositivePixelValue = function(node, selector, value){
-		if(isNaN(value)){return false;}
-		node.style[selector] = Math.max(0, value) + 'px'; 
-		return true;
-	}
-	
-	ds._sumPixelValues = function(node, selectors, autoIsZero){
-		var total = 0;
-		for(var x=0; x<selectors.length; x++){
-			total += ds.getPixelValue(node, selectors[x], autoIsZero);
-		}
-		return total;
-	}
-
-	ds.isPositionAbsolute = function(node){
-		return (ds.getComputedStyle(node, 'position') == 'absolute');
-	}
-
-	ds.getBorderExtent = function(node, side){
-		return (ds.getStyle(node, 'border-' + side + '-style') == 'none' ? 0 : ds.getPixelValue(node, 'border-' + side + '-width'));
-	}
-
-	ds.getMarginWidth = function(node){
-		return ds._sumPixelValues(node, ["margin-left", "margin-right"], ds.isPositionAbsolute(node));
-	}
-
-	ds.getBorderWidth = function(node){
-		return ds.getBorderExtent(node, 'left') + ds.getBorderExtent(node, 'right');
-	}
-
-	ds.getPaddingWidth = function(node){
-		return ds._sumPixelValues(node, ["padding-left", "padding-right"], true);
-	}
-
-	ds.getPadBorderWidth = function(node) {
-		return ds.getPaddingWidth(node) + ds.getBorderWidth(node);
-	}
-	
-	ds.getContentBoxWidth = function(node){
-		node = dojo.byId(node);
-		return node.offsetWidth - ds.getPadBorderWidth(node);
-	}
-
-	ds.getBorderBoxWidth = function(node){
-		node = dojo.byId(node);
-		return node.offsetWidth;
-	}
-
-	ds.getMarginBoxWidth = function(node){
-		return ds.getInnerWidth(node) + ds.getMarginWidth(node);
-	}
-
-	ds.setContentBoxWidth = function(node, pxWidth){
-		node = dojo.byId(node);
-		if (ds.isBorderBox(node)){
-			pxWidth += ds.getPadBorderWidth(node);
-		}
-		return ds.setPositivePixelValue(node, "width", pxWidth);
-	}
-
-	ds.setMarginBoxWidth = function(node, pxWidth){
-		node = dojo.byId(node);
-		if (!ds.isBorderBox(node)){
-			pxWidth -= ds.getPadBorderWidth(node);
-		}
-		pxWidth -= ds.getMarginWidth(node);
-		return ds.setPositivePixelValue(node, "width", pxWidth);
-	}
-
-	// FIXME: deprecate and remove
-	ds.getContentWidth = ds.getContentBoxWidth;
-	ds.getInnerWidth = ds.getBorderBoxWidth;
-	ds.getOuterWidth = ds.getMarginBoxWidth;
-	ds.setContentWidth = ds.setContentBoxWidth;
-	ds.setOuterWidth = ds.setMarginBoxWidth;
-
-	ds.getMarginHeight = function(node){
-		return ds._sumPixelValues(node, ["margin-top", "margin-bottom"], ds.isPositionAbsolute(node));
-	}
-
-	ds.getBorderHeight = function(node){
-		return ds.getBorderExtent(node, 'top') + ds.getBorderExtent(node, 'bottom');
-	}
-
-	ds.getPaddingHeight = function(node){
-		return ds._sumPixelValues(node, ["padding-top", "padding-bottom"], true);
-	}
-
-	ds.getPadBorderHeight = function(node) {
-		return ds.getPaddingHeight(node) + ds.getBorderHeight(node);
-	}
-	
-	ds.getContentBoxHeight = function(node){
-		node = dojo.byId(node);
-		return node.offsetHeight - ds.getPadBorderHeight(node);
-	}
-
-	ds.getBorderBoxHeight = function(node){
-		node = dojo.byId(node);
-		return node.offsetHeight; // FIXME: does this work?
-	}
-
-	ds.getMarginBoxHeight = function(node){
-		return ds.getInnerHeight(node) + ds.getMarginHeight(node);
-	}
-
-	ds.setContentBoxHeight = function(node, pxHeight){
-		node = dojo.byId(node);
-		if (ds.isBorderBox(node)){
-			pxHeight += ds.getPadBorderHeight(node);
-		}
-		return ds.setPositivePixelValue(node, "height", pxHeight);
-	}
-
-	ds.setMarginBoxHeight = function(node, pxHeight){
-		node = dojo.byId(node);
-		if (!ds.isBorderBox(node)){
-			pxHeight -= ds.getPadBorderHeight(node);
-		}
-		pxHeight -= ds.getMarginHeight(node);
-		return ds.setPositivePixelValue(node, "height", pxHeight);
-	}
-
-	// FIXME: deprecate and remove
-	ds.getContentHeight = ds.getContentBoxHeight;
-	ds.getInnerHeight = ds.getBorderBoxHeight;
-	ds.getOuterHeight = ds.getMarginBoxHeight;
-	ds.setContentHeight = ds.setContentBoxHeight;
-	ds.setOuterHeight = ds.setMarginBoxHeight;
-
-	/**
-	 * dojo.style.getAbsolutePosition(xyz, true) returns xyz's position relative to the document.
-	 * Itells you where you would position a node
-	 * inside document.body such that it was on top of xyz.  Most people set the flag to true when calling
-	 * getAbsolutePosition().
-	 *
-	 * dojo.style.getAbsolutePosition(xyz, false) returns xyz's position relative to the viewport.
-	 * It returns the position that would be returned
-	 * by event.clientX/Y if the mouse were directly over the top/left of this node.
-	 */
-	ds.getAbsolutePosition = ds.abs = function(node, includeScroll){
-		node = dojo.byId(node);
-		var ret = [];
-		ret.x = ret.y = 0;
-		var st = dojo.html.getScrollTop();
-		var sl = dojo.html.getScrollLeft();
-
-		if(h.ie){
-			with(node.getBoundingClientRect()){
-				ret.x = left-2;
-				ret.y = top-2;
-			}
-		}else if(document.getBoxObjectFor){
-			// mozilla
-			var bo = document.getBoxObjectFor(node);
-			ret.x = bo.x - ds.sumAncestorProperties(node, "scrollLeft");
-			ret.y = bo.y - ds.sumAncestorProperties(node, "scrollTop");
-		}else{
-			if(node["offsetParent"]){
-				var endNode;		
-				// in Safari, if the node is an absolutely positioned child of
-				// the body and the body has a margin the offset of the child
-				// and the body contain the body's margins, so we need to end
-				// at the body
-				if(	(h.safari)&&
-					(node.style.getPropertyValue("position") == "absolute")&&
-					(node.parentNode == db)){
-					endNode = db;
-				}else{
-					endNode = db.parentNode;
-				}
-
-				if(node.parentNode != db){
-					var nd = node;
-					if(window.opera){ nd = db; }
-					ret.x -= ds.sumAncestorProperties(nd, "scrollLeft");
-					ret.y -= ds.sumAncestorProperties(nd, "scrollTop");
-				}
-				do{
-					var n = node["offsetLeft"];
-					ret.x += isNaN(n) ? 0 : n;
-					var m = node["offsetTop"];
-					ret.y += isNaN(m) ? 0 : m;
-					node = node.offsetParent;
-				}while((node != endNode)&&(node != null));
-			}else if(node["x"]&&node["y"]){
-				ret.x += isNaN(node.x) ? 0 : node.x;
-				ret.y += isNaN(node.y) ? 0 : node.y;
-			}
-		}
-
-		// account for document scrolling!
-		if(includeScroll){
-			ret.y += st;
-			ret.x += sl;
-		}
-
-		ret[0] = ret.x;
-		ret[1] = ret.y;
-		return ret;
-	}
-
-	ds.sumAncestorProperties = function(node, prop){
-		node = dojo.byId(node);
-		if(!node){ return 0; } // FIXME: throw an error?
-		
-		var retVal = 0;
-		while(node){
-			var val = node[prop];
-			if(val){
-				retVal += val - 0;
-				if(node==document.body){ break; }// opera and khtml #body & #html has the same values, we only need one value
-			}
-			node = node.parentNode;
-		}
-		return retVal;
-	}
-
-	ds.getTotalOffset = function(node, type, includeScroll){
-		return ds.abs(node, includeScroll)[(type == "top") ? "y" : "x"];
-	}
-
-	ds.getAbsoluteX = ds.totalOffsetLeft = function(node, includeScroll){
-		return ds.getTotalOffset(node, "left", includeScroll);
-	}
-
-	ds.getAbsoluteY = ds.totalOffsetTop = function(node, includeScroll){
-		return ds.getTotalOffset(node, "top", includeScroll);
-	}
-
-	ds.styleSheet = null;
-
-	// FIXME: this is a really basic stub for adding and removing cssRules, but
-	// it assumes that you know the index of the cssRule that you want to add 
-	// or remove, making it less than useful.  So we need something that can 
-	// search for the selector that you you want to remove.
-	ds.insertCssRule = function(selector, declaration, index) {
-		if (!ds.styleSheet) {
-			if (document.createStyleSheet) { // IE
-				ds.styleSheet = document.createStyleSheet();
-			} else if (document.styleSheets[0]) { // rest
-				// FIXME: should create a new style sheet here
-				// fall back on an exsiting style sheet
-				ds.styleSheet = document.styleSheets[0];
-			} else { return null; } // fail
-		}
-
-		if (arguments.length < 3) { // index may == 0
-			if (ds.styleSheet.cssRules) { // W3
-				index = ds.styleSheet.cssRules.length;
-			} else if (ds.styleSheet.rules) { // IE
-				index = ds.styleSheet.rules.length;
-			} else { return null; } // fail
-		}
-
-		if (ds.styleSheet.insertRule) { // W3
-			var rule = selector + " { " + declaration + " }";
-			return ds.styleSheet.insertRule(rule, index);
-		} else if (ds.styleSheet.addRule) { // IE
-			return ds.styleSheet.addRule(selector, declaration, index);
-		} else { return null; } // fail
-	}
-
-	ds.removeCssRule = function(index){
-		if(!ds.styleSheet){
-			dojo.debug("no stylesheet defined for removing rules");
-			return false;
-		}
-		if(h.ie){
-			if(!index){
-				index = ds.styleSheet.rules.length;
-				ds.styleSheet.removeRule(index);
-			}
-		}else if(document.styleSheets[0]){
-			if(!index){
-				index = ds.styleSheet.cssRules.length;
-			}
-			ds.styleSheet.deleteRule(index);
-		}
-		return true;
-	}
-
-	// calls css by XmlHTTP and inserts it into DOM as <style [widgetType="widgetType"]> *downloaded cssText*</style>
-	ds.insertCssFile = function(URI, doc, checkDuplicates){
-		if(!URI){ return; }
-		if(!doc){ doc = document; }
-		var cssStr = dojo.hostenv.getText(URI);
-		cssStr = ds.fixPathsInCssText(cssStr, URI);
-
-		if(checkDuplicates){
-			var styles = doc.getElementsByTagName("style");
-			var cssText = "";
-			for(var i = 0; i<styles.length; i++){
-				cssText = (styles[i].styleSheet && styles[i].styleSheet.cssText) ? styles[i].styleSheet.cssText : styles[i].innerHTML;
-				if(cssStr == cssText){ return; }
-			}
-		}
-
-		var style = ds.insertCssText(cssStr);
-		// insert custom attribute ex dbgHref="../foo.css" usefull when debugging in DOM inspectors, no?
-		if(style && djConfig.isDebug){
-			style.setAttribute("dbgHref", URI);
-		}
-		return style
-	}
-
-	// DomNode Style  = insertCssText(String ".dojoMenu {color: green;}"[, DomDoc document, dojo.uri.Uri Url ])
-	ds.insertCssText = function(cssStr, doc, URI){
-		if(!cssStr){ return; }
-		if(!doc){ doc = document; }
-		if(URI){// fix paths in cssStr
-			cssStr = ds.fixPathsInCssText(cssStr, URI);
-		}
-		var style = doc.createElement("style");
-		style.setAttribute("type", "text/css");
-		// IE is b0rken enough to require that we add the element to the doc
-		// before changing it's properties
-		var head = doc.getElementsByTagName("head")[0];
-		if(!head){ // must have a head tag 
-			dojo.debug("No head tag in document, aborting styles");
-			return;
-		}else{
-			head.appendChild(style);
-		}
-		if(style.styleSheet){// IE
-			style.styleSheet.cssText = cssStr;
-		}else{ // w3c
-			var cssText = doc.createTextNode(cssStr);
-			style.appendChild(cssText);
-		}
-		return style;
-	}
-
-	// String cssText = fixPathsInCssText(String cssStr, dojo.uri.Uri URI)
-	// usage: cssText comes from dojoroot/src/widget/templates/HtmlFoobar.css
-	// 	it has .dojoFoo { background-image: url(images/bar.png);} 
-	//	then uri should point to dojoroot/src/widget/templates/
-	ds.fixPathsInCssText = function(cssStr, URI){
-		if(!cssStr || !URI){ return; }
-		var pos = 0; var str = ""; var url = "";
-		while(pos!=-1){
-			pos = 0;url = "";
-			pos = cssStr.indexOf("url(", pos);
-			if(pos<0){ break; }
-			str += cssStr.slice(0,pos+4);
-			cssStr = cssStr.substring(pos+4, cssStr.length);
-			url += cssStr.match(/^[\t\s\w()\/.\\'"-:#=&?]*\)/)[0]; // url string
-			cssStr = cssStr.substring(url.length-1, cssStr.length); // remove url from css string til next loop
-			url = url.replace(/^[\s\t]*(['"]?)([\w()\/.\\'"-:#=&?]*)\1[\s\t]*?\)/,"$2"); // clean string
-			if(url.search(/(file|https?|ftps?):\/\//)==-1){
-				url = (new dojo.uri.Uri(URI,url).toString());
-			}
-			str += url;
-		};
-		return str+cssStr;
-	}
-
-	ds.getBackgroundColor = function(node) {
-		node = dojo.byId(node);
-		var color;
-		do{
-			color = ds.getStyle(node, "background-color");
-			// Safari doesn't say "transparent"
-			if(color.toLowerCase() == "rgba(0, 0, 0, 0)") { color = "transparent"; }
-			if(node == document.getElementsByTagName("body")[0]) { node = null; break; }
-			node = node.parentNode;
-		}while(node && dojo.lang.inArray(color, ["transparent", ""]));
-		if(color == "transparent"){
-			color = [255, 255, 255, 0];
-		}else{
-			color = dojo.graphics.color.extractRGB(color);
-		}
-		return color;
-	}
-
-	ds.getComputedStyle = function(node, cssSelector, inValue){
-		node = dojo.byId(node);
-		// cssSelector may actually be in camel case, so force selector version
-		var cssSelector = ds.toSelectorCase(cssSelector);
-		var property = ds.toCamelCase(cssSelector);
-		if(!node || !node.style){
-			return inValue;
-		}else if(document.defaultView){ // W3, gecko, KHTML
-			try{			
-				var cs = document.defaultView.getComputedStyle(node, "");
-				if (cs){ 
-					return cs.getPropertyValue(cssSelector);
-				} 
-			}catch(e){ // reports are that Safari can throw an exception above
-				if (node.style.getPropertyValue){ // W3
-					return node.style.getPropertyValue(cssSelector);
-				}else return inValue;
-			}
-		}else if(node.currentStyle){ // IE
-			return node.currentStyle[property];
-		}if(node.style.getPropertyValue){ // W3
-			return node.style.getPropertyValue(cssSelector);
-		}else{
-			return inValue;
-		}
-	}
-
-	/** 
-	 * Retrieve a property value from a node's style object.
-	 */
-	ds.getStyleProperty = function(node, cssSelector){
-		node = dojo.byId(node);
-		// FIXME: should we use node.style.getPropertyValue over style[property]?
-		// style[property] works in all (modern) browsers, getPropertyValue is W3 but not supported in IE
-		// FIXME: what about runtimeStyle?
-		return (node && node.style ? node.style[ds.toCamelCase(cssSelector)] : undefined);
-	}
-
-	/** 
-	 * Retrieve a property value from a node's style object.
-	 */
-	ds.getStyle = function(node, cssSelector){
-		var value = ds.getStyleProperty(node, cssSelector);
-		return (value ? value : ds.getComputedStyle(node, cssSelector));
-	}
-
-	ds.setStyle = function(node, cssSelector, value){
-		node = dojo.byId(node);
-		if(node && node.style){
-			var camelCased = ds.toCamelCase(cssSelector);
-			node.style[camelCased] = value;
-		}
-	}
-
-	ds.toCamelCase = function(selector) {
-		var arr = selector.split('-'), cc = arr[0];
-		for(var i = 1; i < arr.length; i++) {
-			cc += arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
-		}
-		return cc;		
-	}
-
-	ds.toSelectorCase = function(selector) {
-		return selector.replace(/([A-Z])/g, "-$1" ).toLowerCase() ;
-	}
-
-	/* float between 0.0 (transparent) and 1.0 (opaque) */
-	ds.setOpacity = function setOpacity(node, opacity, dontFixOpacity) {
-		node = dojo.byId(node);
-		if(!dontFixOpacity){
-			if( opacity >= 1.0){
-				if(h.ie){
-					ds.clearOpacity(node);
-					return;
-				}else{
-					opacity = 0.999999;
-				}
-			}else if( opacity < 0.0){ opacity = 0; }
-		}
-		if(h.ie){
-			if(node.nodeName.toLowerCase() == "tr"){
-				// FIXME: is this too naive? will we get more than we want?
-				var tds = node.getElementsByTagName("td");
-				for(var x=0; x<tds.length; x++){
-					tds[x].style.filter = "Alpha(Opacity="+opacity*100+")";
-				}
-			}
-			node.style.filter = "Alpha(Opacity="+opacity*100+")";
-		}else if(h.moz){
-			node.style.opacity = opacity; // ffox 1.0 directly supports "opacity"
-			node.style.MozOpacity = opacity;
-		}else if(h.safari){
-			node.style.opacity = opacity; // 1.3 directly supports "opacity"
-			node.style.KhtmlOpacity = opacity;
-		}else{
-			node.style.opacity = opacity;
-		}
-	}
-		
-	ds.getOpacity = function getOpacity (node){
-		node = dojo.byId(node);
-		if(h.ie){
-			var opac = (node.filters && node.filters.alpha &&
-				typeof node.filters.alpha.opacity == "number"
-				? node.filters.alpha.opacity : 100) / 100;
-		}else{
-			var opac = node.style.opacity || node.style.MozOpacity ||
-				node.style.KhtmlOpacity || 1;
-		}
-		return opac >= 0.999999 ? 1.0 : Number(opac);
-	}
-
-	ds.clearOpacity = function clearOpacity(node){
-		node = dojo.byId(node);
-		var ns = node.style;
-		if(h.ie){
-			try {
-				if( node.filters && node.filters.alpha ){
-					ns.filter = ""; // FIXME: may get rid of other filter effects
-				}
-			} catch(e) {
-				/*
-				 * IE7 gives error if node.filters not set;
-				 * don't know why or how to workaround (other than this)
-				 */
-			}
-		}else if(h.moz){
-			ns.opacity = 1;
-			ns.MozOpacity = 1;
-		}else if(h.safari){
-			ns.opacity = 1;
-			ns.KhtmlOpacity = 1;
-		}else{
-			ns.opacity = 1;
-		}
-	}
-
-	/** 
-	* Set the given style attributes for the node. 
-	* Patch submitted by Wolfram Kriesing, 22/03/2006.
-	*
-	* Ie. dojo.style.setStyleAttributes(myNode, "position:absolute; left:10px; top:10px;") 
-	* This just makes it easier to set a style directly without the need to  
-	* override it completely (as node.setAttribute() would). 
-	* If there is a dojo-method for an attribute, like for "opacity" there 
-	* is setOpacity, the dojo method is called instead. 
-	* For example: dojo.style.setStyleAttributes(myNode, "opacity: .4"); 
-	*  
-	* Additionally all the dojo.style.set* methods can also be used. 
-	* Ie. when attributes contains "outer-height: 10;" it will call dojo.style.setOuterHeight("10"); 
-	* 
-	* @param object The node to set the style attributes for. 
-	* @param string Ie. "position:absolute; left:10px; top:10px;" 
-	*/ 
-	ds.setStyleAttributes = function(node, attributes) { 
-		var methodMap={ 
-			"opacity":dojo.style.setOpacity,
-			"content-height":dojo.style.setContentHeight,
-			"content-width":dojo.style.setContentWidth,
-			"outer-height":dojo.style.setOuterHeight,
-			"outer-width":dojo.style.setOuterWidth 
-		} 
-
-		var splittedAttribs=attributes.replace(/(;)?\s*$/, "").split(";"); 
-		for(var i=0; i<splittedAttribs.length; i++){ 
-			var nameValue=splittedAttribs[i].split(":"); 
-			var name=nameValue[0].replace(/\s*$/, "").replace(/^\s*/, "").toLowerCase();
-			var value=nameValue[1].replace(/\s*$/, "").replace(/^\s*/, "");
-			if(dojo.lang.has(methodMap,name)) { 
-				methodMap[name](node,value); 
-			} else { 
-				node.style[dojo.style.toCamelCase(name)]=value; 
-			} 
-		} 
-	} 
-
-	ds._toggle = function(node, tester, setter){
-		node = dojo.byId(node);
-		setter(node, !tester(node));
-		return tester(node);
-	}
-
-	// show/hide are library constructs
-
-	// show() 
-	// if the node.style.display == 'none' then 
-	// set style.display to '' or the value cached by hide()
-	ds.show = function(node){
-		node = dojo.byId(node);
-		if(ds.getStyleProperty(node, 'display')=='none'){
-			ds.setStyle(node, 'display', (node.dojoDisplayCache||''));
-			node.dojoDisplayCache = undefined;	// cannot use delete on a node in IE6
-		}
-	}
-
-	// if the node.style.display == 'none' then 
-	// set style.display to '' or the value cached by hide()
-	ds.hide = function(node){
-		node = dojo.byId(node);
-		if(typeof node["dojoDisplayCache"] == "undefined"){ // it could == '', so we cannot say !node.dojoDisplayCount
-			var d = ds.getStyleProperty(node, 'display')
-			if(d!='none'){
-				node.dojoDisplayCache = d;
-			}
-		}
-		ds.setStyle(node, 'display', 'none');
-	}
-
-	// setShowing() calls show() if showing is true, hide() otherwise
-	ds.setShowing = function(node, showing){
-		ds[(showing ? 'show' : 'hide')](node);
-	}
-
-	// isShowing() is true if the node.style.display is not 'none'
-	// FIXME: returns true if node is bad, isHidden would be easier to make correct
-	ds.isShowing = function(node){
-		return (ds.getStyleProperty(node, 'display') != 'none');
-	}
-
-	// Call setShowing() on node with the complement of isShowing(), then return the new value of isShowing()
-	ds.toggleShowing = function(node){
-		return ds._toggle(node, ds.isShowing, ds.setShowing);
-	}
-
-	// display is a CSS concept
-
-	// Simple mapping of tag names to display values
-	// FIXME: simplistic 
-	ds.displayMap = { tr: '', td: '', th: '', img: 'inline', span: 'inline', input: 'inline', button: 'inline' };
-
-	// Suggest a value for the display property that will show 'node' based on it's tag
-	ds.suggestDisplayByTagName = function(node)
-	{
-		node = dojo.byId(node);
-		if(node && node.tagName){
-			var tag = node.tagName.toLowerCase();
-			return (tag in ds.displayMap ? ds.displayMap[tag] : 'block');
-		}
-	}
-
-	// setDisplay() sets the value of style.display to value of 'display' parameter if it is a string.
-	// Otherwise, if 'display' is false, set style.display to 'none'.
-	// Finally, set 'display' to a suggested display value based on the node's tag
-	ds.setDisplay = function(node, display){
-		ds.setStyle(node, 'display', (dojo.lang.isString(display) ? display : (display ? ds.suggestDisplayByTagName(node) : 'none')));
-	}
-
-	// isDisplayed() is true if the the computed display style for node is not 'none'
-	// FIXME: returns true if node is bad, isNotDisplayed would be easier to make correct
-	ds.isDisplayed = function(node){
-		return (ds.getComputedStyle(node, 'display') != 'none');
-	}
-
-	// Call setDisplay() on node with the complement of isDisplayed(), then
-	// return the new value of isDisplayed()
-	ds.toggleDisplay = function(node){
-		return ds._toggle(node, ds.isDisplayed, ds.setDisplay);
-	}
-
-	// visibility is a CSS concept
-
-	// setVisibility() sets the value of style.visibility to value of
-	// 'visibility' parameter if it is a string.
-	// Otherwise, if 'visibility' is false, set style.visibility to 'hidden'.
-	// Finally, set style.visibility to 'visible'.
-	ds.setVisibility = function(node, visibility){
-		ds.setStyle(node, 'visibility', (dojo.lang.isString(visibility) ? visibility : (visibility ? 'visible' : 'hidden')));
-	}
-
-	// isVisible() is true if the the computed visibility style for node is not 'hidden'
-	// FIXME: returns true if node is bad, isInvisible would be easier to make correct
-	ds.isVisible = function(node){
-		return (ds.getComputedStyle(node, 'visibility') != 'hidden');
-	}
-
-	// Call setVisibility() on node with the complement of isVisible(), then
-	// return the new value of isVisible()
-	ds.toggleVisibility = function(node){
-		return ds._toggle(node, ds.isVisible, ds.setVisibility);
-	}
-
-	// in: coordinate array [x,y,w,h] or dom node
-	// return: coordinate array
-	ds.toCoordinateArray = function(coords, includeScroll) {
-		if(dojo.lang.isArray(coords)){
-			// coords is already an array (of format [x,y,w,h]), just return it
-			while ( coords.length < 4 ) { coords.push(0); }
-			while ( coords.length > 4 ) { coords.pop(); }
-			var ret = coords;
-		} else {
-			// coords is an dom object (or dom object id); return it's coordinates
-			var node = dojo.byId(coords);
-			var pos = ds.getAbsolutePosition(node, includeScroll);
-			var ret = [
-				pos.x,
-				pos.y,
-				ds.getBorderBoxWidth(node),
-				ds.getBorderBoxHeight(node)
-			];
-		}
-		ret.x = ret[0];
-		ret.y = ret[1];
-		ret.w = ret[2];
-		ret.h = ret[3];
-		return ret;
-	};
-})();
-
-dojo.provide("dojo.html");
-
-dojo.require("dojo.lang.func");
-dojo.require("dojo.dom");
-dojo.require("dojo.style");
-dojo.require("dojo.string");
-
-dojo.lang.mixin(dojo.html, dojo.dom);
-dojo.lang.mixin(dojo.html, dojo.style);
-
-// FIXME: we are going to assume that we can throw any and every rendering
-// engine into the IE 5.x box model. In Mozilla, we do this w/ CSS.
-// Need to investigate for KHTML and Opera
-
-dojo.html.clearSelection = function(){
-	try{
-		if(window["getSelection"]){ 
-			if(dojo.render.html.safari){
-				// pulled from WebCore/ecma/kjs_window.cpp, line 2536
-				window.getSelection().collapse();
-			}else{
-				window.getSelection().removeAllRanges();
-			}
-		}else if(document.selection){
-			if(document.selection.empty){
-				document.selection.empty();
-			}else if(document.selection.clear){
-				document.selection.clear();
-			}
-		}
-		return true;
-	}catch(e){
-		dojo.debug(e);
-		return false;
-	}
-}
-
-dojo.html.disableSelection = function(element){
-	element = dojo.byId(element)||document.body;
-	var h = dojo.render.html;
-	
-	if(h.mozilla){
-		element.style.MozUserSelect = "none";
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "none"; 
-	}else if(h.ie){
-		element.unselectable = "on";
-	}else{
-		return false;
-	}
-	return true;
-}
-
-dojo.html.enableSelection = function(element){
-	element = dojo.byId(element)||document.body;
-	
-	var h = dojo.render.html;
-	if(h.mozilla){ 
-		element.style.MozUserSelect = ""; 
-	}else if(h.safari){
-		element.style.KhtmlUserSelect = "";
-	}else if(h.ie){
-		element.unselectable = "off";
-	}else{
-		return false;
-	}
-	return true;
-}
-
-dojo.html.selectElement = function(element){
-	element = dojo.byId(element);
-	if(document.selection && document.body.createTextRange){ // IE
-		var range = document.body.createTextRange();
-		range.moveToElementText(element);
-		range.select();
-	}else if(window["getSelection"]){
-		var selection = window.getSelection();
-		// FIXME: does this work on Safari?
-		if(selection["selectAllChildren"]){ // Mozilla
-			selection.selectAllChildren(element);
-		}
-	}
-}
-
-dojo.html.selectInputText = function(element){
-	element = dojo.byId(element);
-	if(document.selection && document.body.createTextRange){ // IE
-		var range = element.createTextRange();
-		range.moveStart("character", 0);
-		range.moveEnd("character", element.value.length);
-		range.select();
-	}else if(window["getSelection"]){
-		var selection = window.getSelection();
-		// FIXME: does this work on Safari?
-		element.setSelectionRange(0, element.value.length);
-	}
-	element.focus();
-}
-
-
-dojo.html.isSelectionCollapsed = function(){
-	if(document["selection"]){ // IE
-		return document.selection.createRange().text == "";
-	}else if(window["getSelection"]){
-		var selection = window.getSelection();
-		if(dojo.lang.isString(selection)){ // Safari
-			return selection == "";
-		}else{ // Mozilla/W3
-			return selection.isCollapsed;
-		}
-	}
-}
-
-dojo.html.getEventTarget = function(evt){
-	if(!evt) { evt = window.event || {} };
-	var t = (evt.srcElement ? evt.srcElement : (evt.target ? evt.target : null));
-	while((t)&&(t.nodeType!=1)){ t = t.parentNode; }
-	return t;
-}
-
-dojo.html.getDocumentWidth = function(){
-	dojo.deprecated("dojo.html.getDocument*", "replaced by dojo.html.getViewport*", "0.4");
-	return dojo.html.getViewportWidth();
-}
-
-dojo.html.getDocumentHeight = function(){
-	dojo.deprecated("dojo.html.getDocument*", "replaced by dojo.html.getViewport*", "0.4");
-	return dojo.html.getViewportHeight();
-}
-
-dojo.html.getDocumentSize = function(){
-	dojo.deprecated("dojo.html.getDocument*", "replaced of dojo.html.getViewport*", "0.4");
-	return dojo.html.getViewportSize();
-}
-
-dojo.html.getViewportWidth = function(){
-	var w = 0;
-
-	if(window.innerWidth){
-		w = window.innerWidth;
-	}
-
-	if(dojo.exists(document, "documentElement.clientWidth")){
-		// IE6 Strict
-		var w2 = document.documentElement.clientWidth;
-		// this lets us account for scrollbars
-		if(!w || w2 && w2 < w) {
-			w = w2;
-		}
-		return w;
-	}
-
-	if(document.body){
-		// IE
-		return document.body.clientWidth;
-	}
-
-	return 0;
-}
-
-dojo.html.getViewportHeight = function(){
-	if (window.innerHeight){
-		return window.innerHeight;
-	}
-
-	if (dojo.exists(document, "documentElement.clientHeight")){
-		// IE6 Strict
-		return document.documentElement.clientHeight;
-	}
-
-	if (document.body){
-		// IE
-		return document.body.clientHeight;
-	}
-
-	return 0;
-}
-
-dojo.html.getViewportSize = function(){
-	var ret = [dojo.html.getViewportWidth(), dojo.html.getViewportHeight()];
-	ret.w = ret[0];
-	ret.h = ret[1];
-	return ret;
-}
-
-dojo.html.getScrollTop = function(){
-	return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
-}
-
-dojo.html.getScrollLeft = function(){
-	return window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;
-}
-
-dojo.html.getScrollOffset = function(){
-	var off = [dojo.html.getScrollLeft(), dojo.html.getScrollTop()];
-	off.x = off[0];
-	off.y = off[1];
-	return off;
-}
-
-dojo.html.getParentOfType = function(node, type){
-	dojo.deprecated("dojo.html.getParentOfType", "replaced by dojo.html.getParentByType*", "0.4");
-	return dojo.html.getParentByType(node, type);
-}
-
-dojo.html.getParentByType = function(node, type) {
-	var parent = dojo.byId(node);
-	type = type.toLowerCase();
-	while((parent)&&(parent.nodeName.toLowerCase()!=type)){
-		if(parent==(document["body"]||document["documentElement"])){
-			return null;
-		}
-		parent = parent.parentNode;
-	}
-	return parent;
-}
-
-// RAR: this function comes from nwidgets and is more-or-less unmodified.
-// We should probably look ant Burst and f(m)'s equivalents
-dojo.html.getAttribute = function(node, attr){
-	node = dojo.byId(node);
-	// FIXME: need to add support for attr-specific accessors
-	if((!node)||(!node.getAttribute)){
-		// if(attr !== 'nwType'){
-		//	alert("getAttr of '" + attr + "' with bad node"); 
-		// }
-		return null;
-	}
-	var ta = typeof attr == 'string' ? attr : new String(attr);
-
-	// first try the approach most likely to succeed
-	var v = node.getAttribute(ta.toUpperCase());
-	if((v)&&(typeof v == 'string')&&(v!="")){ return v; }
-
-	// try returning the attributes value, if we couldn't get it as a string
-	if(v && v.value){ return v.value; }
-
-	// this should work on Opera 7, but it's a little on the crashy side
-	if((node.getAttributeNode)&&(node.getAttributeNode(ta))){
-		return (node.getAttributeNode(ta)).value;
-	}else if(node.getAttribute(ta)){
-		return node.getAttribute(ta);
-	}else if(node.getAttribute(ta.toLowerCase())){
-		return node.getAttribute(ta.toLowerCase());
-	}
-	return null;
-}
-	
-/**
- *	Determines whether or not the specified node carries a value for the
- *	attribute in question.
- */
-dojo.html.hasAttribute = function(node, attr){
-	node = dojo.byId(node);
-	return dojo.html.getAttribute(node, attr) ? true : false;
-}
-	
-/**
- * Returns the string value of the list of CSS classes currently assigned
- * directly to the node in question. Returns an empty string if no class attribute
- * is found;
- */
-dojo.html.getClass = function(node){
-	node = dojo.byId(node);
-	if(!node){ return ""; }
-	var cs = "";
-	if(node.className){
-		cs = node.className;
-	}else if(dojo.html.hasAttribute(node, "class")){
-		cs = dojo.html.getAttribute(node, "class");
-	}
-	return dojo.string.trim(cs);
-}
-
-/**
- * Returns an array of CSS classes currently assigned
- * directly to the node in question. Returns an empty array if no classes
- * are found;
- */
-dojo.html.getClasses = function(node) {
-	var c = dojo.html.getClass(node);
-	return (c == "") ? [] : c.split(/\s+/g);
-}
-
-/**
- * Returns whether or not the specified classname is a portion of the
- * class list currently applied to the node. Does not cover cascaded
- * styles, only classes directly applied to the node.
- */
-dojo.html.hasClass = function(node, classname){
-	return dojo.lang.inArray(dojo.html.getClasses(node), classname);
-}
-
-/**
- * Adds the specified class to the beginning of the class list on the
- * passed node. This gives the specified class the highest precidence
- * when style cascading is calculated for the node. Returns true or
- * false; indicating success or failure of the operation, respectively.
- */
-dojo.html.prependClass = function(node, classStr){
-	classStr += " " + dojo.html.getClass(node);
-	return dojo.html.setClass(node, classStr);
-}
-
-/**
- * Adds the specified class to the end of the class list on the
- *	passed &node;. Returns &true; or &false; indicating success or failure.
- */
-dojo.html.addClass = function(node, classStr){
-	if (dojo.html.hasClass(node, classStr)) {
-	  return false;
-	}
-	classStr = dojo.string.trim(dojo.html.getClass(node) + " " + classStr);
-	return dojo.html.setClass(node, classStr);
-}
-
-/**
- *	Clobbers the existing list of classes for the node, replacing it with
- *	the list given in the 2nd argument. Returns true or false
- *	indicating success or failure.
- */
-dojo.html.setClass = function(node, classStr){
-	node = dojo.byId(node);
-	var cs = new String(classStr);
-	try{
-		if(typeof node.className == "string"){
-			node.className = cs;
-		}else if(node.setAttribute){
-			node.setAttribute("class", classStr);
-			node.className = cs;
-		}else{
-			return false;
-		}
-	}catch(e){
-		dojo.debug("dojo.html.setClass() failed", e);
-	}
-	return true;
-}
-
-/**
- * Removes the className from the node;. Returns
- * true or false indicating success or failure.
- */ 
-dojo.html.removeClass = function(node, classStr, allowPartialMatches){
-	var classStr = dojo.string.trim(new String(classStr));
-
-	try{
-		var cs = dojo.html.getClasses(node);
-		var nca	= [];
-		if(allowPartialMatches){
-			for(var i = 0; i<cs.length; i++){
-				if(cs[i].indexOf(classStr) == -1){ 
-					nca.push(cs[i]);
-				}
-			}
-		}else{
-			for(var i=0; i<cs.length; i++){
-				if(cs[i] != classStr){ 
-					nca.push(cs[i]);
-				}
-			}
-		}
-		dojo.html.setClass(node, nca.join(" "));
-	}catch(e){
-		dojo.debug("dojo.html.removeClass() failed", e);
-	}
-
-	return true;
-}
-
-/**
- * Replaces 'oldClass' and adds 'newClass' to node
- */
-dojo.html.replaceClass = function(node, newClass, oldClass) {
-	dojo.html.removeClass(node, oldClass);
-	dojo.html.addClass(node, newClass);
-}
-
-// Enum type for getElementsByClass classMatchType arg:
-dojo.html.classMatchType = {
-	ContainsAll : 0, // all of the classes are part of the node's class (default)
-	ContainsAny : 1, // any of the classes are part of the node's class
-	IsOnly : 2 // only all of the classes are part of the node's class
-}
-
-
-/**
- * Returns an array of nodes for the given classStr, children of a
- * parent, and optionally of a certain nodeType
- */
-dojo.html.getElementsByClass = function(classStr, parent, nodeType, classMatchType, useNonXpath){
-	parent = dojo.byId(parent) || document;
-	var classes = classStr.split(/\s+/g);
-	var nodes = [];
-	if( classMatchType != 1 && classMatchType != 2 ) classMatchType = 0; // make it enum
-	var reClass = new RegExp("(\\s|^)((" + classes.join(")|(") + "))(\\s|$)");
-	var candidateNodes = [];
-	
-	if(!useNonXpath && document.evaluate) { // supports dom 3 xpath
-		var xpath = "//" + (nodeType || "*") + "[contains(";
-		if(classMatchType != dojo.html.classMatchType.ContainsAny){
-			xpath += "concat(' ',@class,' '), ' " +
-			classes.join(" ') and contains(concat(' ',@class,' '), ' ") +
-			" ')]";
-		}else{
-			xpath += "concat(' ',@class,' '), ' " +
-			classes.join(" ')) or contains(concat(' ',@class,' '), ' ") +
-			" ')]";
-		}
-		var xpathResult = document.evaluate(xpath, parent, null, XPathResult.ANY_TYPE, null);
-		var result = xpathResult.iterateNext();
-		while(result){
-			try{
-				candidateNodes.push(result);
-				result = xpathResult.iterateNext();
-			}catch(e){ break; }
-		}
-		return candidateNodes;
-	}else{
-		if(!nodeType){
-			nodeType = "*";
-		}
-		candidateNodes = parent.getElementsByTagName(nodeType);
-
-		var node, i = 0;
-		outer:
-		while(node = candidateNodes[i++]){
-			var nodeClasses = dojo.html.getClasses(node);
-			if(nodeClasses.length == 0){ continue outer; }
-			var matches = 0;
-	
-			for(var j = 0; j < nodeClasses.length; j++){
-				if(reClass.test(nodeClasses[j])){
-					if(classMatchType == dojo.html.classMatchType.ContainsAny){
-						nodes.push(node);
-						continue outer;
-					}else{
-						matches++;
-					}
-				}else{
-					if(classMatchType == dojo.html.classMatchType.IsOnly){
-						continue outer;
-					}
-				}
-			}
-	
-			if(matches == classes.length){
-				if(	(classMatchType == dojo.html.classMatchType.IsOnly)&&
-					(matches == nodeClasses.length)){
-					nodes.push(node);
-				}else if(classMatchType == dojo.html.classMatchType.ContainsAll){
-					nodes.push(node);
-				}
-			}
-		}
-		return nodes;
-	}
-}
-
-dojo.html.getElementsByClassName = dojo.html.getElementsByClass;
-
-/**
- * Returns the mouse position relative to the document (not the viewport).
- * For example, if you have a document that is 10000px tall,
- * but your browser window is only 100px tall,
- * if you scroll to the bottom of the document and call this function it
- * will return {x: 0, y: 10000}
- */
-dojo.html.getCursorPosition = function(e){
-	e = e || window.event;
-	var cursor = {x:0, y:0};
-	if(e.pageX || e.pageY){
-		cursor.x = e.pageX;
-		cursor.y = e.pageY;
-	}else{
-		var de = document.documentElement;
-		var db = document.body;
-		cursor.x = e.clientX + ((de||db)["scrollLeft"]) - ((de||db)["clientLeft"]);
-		cursor.y = e.clientY + ((de||db)["scrollTop"]) - ((de||db)["clientTop"]);
-	}
-	return cursor;
-}
-
-dojo.html.overElement = function(element, e){
-	element = dojo.byId(element);
-	var mouse = dojo.html.getCursorPosition(e);
-
-	with(dojo.html){
-		var top = getAbsoluteY(element, true);
-		var bottom = top + getInnerHeight(element);
-		var left = getAbsoluteX(element, true);
-		var right = left + getInnerWidth(element);
-	}
-	
-	return (mouse.x >= left && mouse.x <= right &&
-		mouse.y >= top && mouse.y <= bottom);
-}
-
-dojo.html.setActiveStyleSheet = function(title){
-	var i = 0, a, els = document.getElementsByTagName("link");
-	while (a = els[i++]) {
-		if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")){
-			a.disabled = true;
-			if (a.getAttribute("title") == title) { a.disabled = false; }
-		}
-	}
-}
-
-dojo.html.getActiveStyleSheet = function(){
-	var i = 0, a, els = document.getElementsByTagName("link");
-	while (a = els[i++]) {
-		if (a.getAttribute("rel").indexOf("style") != -1 &&
-			a.getAttribute("title") && !a.disabled) { return a.getAttribute("title"); }
-	}
-	return null;
-}
-
-dojo.html.getPreferredStyleSheet = function(){
-	var i = 0, a, els = document.getElementsByTagName("link");
-	while (a = els[i++]) {
-		if(a.getAttribute("rel").indexOf("style") != -1
-			&& a.getAttribute("rel").indexOf("alt") == -1
-			&& a.getAttribute("title")) { return a.getAttribute("title"); }
-	}
-	return null;
-}
-
-dojo.html.body = function(){
-	// Note: document.body is not defined for a strict xhtml document
-	return document.body || document.getElementsByTagName("body")[0];
-}
-
-/**
- * Like dojo.dom.isTag, except case-insensitive
-**/
-dojo.html.isTag = function(node /* ... */) {
-	node = dojo.byId(node);
-	if(node && node.tagName) {
-		var arr = dojo.lang.map(dojo.lang.toArray(arguments, 1),
-			function(a) { return String(a).toLowerCase(); });
-		return arr[ dojo.lang.find(node.tagName.toLowerCase(), arr) ] || "";
-	}
-	return "";
-}
-
-dojo.html.copyStyle = function(target, source){
-	// work around for opera which doesn't have cssText, and for IE which fails on setAttribute 
-	if(dojo.lang.isUndefined(source.style.cssText)){ 
-		target.setAttribute("style", source.getAttribute("style")); 
-	}else{
-		target.style.cssText = source.style.cssText; 
-	}
-	dojo.html.addClass(target, dojo.html.getClass(source));
-}
-
-dojo.html._callExtrasDeprecated = function(inFunc, args) {
-	var module = "dojo.html.extras";
-	dojo.deprecated("dojo.html." + inFunc, "moved to " + module, "0.4");
-	dojo["require"](module); // weird syntax to fool list-profile-deps (build)
-	return dojo.html[inFunc].apply(dojo.html, args);
-}
-
-dojo.html.createNodesFromText = function() {
-	return dojo.html._callExtrasDeprecated('createNodesFromText', arguments);
-}
-
-dojo.html.gravity = function() {
-	return dojo.html._callExtrasDeprecated('gravity', arguments);
-}
-
-dojo.html.placeOnScreen = function() {
-	return dojo.html._callExtrasDeprecated('placeOnScreen', arguments);
-}
-
-dojo.html.placeOnScreenPoint = function() {
-	return dojo.html._callExtrasDeprecated('placeOnScreenPoint', arguments);
-}
-
-dojo.html.renderedTextContent = function() {
-	return dojo.html._callExtrasDeprecated('renderedTextContent', arguments);
-}
-
-dojo.html.BackgroundIframe = function() {
-	return dojo.html._callExtrasDeprecated('BackgroundIframe', arguments);
-}
-
-dojo.provide("dojo.lfx.html");
-dojo.require("dojo.lfx.Animation");
-
-dojo.require("dojo.html");
-
-dojo.lfx.html._byId = function(nodes){
-	if(!nodes){ return []; }
-	if(dojo.lang.isArray(nodes)){
-		if(!nodes.alreadyChecked){
-			var n = [];
-			dojo.lang.forEach(nodes, function(node){
-				n.push(dojo.byId(node));
-			});
-			n.alreadyChecked = true;
-			return n;
-		}else{
-			return nodes;
-		}
-	}else{
-		var n = [];
-		n.push(dojo.byId(nodes));
-		n.alreadyChecked = true;
-		return n;
-	}
-}
-
-dojo.lfx.html.propertyAnimation = function(	/*DOMNode*/ nodes, 
-											/*Array*/ propertyMap, 
-											/*int*/ duration,
-											/*function*/ easing){
-	nodes = dojo.lfx.html._byId(nodes);
-	
-	if(nodes.length==1){
-		// FIXME: we're only supporting start-value filling when one node is
-		// passed
-		
-		dojo.lang.forEach(propertyMap, function(prop){
-			if(typeof prop["start"] == "undefined"){
-				if(prop.property != "opacity"){
-					prop.start = parseInt(dojo.style.getComputedStyle(nodes[0], prop.property));
-				}else{
-					prop.start = dojo.style.getOpacity(nodes[0]);
-				}
-			}
-		});
-	}
-
-	var coordsAsInts = function(coords){
-		var cints = new Array(coords.length);
-		for(var i = 0; i < coords.length; i++){
-			cints[i] = Math.round(coords[i]);
-		}
-		return cints;
-	}
-	var setStyle = function(n, style){
-		n = dojo.byId(n);
-		if(!n || !n.style){ return; }
-		for(var s in style){
-			if(s == "opacity"){
-				dojo.style.setOpacity(n, style[s]);
-			}else{
-				n.style[s] = style[s];
-			}
-		}
-	}
-	var propLine = function(properties){
-		this._properties = properties;
-		this.diffs = new Array(properties.length);
-		dojo.lang.forEach(properties, function(prop, i){
-			// calculate the end - start to optimize a bit
-			if(dojo.lang.isArray(prop.start)){
-				// don't loop through the arrays
-				this.diffs[i] = null;
-			}else if(prop.start instanceof dojo.graphics.color.Color){
-				// save these so we don't have to call toRgb() every getValue() call
-				prop.startRgb = prop.start.toRgb();
-				prop.endRgb = prop.end.toRgb();
-			}else{
-				this.diffs[i] = prop.end - prop.start;
-			}
-		}, this);
-		this.getValue = function(n){
-			var ret = {};
-			dojo.lang.forEach(this._properties, function(prop, i){
-				var value = null;
-				if(dojo.lang.isArray(prop.start)){
-					// FIXME: what to do here?
-				}else if(prop.start instanceof dojo.graphics.color.Color){
-					value = (prop.units||"rgb") + "(";
-					for(var j = 0 ; j < prop.startRgb.length ; j++){
-						value += Math.round(((prop.endRgb[j] - prop.startRgb[j]) * n) + prop.startRgb[j]) + (j < prop.startRgb.length - 1 ? "," : "");
-					}
-					value += ")";
-				}else{
-					value = ((this.diffs[i]) * n) + prop.start + (prop.property != "opacity" ? prop.units||"px" : "");
-				}
-				ret[dojo.style.toCamelCase(prop.property)] = value;
-			}, this);
-			return ret;
-		}
-	}
-	
-	var anim = new dojo.lfx.Animation({
-		onAnimate: function(propValues){
-			dojo.lang.forEach(nodes, function(node){
-				setStyle(node, propValues);
-			});
-		} }, duration, new propLine(propertyMap), easing);
-	
-	return anim;
-}
-
-dojo.lfx.html._makeFadeable = function(nodes){
-	var makeFade = function(node){
-		if(dojo.render.html.ie){
-			// only set the zoom if the "tickle" value would be the same as the
-			// default
-			if( (node.style.zoom.length == 0) &&
-				(dojo.style.getStyle(node, "zoom") == "normal") ){
-				// make sure the node "hasLayout"
-				// NOTE: this has been tested with larger and smaller user-set text
-				// sizes and works fine
-				node.style.zoom = "1";
-				// node.style.zoom = "normal";
-			}
-			// don't set the width to auto if it didn't already cascade that way.
-			// We don't want to f anyones designs
-			if(	(node.style.width.length == 0) &&
-				(dojo.style.getStyle(node, "width") == "auto") ){
-				node.style.width = "auto";
-			}
-		}
-	}
-	if(dojo.lang.isArrayLike(nodes)){
-		dojo.lang.forEach(nodes, makeFade);
-	}else{
-		makeFade(nodes);
-	}
-}
-
-dojo.lfx.html.fadeIn = function(nodes, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	dojo.lfx.html._makeFadeable(nodes);
-	var anim = dojo.lfx.propertyAnimation(nodes, [
-		{	property: "opacity",
-			start: dojo.style.getOpacity(nodes[0]),
-			end: 1 } ], duration, easing);
-	if(callback){
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ oldOnEnd(); callback(nodes, anim); };
-	}
-
-	return anim;
-}
-
-dojo.lfx.html.fadeOut = function(nodes, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	dojo.lfx.html._makeFadeable(nodes);
-	var anim = dojo.lfx.propertyAnimation(nodes, [
-		{	property: "opacity",
-			start: dojo.style.getOpacity(nodes[0]),
-			end: 0 } ], duration, easing);
-	if(callback){
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ oldOnEnd(); callback(nodes, anim); };
-	}
-
-	return anim;
-}
-
-dojo.lfx.html.fadeShow = function(nodes, duration, easing, callback){
-	var anim = dojo.lfx.html.fadeIn(nodes, duration, easing, callback);
-	var oldBb = (anim["beforeBegin"]) ? dojo.lang.hitch(anim, "beforeBegin") : function(){};
-	anim.beforeBegin = function(){ 
-		oldBb();
-		if(dojo.lang.isArrayLike(nodes)){
-			dojo.lang.forEach(nodes, dojo.style.show);
-		}else{
-			dojo.style.show(nodes);
-		}
-	};
-	
-	return anim;
-}
-
-dojo.lfx.html.fadeHide = function(nodes, duration, easing, callback){
-	var anim = dojo.lfx.html.fadeOut(nodes, duration, easing, function(){
-		if(dojo.lang.isArrayLike(nodes)){
-			dojo.lang.forEach(nodes, dojo.style.hide);
-		}else{
-			dojo.style.hide(nodes);
-		}
-		if(callback){ callback(nodes, anim); }
-	});
-	
-	return anim;
-}
-
-dojo.lfx.html.wipeIn = function(nodes, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var overflow = dojo.style.getStyle(node, "overflow");
-		if(overflow == "visible") {
-			node.style.overflow = "hidden";
-		}
-		node.style.height = "0px";
-		dojo.style.show(node);
-		
-		var anim = dojo.lfx.propertyAnimation(node,
-			[{	property: "height",
-				start: 0,
-				end: node.scrollHeight }], duration, easing);
-		
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ 
-			oldOnEnd(); 
-			node.style.overflow = overflow;
-			node.style.height = "auto";
-			if(callback){ callback(node, anim); }
-		};
-		anims.push(anim);
-	});
-	
-	if(nodes.length > 1){ return dojo.lfx.combine(anims); }
-	else{ return anims[0]; }
-}
-
-dojo.lfx.html.wipeOut = function(nodes, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-	
-	dojo.lang.forEach(nodes, function(node){
-		var overflow = dojo.style.getStyle(node, "overflow");
-		if(overflow == "visible") {
-			node.style.overflow = "hidden";
-		}
-		dojo.style.show(node);
-
-		var anim = dojo.lfx.propertyAnimation(node,
-			[{	property: "height",
-				start: dojo.style.getContentBoxHeight(node),
-				end: 0 } ], duration, easing);
-		
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ 
-			oldOnEnd(); 
-			dojo.style.hide(node);
-			node.style.overflow = overflow;
-			if(callback){ callback(node, anim); }
-		};
-		anims.push(anim);
-	});
-
-	if(nodes.length > 1){ return dojo.lfx.combine(anims); }
-	else { return anims[0]; }
-}
-
-dojo.lfx.html.slideTo = function(nodes, coords, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var top = null;
-		var left = null;
-		
-		var init = (function(){
-			var innerNode = node;
-			return function(){
-				top = innerNode.offsetTop;
-				left = innerNode.offsetLeft;
-
-				if (!dojo.style.isPositionAbsolute(innerNode)) {
-					var ret = dojo.style.abs(innerNode, true);
-					dojo.style.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-					top = ret.y;
-					left = ret.x;
-				}
-			}
-		})();
-		init();
-		
-		var anim = dojo.lfx.propertyAnimation(node,
-			[{	property: "top",
-				start: top,
-				end: coords[0] },
-			{	property: "left",
-				start: left,
-				end: coords[1] }], duration, easing);
-		
-		var oldBb = (anim["beforeBegin"]) ? dojo.lang.hitch(anim, "beforeBegin") : function(){};
-		anim.beforeBegin = function(){ oldBb(); init(); };
-
-		if(callback){
-			var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-			anim.onEnd = function(){ oldOnEnd(); callback(nodes, anim); };
-		}
-
-		anims.push(anim);
-	});
-	
-	if(nodes.length > 1){ return dojo.lfx.combine(anims); }
-	else{ return anims[0]; }
-}
-
-dojo.lfx.html.slideBy = function(nodes, coords, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var top = null;
-		var left = null;
-		
-		var init = (function(){
-			var innerNode = node;
-			return function(){
-				top = node.offsetTop;
-				left = node.offsetLeft;
-
-				if (!dojo.style.isPositionAbsolute(innerNode)) {
-					var ret = dojo.style.abs(innerNode);
-					dojo.style.setStyleAttributes(innerNode, "position:absolute;top:"+ret.y+"px;left:"+ret.x+"px;");
-					top = ret.y;
-					left = ret.x;
-				}
-			}
-		})();
-		init();
-		
-		var anim = dojo.lfx.propertyAnimation(node,
-			[{	property: "top",
-				start: top,
-				end: top+coords[0] },
-			{	property: "left",
-				start: left,
-				end: left+coords[1] }], duration, easing);
-
-		var oldBb = (anim["beforeBegin"]) ? dojo.lang.hitch(anim, "beforeBegin") : function(){};
-		anim.beforeBegin = function(){ oldBb(); init(); };
-
-		if(callback){
-			var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-			anim.onEnd = function(){ oldOnEnd(); callback(nodes, anim); };
-		}
-
-		anims.push(anim);
-	});
-
-	if(nodes.length > 1){ return dojo.lfx.combine(anims); }
-	else{ return anims[0]; }
-}
-
-dojo.lfx.html.explode = function(start, endNode, duration, easing, callback){
-	start = dojo.byId(start);
-	endNode = dojo.byId(endNode);
-	var startCoords = dojo.style.toCoordinateArray(start, true);
-	var outline = document.createElement("div");
-	dojo.html.copyStyle(outline, endNode);
-	with(outline.style){
-		position = "absolute";
-		display = "none";
-	}
-	document.body.appendChild(outline);
-
-	with(endNode.style){
-		visibility = "hidden";
-		display = "block";
-	}
-	var endCoords = dojo.style.toCoordinateArray(endNode, true);
-	with(endNode.style){
-		display = "none";
-		visibility = "visible";
-	}
-
-	var anim = new dojo.lfx.propertyAnimation(outline, [
-		{ property: "height", start: startCoords[3], end: endCoords[3] },
-		{ property: "width", start: startCoords[2], end: endCoords[2] },
-		{ property: "top", start: startCoords[1], end: endCoords[1] },
-		{ property: "left", start: startCoords[0], end: endCoords[0] },
-		{ property: "opacity", start: 0.3, end: 1.0 }
-	], duration, easing);
-	
-	anim.beforeBegin = function(){
-		dojo.style.setDisplay(outline, "block");
-	};
-	anim.onEnd = function(){
-		dojo.style.setDisplay(endNode, "block");
-		outline.parentNode.removeChild(outline);
-	};
-	if(callback){
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ oldOnEnd(); callback(endNode, anim); };
-	}
-	return anim;
-}
-
-dojo.lfx.html.implode = function(startNode, end, duration, easing, callback){
-	startNode = dojo.byId(startNode);
-	end = dojo.byId(end);
-	var startCoords = dojo.style.toCoordinateArray(startNode, true);
-	var endCoords = dojo.style.toCoordinateArray(end, true);
-
-	var outline = document.createElement("div");
-	dojo.html.copyStyle(outline, startNode);
-	dojo.style.setOpacity(outline, 0.3);
-	with(outline.style){
-		position = "absolute";
-		display = "none";
-	}
-	document.body.appendChild(outline);
-
-	var anim = new dojo.lfx.propertyAnimation(outline, [
-		{ property: "height", start: startCoords[3], end: endCoords[3] },
-		{ property: "width", start: startCoords[2], end: endCoords[2] },
-		{ property: "top", start: startCoords[1], end: endCoords[1] },
-		{ property: "left", start: startCoords[0], end: endCoords[0] },
-		{ property: "opacity", start: 1.0, end: 0.3 }
-	], duration, easing);
-	
-	anim.beforeBegin = function(){
-		dojo.style.hide(startNode);
-		dojo.style.show(outline);
-	};
-	anim.onEnd = function(){
-		outline.parentNode.removeChild(outline);
-	};
-	if(callback){
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ oldOnEnd(); callback(startNode, anim); };
-	}
-	return anim;
-}
-
-dojo.lfx.html.highlight = function(nodes, startColor, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var color = dojo.style.getBackgroundColor(node);
-		var bg = dojo.style.getStyle(node, "background-color").toLowerCase();
-		var bgImage = dojo.style.getStyle(node, "background-image");
-		var wasTransparent = (bg == "transparent" || bg == "rgba(0, 0, 0, 0)");
-		while(color.length > 3) { color.pop(); }
-
-		var rgb = new dojo.graphics.color.Color(startColor);
-		var endRgb = new dojo.graphics.color.Color(color);
-
-		var anim = dojo.lfx.propertyAnimation(node, [{
-			property: "background-color",
-			start: rgb,
-			end: endRgb
-		}], duration, easing);
-
-		var oldbb = (anim["beforeBegin"]) ? dojo.lang.hitch(anim, "beforeBegin") : function(){};
-		anim.beforeBegin = function(){ 
-			oldbb();
-			if(bgImage){
-				node.style.backgroundImage = "none";
-			}
-			node.style.backgroundColor = "rgb(" + rgb.toRgb().join(",") + ")";
-		};
-
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ 
-			oldOnEnd();
-			if(bgImage){
-				node.style.backgroundImage = bgImage;
-			}
-			if(wasTransparent){
-				node.style.backgroundColor = "transparent";
-			}
-			if(callback){
-				callback(node, anim);
-			}
-		};
-
-		anims.push(anim);
-	});
-
-	if(nodes.length > 1){ return dojo.lfx.combine(anims); }
-	else{ return anims[0]; }
-}
-
-dojo.lfx.html.unhighlight = function(nodes, endColor, duration, easing, callback){
-	nodes = dojo.lfx.html._byId(nodes);
-	var anims = [];
-
-	dojo.lang.forEach(nodes, function(node){
-		var color = new dojo.graphics.color.Color(dojo.style.getBackgroundColor(node));
-		var rgb = new dojo.graphics.color.Color(endColor);
-
-		var bgImage = dojo.style.getStyle(node, "background-image");
-		
-		var anim = dojo.lfx.propertyAnimation(node, [{
-			property: "background-color",
-			start: color,
-			end: rgb
-		}], duration, easing);
-
-		var oldbb = (anim["beforeBegin"]) ? dojo.lang.hitch(anim, "beforeBegin") : function(){};
-		anim.beforeBegin = function(){ 
-			oldbb();
-			if(bgImage){
-				node.style.backgroundImage = "none";
-			}
-			node.style.backgroundColor = "rgb(" + color.toRgb().join(",") + ")";
-		};
-
-		var oldOnEnd = (anim["onEnd"]) ? dojo.lang.hitch(anim, "onEnd") : function(){};
-		anim.onEnd = function(){ 
-			oldOnEnd();
-			if(callback){
-				callback(node, anim);
-			}
-		};
-
-		anims.push(anim);
-	});
-
-	if(nodes.length > 1){ return dojo.lfx.combine(anims); }
-	else{ return anims[0]; }
-}
-
-dojo.lang.mixin(dojo.lfx, dojo.lfx.html);
-
-dojo.kwCompoundRequire({
-	browser: ["dojo.lfx.html"],
-	dashboard: ["dojo.lfx.html"]
-});
-dojo.provide("dojo.lfx.*");

BIN
main/inc/lib/javascript/dojo/flash6_gateway.swf


+ 0 - 54
main/inc/lib/javascript/dojo/iframe_history.html

@@ -1,54 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-	<title></title>
-	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
-	<script type="text/javascript">
-	// <!--
-	var noInit = false;
-	var domain = "";
-	// document.domain = "localhost";
-	function init(){
-		// parse the query string if there is one to try to get args that
-		// we can act on
-		var sparams = document.location.search;
-		if(sparams.length >= 0){
-			if(sparams.charAt(0) == "?"){
-				sparams = sparams.substring(1);
-			}
-			var ss = (sparams.indexOf("&amp;") >= 0) ? "&amp;" : "&";
-			sparams = sparams.split(ss);
-			for(var x=0; x<sparams.length; x++){
-				var tp = sparams[x].split("=");
-				if(typeof window[tp[0]] != "undefined"){
-					window[tp[0]] = ((tp[1]=="true")||(tp[1]=="false")) ? eval(tp[1]) : tp[1];
-				}
-			}
-		}
-
-		if(noInit){ return; }
-		if(domain.length > 0){
-			document.domain = domain;
-		}
-		if((window.parent != window)&&(window.parent["dojo"])){
-			//Set the page title so IE history shows up with a somewhat correct name.
-			document.title = window.parent.document.title;
-			
-			//Notify parent that we are loaded.
-			var pdj = window.parent.dojo;
-			if(pdj["undo"] && pdj["undo"]["browser"]){
-				pdj.undo.browser.iframeLoaded(null, window.location);
-			}
-		}
-	}
-	// -->
-	</script>
-</head>
-<body onload="try{ init(); }catch(e){ alert(e); }">
-	<h4>The Dojo Toolkit -- iframe_history.html</h4>
-
-	<p>This file is used in Dojo's back/fwd button management.</p>
-</body>
-</html>

+ 0 - 72
main/inc/lib/javascript/dojo/src/AdapterRegistry.js

@@ -1,72 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.AdapterRegistry");
-dojo.require("dojo.lang.func");
-
-dojo.AdapterRegistry = function(){
-    /***
-        A registry to facilitate adaptation.
-
-        Pairs is an array of [name, check, wrap] triples
-        
-        All check/wrap functions in this registry should be of the same arity.
-    ***/
-    this.pairs = [];
-}
-
-dojo.lang.extend(dojo.AdapterRegistry, {
-    register: function (name, check, wrap, /* optional */ override){
-        /***
-			The check function should return true if the given arguments are
-			appropriate for the wrap function.
-
-			If override is given and true, the check function will be given
-			highest priority.  Otherwise, it will be the lowest priority
-			adapter.
-        ***/
-
-        if (override) {
-            this.pairs.unshift([name, check, wrap]);
-        } else {
-            this.pairs.push([name, check, wrap]);
-        }
-    },
-
-    match: function (/* ... */) {
-        /***
-			Find an adapter for the given arguments.
-
-			If no suitable adapter is found, throws NotFound.
-        ***/
-        for(var i = 0; i < this.pairs.length; i++){
-            var pair = this.pairs[i];
-            if(pair[1].apply(this, arguments)){
-                return pair[2].apply(this, arguments);
-            }
-        }
-		throw new Error("No match found");
-        // dojo.raise("No match found");
-    },
-
-    unregister: function (name) {
-        /***
-			Remove a named adapter from the registry
-        ***/
-        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;
-    }
-});

+ 0 - 309
main/inc/lib/javascript/dojo/src/Deferred.js

@@ -1,309 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.Deferred");
-dojo.require("dojo.lang.func");
-
-dojo.Deferred = function(/* optional */ canceller){
-	/*
-	NOTE: this namespace and documentation are imported wholesale 
-		from MochiKit
-
-	Encapsulates a sequence of callbacks in response to a value that
-	may not yet be available.  This is modeled after the Deferred class
-	from Twisted <http://twistedmatrix.com>.
-
-	Why do we want this?  JavaScript has no threads, and even if it did,
-	threads are hard.  Deferreds are a way of abstracting non-blocking
-	events, such as the final response to an XMLHttpRequest.
-
-	The sequence of callbacks is internally represented as a list
-	of 2-tuples containing the callback/errback pair.  For example,
-	the following call sequence::
-
-		var d = new Deferred();
-		d.addCallback(myCallback);
-		d.addErrback(myErrback);
-		d.addBoth(myBoth);
-		d.addCallbacks(myCallback, myErrback);
-
-	is translated into a Deferred with the following internal
-	representation::
-
-		[
-			[myCallback, null],
-			[null, myErrback],
-			[myBoth, myBoth],
-			[myCallback, myErrback]
-		]
-
-	The Deferred also keeps track of its current status (fired).
-	Its status may be one of three things:
-
-		-1: no value yet (initial condition)
-		0: success
-		1: error
-
-	A Deferred will be in the error state if one of the following
-	three conditions are met:
-
-		1. The result given to callback or errback is "instanceof" Error
-		2. The previous callback or errback raised an exception while
-		   executing
-		3. The previous callback or errback returned a value "instanceof"
-			Error
-
-	Otherwise, the Deferred will be in the success state.  The state of
-	the Deferred determines the next element in the callback sequence to
-	run.
-
-	When a callback or errback occurs with the example deferred chain,
-	something equivalent to the following will happen (imagine that
-	exceptions are caught and returned)::
-
-		// d.callback(result) or d.errback(result)
-		if(!(result instanceof Error)){
-			result = myCallback(result);
-		}
-		if(result instanceof Error){
-			result = myErrback(result);
-		}
-		result = myBoth(result);
-		if(result instanceof Error){
-			result = myErrback(result);
-		}else{
-			result = myCallback(result);
-		}
-
-	The result is then stored away in case another step is added to the
-	callback sequence.	Since the Deferred already has a value available,
-	any new callbacks added will be called immediately.
-
-	There are two other "advanced" details about this implementation that
-	are useful:
-
-	Callbacks are allowed to return Deferred instances themselves, so you
-	can build complicated sequences of events with ease.
-
-	The creator of the Deferred may specify a canceller.  The canceller
-	is a function that will be called if Deferred.cancel is called before
-	the Deferred fires.	 You can use this to implement clean aborting of
-	an XMLHttpRequest, etc.	 Note that cancel will fire the deferred with
-	a CancelledError (unless your canceller returns another kind of
-	error), so the errbacks should be prepared to handle that error for
-	cancellable Deferreds.
-
-	*/
-	
-	this.chain = [];
-	this.id = this._nextId();
-	this.fired = -1;
-	this.paused = 0;
-	this.results = [null, null];
-	this.canceller = canceller;
-	this.silentlyCancelled = false;
-};
-
-dojo.lang.extend(dojo.Deferred, {
-	getFunctionFromArgs: function(){
-		var a = arguments;
-		if((a[0])&&(!a[1])){
-			if(dojo.lang.isFunction(a[0])){
-				return a[0];
-			}else if(dojo.lang.isString(a[0])){
-				return dj_global[a[0]];
-			}
-		}else if((a[0])&&(a[1])){
-			return dojo.lang.hitch(a[0], a[1]);
-		}
-		return null;
-	},
-
-	repr: function(){
-		var state;
-		if(this.fired == -1){
-			state = 'unfired';
-		}else if(this.fired == 0){
-			state = 'success';
-		} else {
-			state = 'error';
-		}
-		return 'Deferred(' + this.id + ', ' + state + ')';
-	},
-
-	toString: dojo.lang.forward("repr"),
-
-	_nextId: (function(){
-		var n = 1;
-		return function(){ return n++; };
-	})(),
-
-	cancel: function(){
-		/***
-		Cancels a Deferred that has not yet received a value, or is
-		waiting on another Deferred as its value.
-
-		If a canceller is defined, the canceller is called. If the
-		canceller did not return an error, or there was no canceller,
-		then the errback chain is started with CancelledError.
-		***/
-		if(this.fired == -1){
-			if (this.canceller){
-				this.canceller(this);
-			}else{
-				this.silentlyCancelled = true;
-			}
-			if(this.fired == -1){
-				this.errback(new Error(this.repr()));
-			}
-		}else if(	(this.fired == 0)&&
-					(this.results[0] instanceof dojo.Deferred)){
-			this.results[0].cancel();
-		}
-	},
-			
-
-	_pause: function(){
-		// Used internally to signal that it's waiting on another Deferred
-		this.paused++;
-	},
-
-	_unpause: function(){
-		// Used internally to signal that it's no longer waiting on
-		// another Deferred.
-		this.paused--;
-		if ((this.paused == 0) && (this.fired >= 0)) {
-			this._fire();
-		}
-	},
-
-	_continue: function(res){
-		// Used internally when a dependent deferred fires.
-		this._resback(res);
-		this._unpause();
-	},
-
-	_resback: function(res){
-		// The primitive that means either callback or errback
-		this.fired = ((res instanceof Error) ? 1 : 0);
-		this.results[this.fired] = res;
-		this._fire();
-	},
-
-	_check: function(){
-		if(this.fired != -1){
-			if(!this.silentlyCancelled){
-				dojo.raise("already called!");
-			}
-			this.silentlyCancelled = false;
-			return;
-		}
-	},
-
-	callback: function(res){
-		/*
-		Begin the callback sequence with a non-error value.
-		
-		callback or errback should only be called once on a given
-		Deferred.
-		*/
-		this._check();
-		this._resback(res);
-	},
-
-	errback: function(res){
-		// Begin the callback sequence with an error result.
-		this._check();
-		if(!(res instanceof Error)){
-			res = new Error(res);
-		}
-		this._resback(res);
-	},
-
-	addBoth: function(cb, cbfn){
-		/*
-		Add the same function as both a callback and an errback as the
-		next element on the callback sequence.	This is useful for code
-		that you want to guarantee to run, e.g. a finalizer.
-		*/
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(enclosed, enclosed);
-	},
-
-	addCallback: function(cb, cbfn){
-		// Add a single callback to the end of the callback sequence.
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(enclosed, null);
-	},
-
-	addErrback: function(cb, cbfn){
-		// Add a single callback to the end of the callback sequence.
-		var enclosed = this.getFunctionFromArgs(cb, cbfn);
-		if(arguments.length > 2){
-			enclosed = dojo.lang.curryArguments(null, enclosed, arguments, 2);
-		}
-		return this.addCallbacks(null, enclosed);
-		return this.addCallbacks(null, cbfn);
-	},
-
-	addCallbacks: function (cb, eb) {
-		// Add separate callback and errback to the end of the callback
-		// sequence.
-		this.chain.push([cb, eb])
-		if (this.fired >= 0) {
-			this._fire();
-		}
-		return this;
-	},
-
-	_fire: function(){
-		// Used internally to exhaust the callback sequence when a result
-		// is available.
-		var chain = this.chain;
-		var fired = this.fired;
-		var res = this.results[fired];
-		var self = this;
-		var cb = null;
-		while (chain.length > 0 && this.paused == 0) {
-			// Array
-			var pair = chain.shift();
-			var f = pair[fired];
-			if (f == null) {
-				continue;
-			}
-			try {
-				res = f(res);
-				fired = ((res instanceof Error) ? 1 : 0);
-				if(res instanceof dojo.Deferred) {
-					cb = function(res){
-						self._continue(res);
-					}
-					this._pause();
-				}
-			}catch(err){
-				fired = 1;
-				res = err;
-			}
-		}
-		this.fired = fired;
-		this.results[fired] = res;
-		if((cb)&&(this.paused)){
-			// this is for "tail recursion" in case the dependent
-			// deferred is already fired
-			res.addBoth(cb);
-		}
-	}
-});

+ 0 - 12
main/inc/lib/javascript/dojo/src/animation.js

@@ -1,12 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.animation");
-dojo.require("dojo.animation.Animation");

+ 0 - 217
main/inc/lib/javascript/dojo/src/animation/Animation.js

@@ -1,217 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.animation.Animation");
-dojo.require("dojo.animation.AnimationEvent");
-
-dojo.require("dojo.lang.func");
-dojo.require("dojo.math");
-dojo.require("dojo.math.curves");
-
-/*
-Animation package based off of Dan Pupius' work on Animations:
-http://pupius.co.uk/js/Toolkit.Drawing.js
-*/
-
-dojo.animation.Animation = function(/*dojo.math.curves.Line*/ curve, /*int*/ duration, /*Decimal?*/ accel, /*int?*/ repeatCount, /*int?*/ rate) {
-	// public properties
-	if(dojo.lang.isArray(curve)) {
-		// curve: Array
-		// id: i
-		curve = new dojo.math.curves.Line(curve[0], curve[1]);
-	}
-	this.curve = curve;
-	this.duration = duration;
-	this.repeatCount = repeatCount || 0;
-	this.rate = rate || 25;
-	if(accel) {
-		// accel: Decimal
-		// id: j
-		if(dojo.lang.isFunction(accel.getValue)) {
-			// accel: dojo.math.curves.CatmullRom
-			// id: k
-			this.accel = accel;
-		} else {
-			var i = 0.35*accel+0.5;	// 0.15 <= i <= 0.85
-			this.accel = new dojo.math.curves.CatmullRom([[0], [i], [1]], 0.45);
-		}
-	}
-}
-
-dojo.lang.extend(dojo.animation.Animation, {
-	// public properties
-	curve: null,
-	duration: 0,
-	repeatCount: 0,
-	accel: null,
-
-	// events
-	onBegin: null,
-	onAnimate: null,
-	onEnd: null,
-	onPlay: null,
-	onPause: null,
-	onStop: null,
-	handler: null,
-
-	// "private" properties
-	_animSequence: null,
-	_startTime: null,
-	_endTime: null,
-	_lastFrame: null,
-	_timer: null,
-	_percent: 0,
-	_active: false,
-	_paused: false,
-	_startRepeatCount: 0,
-
-	// public methods
-	play: function(gotoStart) {
-		if( gotoStart ) {
-			clearTimeout(this._timer);
-			this._active = false;
-			this._paused = false;
-			this._percent = 0;
-		} else if( this._active && !this._paused ) {
-			return;
-		}
-
-		this._startTime = new Date().valueOf();
-		if( this._paused ) {
-			this._startTime -= (this.duration * this._percent / 100);
-		}
-		this._endTime = this._startTime + this.duration;
-		this._lastFrame = this._startTime;
-
-		var e = new dojo.animation.AnimationEvent(this, null, this.curve.getValue(this._percent),
-			this._startTime, this._startTime, this._endTime, this.duration, this._percent, 0);
-
-		this._active = true;
-		this._paused = false;
-
-		if( this._percent == 0 ) {
-			if(!this._startRepeatCount) {
-				this._startRepeatCount = this.repeatCount;
-			}
-			e.type = "begin";
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onBegin == "function") { this.onBegin(e); }
-		}
-
-		e.type = "play";
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onPlay == "function") { this.onPlay(e); }
-
-		if(this._animSequence) { this._animSequence._setCurrent(this); }
-
-		this._cycle();
-	},
-
-	pause: function() {
-		clearTimeout(this._timer);
-		if( !this._active ) { return; }
-		this._paused = true;
-		var e = new dojo.animation.AnimationEvent(this, "pause", this.curve.getValue(this._percent),
-			this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent, 0);
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onPause == "function") { this.onPause(e); }
-	},
-
-	playPause: function() {
-		if( !this._active || this._paused ) {
-			this.play();
-		} else {
-			this.pause();
-		}
-	},
-
-	gotoPercent: function(pct, andPlay) {
-		clearTimeout(this._timer);
-		this._active = true;
-		this._paused = true;
-		this._percent = pct;
-		if( andPlay ) { this.play(); }
-	},
-
-	stop: function(gotoEnd) {
-		clearTimeout(this._timer);
-		var step = this._percent / 100;
-		if( gotoEnd ) {
-			step = 1;
-		}
-		var e = new dojo.animation.AnimationEvent(this, "stop", this.curve.getValue(step),
-			this._startTime, new Date().valueOf(), this._endTime, this.duration, this._percent);
-		if(typeof this.handler == "function") { this.handler(e); }
-		if(typeof this.onStop == "function") { this.onStop(e); }
-		this._active = false;
-		this._paused = false;
-	},
-
-	status: function() {
-		if( this._active ) {
-			return this._paused ? "paused" : "playing";
-		} else {
-			return "stopped";
-		}
-	},
-
-	// "private" methods
-	_cycle: function() {
-		clearTimeout(this._timer);
-		if( this._active ) {
-			var curr = new Date().valueOf();
-			var step = (curr - this._startTime) / (this._endTime - this._startTime);
-			var fps = 1000 / (curr - this._lastFrame);
-			this._lastFrame = curr;
-
-			if( step >= 1 ) {
-				step = 1;
-				this._percent = 100;
-			} else {
-				this._percent = step * 100;
-			}
-			
-			// Perform accelleration
-			if(this.accel && this.accel.getValue) {
-				step = this.accel.getValue(step);
-			}
-
-			var e = new dojo.animation.AnimationEvent(this, "animate", this.curve.getValue(step),
-				this._startTime, curr, this._endTime, this.duration, this._percent, Math.round(fps));
-
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onAnimate == "function") { this.onAnimate(e); }
-
-			if( step < 1 ) {
-				this._timer = setTimeout(dojo.lang.hitch(this, "_cycle"), this.rate);
-			} else {
-				e.type = "end";
-				this._active = false;
-				if(typeof this.handler == "function") { this.handler(e); }
-				if(typeof this.onEnd == "function") { this.onEnd(e); }
-
-				if( this.repeatCount > 0 ) {
-					this.repeatCount--;
-					this.play(true);
-				} else if( this.repeatCount == -1 ) {
-					this.play(true);
-				} else {
-					if(this._startRepeatCount) {
-						this.repeatCount = this._startRepeatCount;
-						this._startRepeatCount = 0;
-					}
-					if( this._animSequence ) {
-						this._animSequence._playNext();
-					}
-				}
-			}
-		}
-	}
-});

+ 0 - 40
main/inc/lib/javascript/dojo/src/animation/AnimationEvent.js

@@ -1,40 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.animation.AnimationEvent");
-
-dojo.require("dojo.lang");
-
-dojo.animation.AnimationEvent = function(anim, type, coords, sTime, cTime, eTime, dur, pct, fps) {
-	this.type = type; // "animate", "begin", "end", "play", "pause", "stop"
-	this.animation = anim;
-
-	this.coords = coords;
-	this.x = coords[0];
-	this.y = coords[1];
-	this.z = coords[2];
-
-	this.startTime = sTime;
-	this.currentTime = cTime;
-	this.endTime = eTime;
-
-	this.duration = dur;
-	this.percent = pct;
-	this.fps = fps;
-};
-dojo.lang.extend(dojo.animation.AnimationEvent, {
-	coordsAsInts: function() {
-		var cints = new Array(this.coords.length);
-		for(var i = 0; i < this.coords.length; i++) {
-			cints[i] = Math.round(this.coords[i]);
-		}
-		return cints;
-	}
-});

+ 0 - 136
main/inc/lib/javascript/dojo/src/animation/AnimationSequence.js

@@ -1,136 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.animation.AnimationSequence");
-dojo.require("dojo.animation.AnimationEvent");
-dojo.require("dojo.animation.Animation");
-
-dojo.animation.AnimationSequence = function(repeatCount){
-	this._anims = [];
-	this.repeatCount = repeatCount || 0;
-}
-
-dojo.lang.extend(dojo.animation.AnimationSequence, {
-	repeateCount: 0,
-
-	_anims: [],
-	_currAnim: -1,
-
-	onBegin: null,
-	onEnd: null,
-	onNext: null,
-	handler: null,
-
-	add: function() {
-		for(var i = 0; i < arguments.length; i++) {
-			this._anims.push(arguments[i]);
-			arguments[i]._animSequence = this;
-		}
-	},
-
-	remove: function(anim) {
-		for(var i = 0; i < this._anims.length; i++) {
-			if( this._anims[i] == anim ) {
-				this._anims[i]._animSequence = null;
-				this._anims.splice(i, 1);
-				break;
-			}
-		}
-	},
-
-	removeAll: function() {
-		for(var i = 0; i < this._anims.length; i++) {
-			this._anims[i]._animSequence = null;
-		}
-		this._anims = [];
-		this._currAnim = -1;
-	},
-
-	clear: function() {
-		this.removeAll();
-	},
-
-	play: function(gotoStart) {
-		if( this._anims.length == 0 ) { return; }
-		if( gotoStart || !this._anims[this._currAnim] ) {
-			this._currAnim = 0;
-		}
-		if( this._anims[this._currAnim] ) {
-			if( this._currAnim == 0 ) {
-				var e = {type: "begin", animation: this._anims[this._currAnim]};
-				if(typeof this.handler == "function") { this.handler(e); }
-				if(typeof this.onBegin == "function") { this.onBegin(e); }
-			}
-			this._anims[this._currAnim].play(gotoStart);
-		}
-	},
-
-	pause: function() {
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].pause();
-		}
-	},
-
-	playPause: function() {
-		if( this._anims.length == 0 ) { return; }
-		if( this._currAnim == -1 ) { this._currAnim = 0; }
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].playPause();
-		}
-	},
-
-	stop: function() {
-		if( this._anims[this._currAnim] ) {
-			this._anims[this._currAnim].stop();
-		}
-	},
-
-	status: function() {
-		if( this._anims[this._currAnim] ) {
-			return this._anims[this._currAnim].status();
-		} else {
-			return "stopped";
-		}
-	},
-
-	_setCurrent: function(anim) {
-		for(var i = 0; i < this._anims.length; i++) {
-			if( this._anims[i] == anim ) {
-				this._currAnim = i;
-				break;
-			}
-		}
-	},
-
-	_playNext: function() {
-		if( this._currAnim == -1 || this._anims.length == 0 ) { return; }
-		this._currAnim++;
-		if( this._anims[this._currAnim] ) {
-			var e = {type: "next", animation: this._anims[this._currAnim]};
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onNext == "function") { this.onNext(e); }
-			this._anims[this._currAnim].play(true);
-		} else {
-			var e = {type: "end", animation: this._anims[this._anims.length-1]};
-			if(typeof this.handler == "function") { this.handler(e); }
-			if(typeof this.onEnd == "function") { this.onEnd(e); }
-			if(this.repeatCount > 0) {
-				this._currAnim = 0;
-				this.repeatCount--;
-				this._anims[this._currAnim].play(true);
-			} else if(this.repeatCount == -1) {
-				this._currAnim = 0;
-				this._anims[this._currAnim].play(true);
-			} else {
-				this._currAnim = -1;
-			}
-		}
-	}
-});

+ 0 - 39
main/inc/lib/javascript/dojo/src/animation/Timer.js

@@ -1,39 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.animation.Timer");
-dojo.require("dojo.lang.func");
-
-dojo.animation.Timer = function(intvl){
-	var timer = null;
-	this.isRunning = false;
-	this.interval = intvl;
-
-	this.onTick = function(){};
-	this.onStart = null;
-	this.onStop = null;
-
-	this.setInterval = function(ms){
-		if (this.isRunning) window.clearInterval(timer);
-		this.interval = ms;
-		if (this.isRunning) timer = window.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);
-	};
-
-	this.start = function(){
-		if (typeof this.onStart == "function") this.onStart();
-		this.isRunning = true;
-		timer = window.setInterval(this.onTick, this.interval);
-	};
-	this.stop = function(){
-		if (typeof this.onStop == "function") this.onStop();
-		this.isRunning = false;
-		window.clearInterval(timer);
-	};
-};

+ 0 - 18
main/inc/lib/javascript/dojo/src/animation/__package__.js

@@ -1,18 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.animation.AnimationEvent",
-		"dojo.animation.Animation",
-		"dojo.animation.AnimationSequence"
-	]
-});
-dojo.provide("dojo.animation.*");

+ 0 - 248
main/inc/lib/javascript/dojo/src/behavior.js

@@ -1,248 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.behavior");
-dojo.require("dojo.event.*");
-
-dojo.require("dojo.experimental");
-dojo.experimental("dojo.behavior");
-
-dojo.behavior = new function(){
-	function arrIn(obj, name){
-		if(!obj[name]){ obj[name] = []; }
-		return obj[name];
-	}
-
-	function forIn(obj, scope, func){
-		var tmpObj = {};
-		for(var x in obj){
-			if(typeof tmpObj[x] == "undefined"){
-				if(!func){
-					scope(obj[x], x);
-				}else{
-					func.call(scope, obj[x], x);
-				}
-			}
-		}
-	}
-
-	// FIXME: need a better test so we don't exclude nightly Safari's!
-	this.behaviors = {};
-	this.add = function(behaviorObj){
-		/*	behavior objects are specified in the following format:
-		 *
-		 *	{ 
-		 *	 	"#id": {
-		 *			"found": function(element){
-		 *				// ...
-		 *			},
-		 *
-		 *			"onblah": {targetObj: foo, targetFunc: "bar"},
-		 *
-		 *			"onblarg": "/foo/bar/baz/blarg",
-		 *
-		 *			"onevent": function(evt){
-		 *			},
-		 *
-		 *			"onotherevent: function(evt){
-		 *				// ...
-		 *			}
-		 *		},
-		 *
-		 *		"#id2": {
-		 *			// ...
-		 *		},
-		 *
-		 *		"#id3": function(element){
-		 *			// ...
-		 *		},
-		 *
-		 *		// publish the match on a topic
-		 *		"#id4": "/found/topic/name",
-		 *
-		 *		// match all direct descendants
-		 *		"#id4 > *": function(element){
-		 *			// ...
-		 *		},
-		 *
-		 *		// match the first child node that's an element
-		 *		"#id4 > @firstElement": { ... },
-		 *
-		 *		// match the last child node that's an element
-		 *		"#id4 > @lastElement":  { ... },
-		 *
-		 *		// all elements of type tagname
-		 *		"tagname": {
-		 *			// ...
-		 *		},
-		 *
-		 *		// maps to roughly:
-		 *		//	dojo.lang.forEach(body.getElementsByTagName("tagname1"), function(node){
-		 *		//		dojo.lang.forEach(node.getElementsByTagName("tagname2"), function(node2){
-		 *		//			dojo.lang.forEach(node2.getElementsByTagName("tagname3", function(node3){
-		 *		//				// apply rules
-		 *		//			});
-		 *		//		});
-		 *		//	});
-		 *		"tagname1 tagname2 tagname3": {
-		 *			// ...
-		 *		},
-		 *
-		 *		".classname": {
-		 *			// ...
-		 *		},
-		 *
-		 *		"tagname.classname": {
-		 *			// ...
-		 *		},
-		 *	}
-		 *
-		 *	The "found" method is a generalized handler that's called as soon
-		 *	as the node matches the selector. Rules for values that follow also
-		 *	apply to the "found" key.
-		 *	
-		 *	The "on*" handlers are attached with dojo.event.connect(). If the
-		 *	value is not a function but is rather an object, it's assumed to be
-		 *	the "other half" of a dojo.event.kwConnect() argument object. It
-		 *	may contain any/all properties of such a connection modifier save
-		 *	for the sourceObj and sourceFunc properties which are filled in by
-		 *	the system automatically. If a string is instead encountered, the
-		 *	node publishes the specified event on the topic contained in the
-		 *	string value.
-		 *
-		 *	If the value corresponding to the ID key is a function and not a
-		 *	list, it's treated as though it was the value of "found".
-		 *
-		 */
-
-		var tmpObj = {};
-		forIn(behaviorObj, this, function(behavior, name){
-			var tBehavior = arrIn(this.behaviors, name);
-			if((dojo.lang.isString(behavior))||(dojo.lang.isFunction(behavior))){
-				behavior = { found: behavior };
-			}
-			forIn(behavior, function(rule, ruleName){
-				arrIn(tBehavior, ruleName).push(rule);
-			});
-		});
-	}
-
-	this.apply = function(){
-		dojo.profile.start("dojo.behavior.apply");
-		var r = dojo.render.html;
-		// note, we apply one way for fast queries and one way for slow
-		// iteration. So be it.
-		var safariGoodEnough = (!r.safari);
-		if(r.safari){
-			// Anything over release #420 should work the fast way
-			var uas = r.UA.split("AppleWebKit/")[1];
-			if(parseInt(uas.match(/[0-9.]{3,}/)) >= 420){
-				safariGoodEnough = true;
-			}
-		}
-		if((dj_undef("behaviorFastParse", djConfig) ? (safariGoodEnough) : djConfig["behaviorFastParse"])){
-			this.applyFast();
-		}else{
-			this.applySlow();
-		}
-		dojo.profile.end("dojo.behavior.apply");
-	}
-
-	this.matchCache = {};
-
-	this.elementsById = function(id, handleRemoved){
-		var removed = [];
-		var added = [];
-		arrIn(this.matchCache, id);
-		if(handleRemoved){
-			var nodes = this.matchCache[id];
-			for(var x=0; x<nodes.length; x++){
-				if(nodes[x].id != ""){
-					removed.push(nodes[x]);
-					nodes.splice(x, 1);
-					x--;
-				}
-			}
-		}
-		var tElem = dojo.byId(id);
-		while(tElem){
-			if(!tElem["idcached"]){
-				added.push(tElem);
-			}
-			tElem.id = "";
-			tElem = dojo.byId(id);
-		}
-		this.matchCache[id] = this.matchCache[id].concat(added);
-		dojo.lang.forEach(this.matchCache[id], function(node){
-			node.id = id;
-			node.idcached = true;
-		});
-		return { "removed": removed, "added": added, "match": this.matchCache[id] };
-	}
-
-	this.applyToNode = function(node, action, ruleSetName){
-		if(typeof action == "string"){
-			dojo.event.topic.registerPublisher(action, node, ruleSetName);
-		}else if(typeof action == "function"){
-			if(ruleSetName == "found"){
-				action(node);
-			}else{
-				dojo.event.connect(node, ruleSetName, action);
-			}
-		}else{
-			action.srcObj = node;
-			action.srcFunc = ruleSetName;
-			dojo.event.kwConnect(action);
-		}
-	}
-
-	this.applyFast = function(){
-		dojo.profile.start("dojo.behavior.applyFast");
-		// fast DOM queries...wheeee!
-		forIn(this.behaviors, function(tBehavior, id){
-			var elems = dojo.behavior.elementsById(id);
-			dojo.lang.forEach(elems.added, 
-				function(elem){
-					forIn(tBehavior, function(ruleSet, ruleSetName){
-						if(dojo.lang.isArray(ruleSet)){
-							dojo.lang.forEach(ruleSet, function(action){
-								dojo.behavior.applyToNode(elem, action, ruleSetName);
-							});
-						}
-					});
-				}
-			);
-		});
-		dojo.profile.end("dojo.behavior.applyFast");
-	}
-	
-	this.applySlow = function(){
-		// iterate. Ugg.
-		dojo.profile.start("dojo.behavior.applySlow");
-		var all = document.getElementsByTagName("*");
-		var allLen = all.length;
-		for(var x=0; x<allLen; x++){
-			var elem = all[x];
-			if((elem.id)&&(!elem["behaviorAdded"])&&(this.behaviors[elem.id])){
-				elem["behaviorAdded"] = true;
-				forIn(this.behaviors[elem.id], function(ruleSet, ruleSetName){
-					if(dojo.lang.isArray(ruleSet)){
-						dojo.lang.forEach(ruleSet, function(action){
-							dojo.behavior.applyToNode(elem, action, ruleSetName);
-						});
-					}
-				});
-			}
-		}
-		dojo.profile.end("dojo.behavior.applySlow");
-	}
-}
-
-dojo.addOnLoad(dojo.behavior, "apply");

+ 0 - 339
main/inc/lib/javascript/dojo/src/bootstrap1.js

@@ -1,339 +0,0 @@
-/**
-* @file bootstrap1.js
-*
-* summary: First file that is loaded that 'bootstraps' the entire dojo library suite.
-* note:  Must run before hostenv_*.js file.
-*
-* @author  Copyright 2004 Mark D. Anderson (mda@discerning.com)
-* TODOC: should the copyright be changed to Dojo Foundation?
-* @license Licensed under the Academic Free License 2.1 http://www.opensource.org/licenses/afl-2.1.php
-*
-* $Id$
-*/
-
-// TODOC: HOW TO DOC THE BELOW?
-// @global: djConfig
-// summary:  
-//		Application code can set the global 'djConfig' prior to loading
-//		the library to override certain global settings for how dojo works.  
-// description:  The variables that can be set are as follows:
-//			- isDebug: false
-//			- allowQueryConfig: false
-//			- baseScriptUri: ""
-//			- baseRelativePath: ""
-//			- libraryScriptUri: ""
-//			- iePreventClobber: false
-//			- ieClobberMinimal: true
-//			- preventBackButtonFix: true
-//			- searchIds: []
-//			- parseWidgets: true
-// TODOC: HOW TO DOC THESE VARIABLES?
-// TODOC: IS THIS A COMPLETE LIST?
-// note:
-//		'djConfig' does not exist under 'dojo.*' so that it can be set before the 
-//		'dojo' variable exists.  
-// note:
-//		Setting any of these variables *after* the library has loaded does nothing at all. 
-// TODOC: is this still true?  Release notes for 0.3 indicated they could be set after load.
-//
-
-
-
-//TODOC:  HOW TO DOC THIS?
-// @global: dj_global
-// summary: 
-//		an alias for the top-level global object in the host environment
-//		(e.g., the window object in a browser).
-// description:  
-//		Refer to 'dj_global' rather than referring to window to ensure your
-//		code runs correctly in contexts other than web browsers (eg: Rhino on a server).
-var dj_global = this;
-
-
-
-function dj_undef(/*String*/ name, /*Object?*/ object){
-	//summary: Returns true if 'name' is defined on 'object' (or globally if 'object' is null).
-	//description: Note that 'defined' and 'exists' are not the same concept.
-	if(object==null){ object = dj_global; }
-	// exception if object is not an Object
-	return (typeof object[name] == "undefined");	// Boolean
-}
-
-
-// make sure djConfig is defined
-if(dj_undef("djConfig")){ 
-	var djConfig = {}; 
-}
-
-
-//TODOC:  HOW TO DOC THIS?
-// dojo is the root variable of (almost all) our public symbols -- make sure it is defined.
-if(dj_undef("dojo")){ 
-	var dojo = {}; 
-}
-
-//TODOC:  HOW TO DOC THIS?
-dojo.version = {
-	// summary: version number of this instance of dojo.
-	major: 0, minor: 3, patch: 1, flag: "",
-	revision: Number("$Rev: 4342 $".match(/[0-9]+/)[0]),
-	toString: function(){
-		with(dojo.version){
-			return major + "." + minor + "." + patch + flag + " (" + revision + ")";	// String
-		}
-	}
-}
-
-dojo.evalProp = function(/*String*/ name, /*Object*/ object, /*Boolean?*/ create){
-	// summary: Returns 'object[name]'.  If not defined and 'create' is true, will return a new Object.
-	// description: 
-	//		Returns null if 'object[name]' is not defined and 'create' is not true.
-	// 		Note: 'defined' and 'exists' are not the same concept.	
-	return (object && !dj_undef(name, object) ? object[name] : (create ? (object[name]={}) : undefined));	// mixed
-}
-
-
-dojo.parseObjPath = function(/*String*/ path, /*Object?*/ context, /*Boolean?*/ create){
-	// summary: Parse string path to an object, and return corresponding object reference and property name.
-	// description: 
-	//		Returns an object with two properties, 'obj' and 'prop'.  
-	//		'obj[prop]' is the reference indicated by 'path'.
-	// path: Path to an object, in the form "A.B.C".
-	// context: Object to use as root of path.  Defaults to 'dj_global'.
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
-	var object = (context != null ? context : dj_global);
-	var names = path.split('.');
-	var prop = names.pop();
-	for (var i=0,l=names.length;i<l && object;i++){
-		object = dojo.evalProp(names[i], object, create);
-	}
-	return {obj: object, prop: prop};	// Object: {obj: Object, prop: String}
-}
-
-
-dojo.evalObjPath = function(/*String*/ path, /*Boolean?*/ create){
-	// summary: Return the value of object at 'path' in the global scope, without using 'eval()'.
-	// path: Path to an object, in the form "A.B.C".
-	// create: If true, Objects will be created at any point along the 'path' that is undefined.
-	if(typeof path != "string"){ 
-		return dj_global; 
-	}
-	// fast path for no periods
-	if(path.indexOf('.') == -1){
-		return dojo.evalProp(path, dj_global, create);		// mixed
-	}
-
-	//MOW: old 'with' syntax was confusing and would throw an error if parseObjPath returned null.
-	var ref = dojo.parseObjPath(path, dj_global, create);
-	if(ref){
-		return dojo.evalProp(ref.prop, ref.obj, create);	// mixed
-	}
-	return null;
-}
-
-// ****************************************************************
-// global public utils
-// TODOC: DO WE WANT TO NOTE THAT THESE ARE GLOBAL PUBLIC UTILS?
-// ****************************************************************
-
-dojo.errorToString = function(/*Error*/ exception){
-	// summary: Return an exception's 'message', 'description' or text.
-
-	// TODO: overriding Error.prototype.toString won't accomplish this?
- 	// 		... since natively generated Error objects do not always reflect such things?
-	if(!dj_undef("message", exception)){
-		return exception.message;		// String
-	}else if(!dj_undef("description", exception)){
-		return exception.description;	// String
-	}else{
-		return exception;				// Error
-	}
-}
-
-
-dojo.raise = function(/*String*/ message, /*Error?*/ exception){
-	// summary: Throw an error message, appending text of 'exception' if provided.
-	// note: Also prints a message to the user using 'dojo.hostenv.println'.
-	if(exception){
-		message = message + ": "+dojo.errorToString(exception);
-	}
-
-	// print the message to the user if hostenv.println is defined
-	try {	dojo.hostenv.println("FATAL: "+message); } catch (e) {}
-
-	throw Error(message);
-}
-
-//Stub functions so things don't break.
-//TODOC:  HOW TO DOC THESE?
-dojo.debug = function(){}
-dojo.debugShallow = function(obj){}
-dojo.profile = { start: function(){}, end: function(){}, stop: function(){}, dump: function(){} };
-
-
-function dj_eval(/*String*/ scriptFragment){ 
-	// summary: Perform an evaluation in the global scope.  Use this rather than calling 'eval()' directly.
-	// description: Placed in a separate function to minimize size of trapped evaluation context.
-	// note:
-	//	 - JSC eval() takes an optional second argument which can be 'unsafe'.
-	//	 - Mozilla/SpiderMonkey eval() takes an optional second argument which is the
-	//  	 scope object for new symbols.
-	return dj_global.eval ? dj_global.eval(scriptFragment) : eval(scriptFragment); 	// mixed
-}
-
-
-
-dojo.unimplemented = function(/*String*/ funcname, /*String?*/ extra){
-	// summary: Throw an exception because some function is not implemented.
-	// extra: Text to append to the exception message.
-	var message = "'" + funcname + "' not implemented";
-	if (extra != null) { message += " " + extra; }
-	dojo.raise(message);
-}
-
-
-dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
-	// summary: Log a debug message to indicate that a behavior has been deprecated.
-	// extra: Text to append to the message.
-	// removal: Text to indicate when in the future the behavior will be removed.
-	var message = "DEPRECATED: " + behaviour;
-	if(extra){ message += " " + extra; }
-	if(removal){ message += " -- will be removed in version: " + removal; }
-	dojo.debug(message);
-}
-
-
-
-dojo.inherits = function(/*Function*/ subclass, /*Function*/ superclass){
-	// summary: Set up inheritance between two classes.
-	if(typeof superclass != 'function'){ 
-		dojo.raise("dojo.inherits: superclass argument ["+superclass+"] must be a function (subclass: [" + subclass + "']");
-	}
-	subclass.prototype = new superclass();
-	subclass.prototype.constructor = subclass;
-	subclass.superclass = superclass.prototype;
-	// DEPRICATED: super is a reserved word, use 'superclass'
-	subclass['super'] = superclass.prototype;
-}
-
-dojo.render = (function(){
-	//TODOC: HOW TO DOC THIS?
-	// summary: Details rendering support, OS and browser of the current environment.
-	// TODOC: is this something many folks will interact with?  If so, we should doc the structure created...
-	function vscaffold(prefs, names){
-		var tmp = {
-			capable: false,
-			support: {
-				builtin: false,
-				plugin: false
-			},
-			prefixes: prefs
-		};
-		for(var prop in names){
-			tmp[prop] = false;
-		}
-		return tmp;
-	}
-
-	return {
-		name: "",
-		ver: dojo.version,
-		os: { win: false, linux: false, osx: false },
-		html: vscaffold(["html"], ["ie", "opera", "khtml", "safari", "moz"]),
-		svg: vscaffold(["svg"], ["corel", "adobe", "batik"]),
-		vml: vscaffold(["vml"], ["ie"]),
-		swf: vscaffold(["Swf", "Flash", "Mm"], ["mm"]),
-		swt: vscaffold(["Swt"], ["ibm"])
-	};
-})();
-
-// ****************************************************************
-// dojo.hostenv methods that must be defined in hostenv_*.js
-// ****************************************************************
-
-/**
- * The interface definining the interaction with the EcmaScript host environment.
-*/
-
-/*
- * None of these methods should ever be called directly by library users.
- * Instead public methods such as loadModule should be called instead.
- */
-dojo.hostenv = (function(){
-	// TODOC:  HOW TO DOC THIS?
-	// summary: Provides encapsulation of behavior that changes across different 'host environments' 
-	//			(different browsers, server via Rhino, etc).
-	// description: None of these methods should ever be called directly by library users.
-	//				Use public methods such as 'loadModule' instead.
-	
-	// default configuration options
-	var config = {
-		isDebug: false,
-		allowQueryConfig: false,
-		baseScriptUri: "",
-		baseRelativePath: "",
-		libraryScriptUri: "",
-		iePreventClobber: false,
-		ieClobberMinimal: true,
-		preventBackButtonFix: true,
-		searchIds: [],
-		parseWidgets: true
-	};
-
-	if (typeof djConfig == "undefined") { djConfig = config; }
-	else {
-		for (var option in config) {
-			if (typeof djConfig[option] == "undefined") {
-				djConfig[option] = config[option];
-			}
-		}
-	}
-
-	return {
-		name_: '(unset)',
-		version_: '(unset)',
-
-
-		getName: function(){ 
-			// sumary: Return the name of the host environment.
-			return this.name_; 	// String
-		},
-
-
-		getVersion: function(){ 
-			// summary: Return the version of the hostenv.
-			return this.version_; // String
-		},
-
-		getText: function(/*String*/ uri){
-			// summary:	Read the plain/text contents at the specified 'uri'.
-			// description: 
-			//			If 'getText()' is not implemented, then it is necessary to override 
-			//			'loadUri()' with an implementation that doesn't rely on it.
-
-			dojo.unimplemented('getText', "uri=" + uri);
-		}
-	};
-})();
-
-
-dojo.hostenv.getBaseScriptUri = function(){
-	// summary: Return the base script uri that other scripts are found relative to.
-	// TODOC: HUH?  This comment means nothing to me.  What other scripts? Is this the path to other dojo libraries?
-	//		MAYBE:  Return the base uri to scripts in the dojo library.	 ???
-	// return: Empty string or a path ending in '/'.
-	if(djConfig.baseScriptUri.length){ 
-		return djConfig.baseScriptUri;
-	}
-
-	// MOW: Why not:
-	//			uri = djConfig.libraryScriptUri || djConfig.baseRelativePath
-	//		??? Why 'new String(...)'
-	var uri = new String(djConfig.libraryScriptUri||djConfig.baseRelativePath);
-	if (!uri) { dojo.raise("Nothing returned by getLibraryScriptUri(): " + uri); }
-
-	// MOW: uri seems to not be actually used.  Seems to be hard-coding to djConfig.baseRelativePath... ???
-	var lastslash = uri.lastIndexOf('/');		// MOW ???
-	djConfig.baseScriptUri = djConfig.baseRelativePath;
-	return djConfig.baseScriptUri;	// String
-}

+ 0 - 174
main/inc/lib/javascript/dojo/src/bootstrap2.js

@@ -1,174 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-//Semicolon is for when this file is integrated with a custom build on one line
-//with some other file's contents. Sometimes that makes things not get defined
-//properly, particularly with the using the closure below to do all the work.
-;(function(){
-	//Don't do this work if dojo.js has already done it.
-	if(typeof dj_usingBootstrap != "undefined"){
-		return;
-	}
-
-	var isRhino = false;
-	var isSpidermonkey = false;
-	var isDashboard = false;
-	if((typeof this["load"] == "function")&&((typeof this["Packages"] == "function")||(typeof this["Packages"] == "object"))){
-		isRhino = true;
-	}else if(typeof this["load"] == "function"){
-		isSpidermonkey  = true;
-	}else if(window.widget){
-		isDashboard = true;
-	}
-
-	var tmps = [];
-	if((this["djConfig"])&&((djConfig["isDebug"])||(djConfig["debugAtAllCosts"]))){
-		tmps.push("debug.js");
-	}
-
-	if((this["djConfig"])&&(djConfig["debugAtAllCosts"])&&(!isRhino)&&(!isDashboard)){
-		tmps.push("browser_debug.js");
-	}
-
-	//Support compatibility packages. Right now this only allows setting one
-	//compatibility package. Might need to revisit later down the line to support
-	//more than one.
-	if((this["djConfig"])&&(djConfig["compat"])){
-		tmps.push("compat/" + djConfig["compat"] + ".js");
-	}
-
-	var loaderRoot = djConfig["baseScriptUri"];
-	if((this["djConfig"])&&(djConfig["baseLoaderUri"])){
-		loaderRoot = djConfig["baseLoaderUri"];
-	}
-
-	for(var x=0; x < tmps.length; x++){
-		var spath = loaderRoot+"src/"+tmps[x];
-		if(isRhino||isSpidermonkey){
-			load(spath);
-		} else {
-			try {
-				document.write("<scr"+"ipt type='text/javascript' src='"+spath+"'></scr"+"ipt>");
-			} catch (e) {
-				var script = document.createElement("script");
-				script.src = spath;
-				document.getElementsByTagName("head")[0].appendChild(script);
-			}
-		}
-	}
-})();
-
-// Localization routines
-
-/**
- * The locale to look for string bundles if none are defined for your locale.  Translations for all strings
- * should be provided in this locale.
- */
-//TODO: this really belongs in translation metadata, not in code
-dojo.fallback_locale = 'en';
-
-/**
- * Returns canonical form of locale, as used by Dojo.  All variants are case-insensitive and are separated by '-'
- * as specified in RFC 3066
- */
-dojo.normalizeLocale = function(locale) {
-	return locale ? locale.toLowerCase() : dojo.locale;
-};
-
-/**
- * requireLocalization() is for loading translated bundles provided within a package in the namespace.
- * Contents are typically strings, but may be any name/value pair, represented in JSON format.
- * A bundle is structured in a program as follows:
- *
- * <package>/
- *  nls/
- *   de/
- *    mybundle.js
- *   de-at/
- *    mybundle.js
- *   en/
- *    mybundle.js
- *   en-us/
- *    mybundle.js
- *   en-gb/
- *    mybundle.js
- *   es/
- *    mybundle.js
- *  ...etc
- *
- * where package is part of the namespace as used by dojo.require().  Each directory is named for a
- * locale as specified by RFC 3066, (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase.
- *
- * For a given locale, string bundles will be loaded for that locale and all general locales above it, as well
- * as a system-specified fallback.  For example, "de_at" will also load "de" and "en".  Lookups will traverse
- * the locales in this order.  A build step can preload the bundles to avoid data redundancy and extra network hits.
- *
- * @param modulename package in which the bundle is found
- * @param bundlename bundle name, typically the filename without the '.js' suffix
- * @param locale the locale to load (optional)  By default, the browser's user locale as defined
- *	in dojo.locale
- */
-dojo.requireLocalization = function(modulename, bundlename, locale /*optional*/){
-
-	dojo.debug("EXPERIMENTAL: dojo.requireLocalization"); //dojo.experimental
-
-	var syms = dojo.hostenv.getModuleSymbols(modulename);
-	var modpath = syms.concat("nls").join("/");
-
-	locale = dojo.normalizeLocale(locale);
-
-	var elements = locale.split('-');
-	var searchlist = [];
-	for(var i = elements.length; i > 0; i--){
-		searchlist.push(elements.slice(0, i).join('-'));
-	}
-	if(searchlist[searchlist.length-1] != dojo.fallback_locale){
-		searchlist.push(dojo.fallback_locale);
-	}
-
-	var bundlepackage = [modulename, "_nls", bundlename].join(".");
-	var bundle = dojo.hostenv.startPackage(bundlepackage);
-	dojo.hostenv.loaded_modules_[bundlepackage] = bundle;
-	
-	var inherit = false;
-	for(var i = searchlist.length - 1; i >= 0; i--){
-		var loc = searchlist[i];
-		var pkg = [bundlepackage, loc].join(".");
-		var loaded = false;
-		if(!dojo.hostenv.findModule(pkg)){
-			// Mark loaded whether it's found or not, so that further load attempts will not be made
-			dojo.hostenv.loaded_modules_[pkg] = null;
-
-			var filespec = [modpath, loc, bundlename].join("/") + '.js';
-			loaded = dojo.hostenv.loadPath(filespec, null, function(hash) {
- 				bundle[loc] = hash;
- 				if(inherit){
-					// Use mixins approach to copy string references from inherit bundle, but skip overrides.
-					for(var x in inherit){
-						if(!bundle[loc][x]){
-							bundle[loc][x] = inherit[x];
-						}
-					}
- 				}
-/*
-				// Use prototype to point to other bundle, then copy in result from loadPath
-				bundle[loc] = new function(){};
-				if(inherit){ bundle[loc].prototype = inherit; }
-				for(var i in hash){ bundle[loc][i] = hash[i]; }
-*/
-			});
-		}else{
-			loaded = true;
-		}
-		if(loaded && bundle[loc]){
-			inherit = bundle[loc];
-		}
-	}
-};

+ 0 - 162
main/inc/lib/javascript/dojo/src/browser_debug.js

@@ -1,162 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.hostenv.loadedUris.push("../src/bootstrap1.js");
-dojo.hostenv.loadedUris.push("../src/loader.js");
-dojo.hostenv.loadedUris.push("../src/hostenv_browser.js");
-dojo.hostenv.loadedUris.push("../src/bootstrap2.js");
-
-function removeComments(contents){
-	contents = new String((!contents) ? "" : contents);
-	// clobber all comments
-	contents = contents.replace( /^(.*?)\/\/(.*)$/mg , "$1");
-	contents = contents.replace( /(\n)/mg , "__DOJONEWLINE");
-	contents = contents.replace( /\/\*(.*?)\*\//g , "");
-	return contents.replace( /__DOJONEWLINE/mg , "\n");
-}
-
-dojo.hostenv.getRequiresAndProvides = function(contents){
-	// FIXME: should probably memoize this!
-	if(!contents){ return []; }
-	
-
-	// check to see if we need to load anything else first. Ugg.
-	var deps = [];
-	var tmp;
-	RegExp.lastIndex = 0;
-	var testExp = /dojo.(hostenv.loadModule|hosetnv.require|require|requireIf|kwCompoundRequire|hostenv.conditionalLoadModule|hostenv.startPackage|provide)\([\w\W]*?\)/mg;
-	while((tmp = testExp.exec(contents)) != null){
-		deps.push(tmp[0]);
-	}
-	return deps;
-}
-
-dojo.hostenv.getDelayRequiresAndProvides = function(contents){
-	// FIXME: should probably memoize this!
-	if(!contents){ return []; }
-
-	// check to see if we need to load anything else first. Ugg.
-	var deps = [];
-	var tmp;
-	RegExp.lastIndex = 0;
-	var testExp = /dojo.(requireAfterIf)\([\w\W]*?\)/mg;
-	while((tmp = testExp.exec(contents)) != null){
-		deps.push(tmp[0]);
-	}
-	return deps;
-}
-
-/*
-dojo.getNonExistantDescendants = function(objpath){
-	var ret = [];
-	// fast path for no periods
-	if(typeof objpath != "string"){ return dj_global; }
-	if(objpath.indexOf('.') == -1){
-		if(dj_undef(objpath, dj_global)){
-			ret.push[objpath];
-		}
-		return ret;
-	}
-
-	var syms = objpath.split(/\./);
-	var obj = dj_global;
-	for(var i=0;i<syms.length;++i){
-		if(dj_undef(syms[i], obj)){
-			for(var j=i; j<syms.length; j++){
-				ret.push(syms.slice(0, j+1).join("."));
-			}
-			break;
-		}
-	}
-	return ret;
-}
-*/
-
-dojo.clobberLastObject = function(objpath){
-	if(objpath.indexOf('.') == -1){
-		if(!dj_undef(objpath, dj_global)){
-			delete dj_global[objpath];
-		}
-		return true;
-	}
-
-	var syms = objpath.split(/\./);
-	var base = dojo.evalObjPath(syms.slice(0, -1).join("."), false);
-	var child = syms[syms.length-1];
-	if(!dj_undef(child, base)){
-		// alert(objpath);
-		delete base[child];
-		return true;
-	}
-	return false;
-}
-
-var removals = [];
-
-function zip(arr){
-	var ret = [];
-	var seen = {};
-	for(var x=0; x<arr.length; x++){
-		if(!seen[arr[x]]){
-			ret.push(arr[x]);
-			seen[arr[x]] = true;
-		}
-	}
-	return ret;
-}
-
-// over-write dj_eval to prevent actual loading of subsequent files
-var old_dj_eval = dj_eval;
-dj_eval = function(){ return true; }
-dojo.hostenv.oldLoadUri = dojo.hostenv.loadUri;
-dojo.hostenv.loadUri = function(uri){
-	if(dojo.hostenv.loadedUris[uri]){
-		return true; // fixes endless recursion opera trac 471
-	}
-	try{
-		var text = this.getText(uri, null, true);
-		var requires = dojo.hostenv.getRequiresAndProvides(text);
-		eval(requires.join(";"));
-		dojo.hostenv.loadedUris.push(uri);
-		dojo.hostenv.loadedUris[uri] = true;
-		var delayRequires = dojo.hostenv.getDelayRequiresAndProvides(text);
-		eval(delayRequires.join(";"));
-	}catch(e){ 
-		alert(e);
-	}
-	return true;
-}
-
-dojo.hostenv.writeIncludes = function(){
-	for(var x=removals.length-1; x>=0; x--){
-		dojo.clobberLastObject(removals[x]);
-	}
-	var depList = [];
-	var seen = {};
-	for(var x=0; x<dojo.hostenv.loadedUris.length; x++){
-		var curi = dojo.hostenv.loadedUris[x];
-		// dojo.debug(curi);
-		if(!seen[curi]){
-			seen[curi] = true;
-			depList.push(curi);
-		}
-	}
-
-	dojo.hostenv._global_omit_module_check = true;
-	for(var x=4; x<depList.length; x++){
-		document.write("<script type='text/javascript' src='"+depList[x]+"'></script>");
-	}
-	document.write("<script type='text/javascript'>dojo.hostenv._global_omit_module_check = false;</script>");
-
-	// turn off debugAtAllCosts, so that dojo.require() calls inside of ContentPane hrefs
-	// work correctly
-	dj_eval = old_dj_eval;
-	dojo.hostenv.loadUri = dojo.hostenv.oldLoadUri;
-}

+ 0 - 146
main/inc/lib/javascript/dojo/src/collections/ArrayList.js

@@ -1,146 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.ArrayList");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.ArrayList=function(/* array? */arr){
-	//	summary
-	//	Returns a new object of type dojo.collections.ArrayList
-	var items=[];
-	if(arr) items=items.concat(arr);
-	this.count=items.length;
-	this.add=function(/* object */obj){
-		//	summary
-		//	Add an element to the collection.
-		items.push(obj);
-		this.count=items.length;
-	};
-	this.addRange=function(/* array */a){
-		//	summary
-		//	Add a range of objects to the ArrayList
-		if(a.getIterator){
-			var e=a.getIterator();
-			while(!e.atEnd()){
-				this.add(e.get());
-			}
-			this.count=items.length;
-		}else{
-			for(var i=0; i<a.length; i++){
-				items.push(a[i]);
-			}
-			this.count=items.length;
-		}
-	};
-	this.clear=function(){
-		//	summary
-		//	Clear all elements out of the collection, and reset the count.
-		items.splice(0, items.length);
-		this.count=0;
-	};
-	this.clone=function(){
-		//	summary
-		//	Clone the array list
-		return new dojo.collections.ArrayList(items);	//	dojo.collections.ArrayList
-	};
-	this.contains=function(/* object */obj){
-		//	summary
-		//	Check to see if the passed object is a member in the ArrayList
-		for(var i=0; i < items.length; i++){
-			if(items[i] == obj) {
-				return true;	//	bool
-			}
-		}
-		return false;	//	bool
-	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
-			Array.forEach(items, fn, s);
-		}else{
-			for(var i=0; i<items.length; i++){
-				fn.call(s, items[i], i, items);
-			}
-		}
-	};
-	this.getIterator=function(){
-		//	summary
-		//	Get an Iterator for this object
-		return new dojo.collections.Iterator(items);	//	dojo.collections.Iterator
-	};
-	this.indexOf=function(/* object */obj){
-		//	summary
-		//	Return the numeric index of the passed object; will return -1 if not found.
-		for(var i=0; i < items.length; i++){
-			if(items[i] == obj) {
-				return i;	//	int
-			}
-		}
-		return -1;	// int
-	};
-	this.insert=function(/* int */ i, /* object */ obj){
-		//	summary
-		//	Insert the passed object at index i
-		items.splice(i,0,obj);
-		this.count=items.length;
-	};
-	this.item=function(/* int */ i){
-		//	summary
-		//	return the element at index i
-		return items[i];	//	object
-	};
-	this.remove=function(/* object */obj){
-		//	summary
-		//	Look for the passed object, and if found, remove it from the internal array.
-		var i=this.indexOf(obj);
-		if(i >=0) {
-			items.splice(i,1);
-		}
-		this.count=items.length;
-	};
-	this.removeAt=function(/* int */ i){
-		//	summary
-		//	return an array with function applied to all elements
-		items.splice(i,1);
-		this.count=items.length;
-	};
-	this.reverse=function(){
-		//	summary
-		//	Reverse the internal array
-		items.reverse();
-	};
-	this.sort=function(/* function? */ fn){
-		//	summary
-		//	sort the internal array
-		if(fn){
-			items.sort(fn);
-		}else{
-			items.sort();
-		}
-	};
-	this.setByIndex=function(/* int */ i, /* object */ obj){
-		//	summary
-		//	Set an element in the array by the passed index.
-		items[i]=obj;
-		this.count=items.length;
-	};
-	this.toArray=function(){
-		//	summary
-		//	Return a new array with all of the items of the internal array concatenated.
-		return [].concat(items);
-	}
-	this.toString=function(/* string */ delim){
-		//	summary
-		//	implementation of toString, follows [].toString();
-		return items.join((delim||","));
-	};
-};

+ 0 - 203
main/inc/lib/javascript/dojo/src/collections/BinaryTree.js

@@ -1,203 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.BinaryTree");
-dojo.require("dojo.collections.Collections");
-dojo.require("dojo.experimental");
-
-dojo.experimental("dojo.collections.BinaryTree");
-
-dojo.collections.BinaryTree=function(data){
-	function node(data, rnode, lnode){
-		this.value=data||null;
-		this.right=rnode||null;
-		this.left=lnode||null;
-		this.clone=function(){
-			var c=new node();
-			if (this.value.value) c.value=this.value.clone();
-			else c.value=this.value;
-			if (this.left) c.left=this.left.clone();
-			if (this.right) c.right=this.right.clone();
-		}
-		this.compare=function(n){
-			if (this.value > n.value) return 1;
-			if (this.value < n.value) return -1;
-			return 0;
-		}
-		this.compareData=function(d){
-			if (this.value > d) return 1;
-			if (this.value < d) return -1;
-			return 0;
-		}
-	}
-
-	function inorderTraversalBuildup(current, a){
-		if (current){
-			inorderTraversalBuildup(current.left, a);
-			a.add(current);
-			inorderTraversalBuildup(current.right, a);
-		}
-	}
-
-	function preorderTraversal(current, sep){
-		var s="";
-		if (current){
-			s=current.value.toString() + sep;
-			s += preorderTraversal(current.left, sep);
-			s += preorderTraversal(current.right, sep);
-		}
-		return s;
-	}
-	function inorderTraversal(current, sep){
-		var s="";
-		if (current){
-			s=inorderTraversal(current.left, sep);
-			s += current.value.toString() + sep;
-			s += inorderTraversal(current.right, sep);
-		}
-		return s;
-	}
-	function postorderTraversal(current, sep){
-		var s="";
-		if (current){
-			s=postorderTraversal(current.left, sep);
-			s += postorderTraversal(current.right, sep);
-			s += current.value.toString() + sep;
-		}
-		return s;
-	}
-	
-	function searchHelper(current, data){
-		if (!current) return null;
-		var i=current.compareData(data);
-		if (i==0) return current;
-		if (i>0) return searchHelper(current.left, data);
-		else return searchHelper(current.right, data);
-	}
-
-	this.add=function(data){
-		var n=new node(data);
-		var i;
-		var current=root;
-		var parent=null;
-		while (current){
-			i=current.compare(n);
-			if (i == 0) return;
-			parent=current;
-			if (i > 0) current=current.left;
-			else current=current.right;
-		}
-		this.count++;
-		if (!parent) root=n;
-		else {
-			i=parent.compare(n);
-			if (i > 0) parent.left=n;
-			else parent.right=n;
-		}
-	};
-	this.clear=function(){
-		root=null;
-		this.count=0;
-	};
-	this.clone=function(){
-		var c=new dojo.collections.BinaryTree();
-		c.root=root.clone();
-		c.count=this.count;
-		return c;
-	};
-	this.contains=function(data){
-		return this.search(data) != null;
-	};
-	this.deleteData=function(data){
-		var current=root;
-		var parent=null;
-		var i=current.compareData(data);
-		while (i != 0 && current != null){
-			if (i > 0){
-				parent=current;
-				current=current.left;
-			} else if (i < 0) {
-				parent=current;
-				current=current.right;
-			}
-			i=current.compareData(data);
-		}
-		if (!current) return;
-		this.count--;
-		if (!current.right) {
-			if (!parent) root=current.left;
-			else {
-				i=parent.compare(current);
-				if (i > 0) parent.left=current.left;
-				else if (i < 0) parent.right=current.left;
-			}
-		} else if (!current.right.left){
-			if (!parent) root=current.right;
-			else {
-				i=parent.compare(current);
-				if (i > 0) parent.left=current.right;
-				else if (i < 0) parent.right=current.right;
-			}
-		} else {
-			var leftmost=current.right.left;
-			var lmParent=current.right;
-			while (leftmost.left != null){
-				lmParent=leftmost;
-				leftmost=leftmost.left;
-			}
-			lmParent.left=leftmost.right;
-			leftmost.left=current.left;
-			leftmost.right=current.right;
-			if (!parent) root=leftmost;
-			else {
-				i=parent.compare(current);
-				if (i > 0) parent.left=leftmost;
-				else if (i < 0) parent.right=leftmost;
-			}
-		}
-	};
-	this.getIterator=function(){
-		var a=[];
-		inorderTraversalBuildup(root, a);
-		return new dojo.collections.Iterator(a);
-	};
-	this.search=function(data){
-		return searchHelper(root, data);
-	};
-	this.toString=function(order, sep){
-		if (!order) var order=dojo.collections.BinaryTree.TraversalMethods.Inorder;
-		if (!sep) var sep=" ";
-		var s="";
-		switch (order){
-			case dojo.collections.BinaryTree.TraversalMethods.Preorder:
-				s=preorderTraversal(root, sep);
-				break;
-			case dojo.collections.BinaryTree.TraversalMethods.Inorder:
-				s=inorderTraversal(root, sep);
-				break;
-			case dojo.collections.BinaryTree.TraversalMethods.Postorder:
-				s=postorderTraversal(root, sep);
-				break;
-		};
-		if (s.length == 0) return "";
-		else return s.substring(0, s.length - sep.length);
-	};
-
-	this.count=0;
-	var root=this.root=null;
-	if (data) {
-		this.add(data);
-	}
-}
-dojo.collections.BinaryTree.TraversalMethods={
-	Preorder : 0,
-	Inorder : 1,
-	Postorder : 2
-};

+ 0 - 125
main/inc/lib/javascript/dojo/src/collections/Collections.js

@@ -1,125 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Collections");
-
-dojo.collections={Collections:true};
-dojo.collections.DictionaryEntry=function(/* string */k, /* object */v){
-	//	summary
-	//	return an object of type dojo.collections.DictionaryEntry
-	this.key=k;
-	this.value=v;
-	this.valueOf=function(){ 
-		return this.value; 	//	object
-	};
-	this.toString=function(){ 
-		return String(this.value);	//	string 
-	};
-}
-
-/*	Iterators
- *	The collections.Iterators (Iterator and DictionaryIterator) are built to
- *	work with the Collections included in this namespace.  However, they *can*
- *	be used with arrays and objects, respectively, should one choose to do so.
- */
-dojo.collections.Iterator=function(/* array */arr){
-	//	summary
-	//	return an object of type dojo.collections.Iterator
-	var a=arr;
-	var position=0;
-	this.element=a[position]||null;
-	this.atEnd=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		return (position>=a.length);	//	bool
-	};
-	this.get=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		if(this.atEnd()){
-			return null;		//	object
-		}
-		this.element=a[position++];
-		return this.element;	//	object
-	};
-	this.map=function(/* function */fn, /* object? */scope){
-		//	summary
-		//	Functional iteration with optional scope.
-		var s=scope||dj_global;
-		if(Array.map){
-			return Array.map(a,fn,s);	//	array
-		}else{
-			var arr=[];
-			for(var i=0; i<a.length; i++){
-				arr.push(fn.call(s,a[i]));
-			}
-			return arr;		//	array
-		}
-	};
-	this.reset=function(){
-		//	summary
-		//	reset the internal cursor.
-		position=0;
-		this.element=a[position];
-	};
-}
-
-/*	Notes:
- *	The DictionaryIterator no longer supports a key and value property;
- *	the reality is that you can use this to iterate over a JS object
- *	being used as a hashtable.
- */
-dojo.collections.DictionaryIterator=function(/* object */obj){
-	//	summary
-	//	return an object of type dojo.collections.DictionaryIterator
-	var a=[];	//	Create an indexing array
-	var testObject={};
-	for(var p in obj){
-		if(!testObject[p]){
-			a.push(obj[p]);	//	fill it up
-		}
-	}
-	var position=0;
-	this.element=a[position]||null;
-	this.atEnd=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		return (position>=a.length);	//	bool
-	};
-	this.get=function(){
-		//	summary
-		//	Test to see if the internal cursor has reached the end of the internal collection.
-		if(this.atEnd()){
-			return null;		//	object
-		}
-		this.element=a[position++];
-		return this.element;	//	object
-	};
-	this.map=function(/* function */fn, /* object? */scope){
-		//	summary
-		//	Functional iteration with optional scope.
-		var s=scope||dj_global;
-		if(Array.map){
-			return Array.map(a,fn,s);	//	array
-		}else{
-			var arr=[];
-			for(var i=0; i<a.length; i++){
-				arr.push(fn.call(s,a[i]));
-			}
-			return arr;		//	array
-		}
-	};
-	this.reset=function() { 
-		//	summary
-		//	reset the internal cursor.
-		position=0; 
-		this.element=a[position];
-	};
-};

+ 0 - 129
main/inc/lib/javascript/dojo/src/collections/Dictionary.js

@@ -1,129 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Dictionary");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.Dictionary=function(/* dojo.collections.Dictionary? */dictionary){
-	//	summary
-	//	Returns an object of type dojo.collections.Dictionary
-	var items={};
-	this.count=0;
-
-	//	comparator for property addition and access.
-	var testObject={};
-
-	this.add=function(/* string */k, /* object */v){
-		//	summary
-		//	Add a new item to the Dictionary.
-		var b=(k in items);
-		items[k]=new dojo.collections.DictionaryEntry(k,v);
-		if(!b){
-			this.count++;
-		}
-	};
-	this.clear=function(){
-		//	summary
-		//	Clears the internal dictionary.
-		items={};
-		this.count=0;
-	};
-	this.clone=function(){
-		//	summary
-		//	Returns a new instance of dojo.collections.Dictionary; note the the dictionary is a clone but items might not be.
-		return new dojo.collections.Dictionary(this);	//	dojo.collections.Dictionary
-	};
-	this.contains=this.containsKey=function(/* string */k){
-		//	summary
-		//	Check to see if the dictionary has an entry at key "k".
-		if(testObject[k]){
-			return false;			// bool
-		}
-		return (items[k]!=null);	//	bool
-	};
-	this.containsValue=function(/* object */v){
-		//	summary
-		//	Check to see if the dictionary has an entry with value "v".
-		var e=this.getIterator();
-		while(e.get()){
-			if(e.element.value==v){
-				return true;	//	bool
-			}
-		}
-		return false;	//	bool
-	};
-	this.entry=function(/* string */k){
-		//	summary
-		//	Accessor method; similar to dojo.collections.Dictionary.item but returns the actual Entry object.
-		return items[k];	//	dojo.collections.DictionaryEntry
-	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var a=[];	//	Create an indexing array
-		for(var p in items) {
-			if(!testObject[p]){
-				a.push(items[p]);	//	fill it up
-			}
-		}
-		var s=scope||dj_global;
-		if(Array.forEach){
-			Array.forEach(a, fn, s);
-		}else{
-			for(var i=0; i<a.length; i++){
-				fn.call(s, a[i], i, a);
-			}
-		}
-	};
-	this.getKeyList=function(){
-		//	summary
-		//	Returns an array of the keys in the dictionary.
-		return (this.getIterator()).map(function(entry){ 
-			return entry.key; 
-		});	//	array
-	};
-	this.getValueList=function(){
-		//	summary
-		//	Returns an array of the values in the dictionary.
-		return (this.getIterator()).map(function(entry){ 
-			return entry.value; 
-		});	//	array
-	};
-	this.item=function(/* string */k){
-		//	summary
-		//	Accessor method.
-		if(k in items){
-			return items[k].valueOf();	//	object
-		}
-		return undefined;	//	object
-	};
-	this.getIterator=function(){
-		//	summary
-		//	Gets a dojo.collections.DictionaryIterator for iteration purposes.
-		return new dojo.collections.DictionaryIterator(items);	//	dojo.collections.DictionaryIterator
-	};
-	this.remove=function(/* string */k){
-		//	summary
-		//	Removes the item at k from the internal collection.
-		if(k in items && !testObject[k]){
-			delete items[k];
-			this.count--;
-			return true;	//	bool
-		}
-		return false;	//	bool
-	};
-
-	if (dictionary){
-		var e=dictionary.getIterator();
-		while(e.get()) {
-			 this.add(e.element.key, e.element.value);
-		}
-	}
-};

+ 0 - 153
main/inc/lib/javascript/dojo/src/collections/Graph.js

@@ -1,153 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Graph");
-dojo.require("dojo.collections.Collections");
-
-dojo.experimental("dojo.collections.Graph");
-
-dojo.collections.Graph=function(nodes){
-	function node(key, data, neighbors) {
-		this.key=key;
-		this.data=data;
-		this.neighbors=neighbors||new adjacencyList();
-		this.addDirected=function(){
-			if (arguments[0].constructor==edgeToNeighbor){
-				this.neighbors.add(arguments[0]);
-			}else{
-				var n=arguments[0];
-				var cost=arguments[1]||0;
-				this.neighbors.add(new edgeToNeighbor(n, cost));
-			}
-		}
-	}
-	function nodeList(){
-		var d=new dojo.collections.Dictionary();
-		function nodelistiterator(){
-			var o=[] ;	//	Create an indexing array
-			var e=d.getIterator();
-			while(e.get()){
-				o[o.length]=e.element;
-			}
-
-			var position=0;
-			this.element=o[position]||null;
-			this.atEnd=function(){
-				return (position>=o.length);
-			}
-			this.get=function(){
-				if(this.atEnd()){
-					return null;		//	object
-				}
-				this.element=o[position++];
-				return this.element;	//	object
-			};
-			this.map=function(/* function */fn, /* object? */scope){
-				var s=scope||dj_global;
-				if(Array.map){
-					return Array.map(o,fn,s);	//	array
-				}else{
-					var arr=[];
-					for(var i=0; i<o.length; i++){
-						arr.push(fn.call(s,o[i]));
-					}
-					return arr;		//	array
-				}
-			};
-			this.reset=function(){
-				position=0;
-				this.element=o[position];
-			};
-		}
-		
-		this.add=function(node){
-			d.add(node.key, node);
-		};
-		this.clear=function(){
-			d.clear();
-		};
-		this.containsKey=function(key){
-			return d.containsKey(key);
-		};
-		this.getIterator=function(){
-			return new nodelistiterator(this);
-		};
-		this.item=function(key){
-			return d.item(key);
-		};
-		this.remove=function(node){
-			d.remove(node.key);
-		};
-	}
-	function edgeToNeighbor(node, cost){
-		this.neighbor=node;
-		this.cost=cost;
-	}
-	function adjacencyList(){
-		var d=[];
-		this.add=function(o){
-			d.push(o);
-		};
-		this.item=function(i){
-			return d[i];
-		};
-		this.getIterator=function(){
-			return new dojo.collections.Iterator([].concat(d));
-		};
-	}
-
-	this.nodes=nodes||new nodeList();
-	this.count=this.nodes.count;
-	this.clear=function(){
-		this.nodes.clear();
-		this.count=0;
-	};
-	this.addNode=function(){
-		var n=arguments[0];
-		if(arguments.length > 1){
-			n=new node(arguments[0],arguments[1]);
-		}
-		if(!this.nodes.containsKey(n.key)){
-			this.nodes.add(n);
-			this.count++;
-		}
-	};
-	this.addDirectedEdge=function(uKey, vKey, cost){
-		var uNode,vNode;
-		if(uKey.constructor!= node){
-			uNode=this.nodes.item(uKey);
-			vNode=this.nodes.item(vKey);
-		}else{
-			uNode=uKey;
-			vNode=vKey;
-		}
-		var c=cost||0;
-		uNode.addDirected(vNode,c);
-	};
-	this.addUndirectedEdge=function(uKey, vKey, cost){
-		var uNode, vNode;
-		if(uKey.constructor!=node){
-			uNode=this.nodes.item(uKey);
-			vNode=this.nodes.item(vKey);
-		}else{
-			uNode=uKey;
-			vNode=vKey;
-		}
-		var c=cost||0;
-		uNode.addDirected(vNode,c);
-		vNode.addDirected(uNode,c);
-	};
-	this.contains=function(n){
-		return this.nodes.containsKey(n.key);
-	};
-	this.containsKey=function(k){
-		return this.nodes.containsKey(k);
-	};
-}

+ 0 - 87
main/inc/lib/javascript/dojo/src/collections/Queue.js

@@ -1,87 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Queue");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.Queue=function(/* array? */arr){
-	//	summary
-	//	return an object of type dojo.collections.Queue
-	var q=[];
-	if (arr){
-		q=q.concat(arr);
-	}
-	this.count=q.length;
-	this.clear=function(){
-		//	summary
-		//	clears the internal collection
-		q=[];
-		this.count=q.length;
-	};
-	this.clone=function(){
-		//	summary
-		//	creates a new Queue based on this one
-		return new dojo.collections.Queue(q);	//	dojo.collections.Queue
-	};
-	this.contains=function(/* object */ o){
-		//	summary
-		//	Check to see if the passed object is an element in this queue
-		for(var i=0; i<q.length; i++){
-			if (q[i]==o){
-				return true;	//	bool
-			}
-		}
-		return false;	//	bool
-	};
-	this.copyTo=function(/* array */ arr, /* int */ i){
-		//	summary
-		//	Copy the contents of this queue into the passed array at index i.
-		arr.splice(i,0,q);
-	};
-	this.dequeue=function(){
-		//	summary
-		//	shift the first element off the queue and return it
-		var r=q.shift();
-		this.count=q.length;
-		return r;	//	object
-	};
-	this.enqueue=function(/* object */ o){
-		//	summary
-		//	put the passed object at the end of the queue
-		this.count=q.push(o);
-	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
-			Array.forEach(q, fn, s);
-		}else{
-			for(var i=0; i<q.length; i++){
-				fn.call(s, q[i], i, q);
-			}
-		}
-	};
-	this.getIterator=function(){
-		//	summary
-		//	get an Iterator based on this queue.
-		return new dojo.collections.Iterator(q);	//	dojo.collections.Iterator
-	};
-	this.peek=function(){
-		//	summary
-		//	get the next element in the queue without altering the queue.
-		return q[0];
-	};
-	this.toArray=function(){
-		//	summary
-		//	return an array based on the internal array of the queue.
-		return [].concat(q);
-	};
-};

+ 0 - 84
main/inc/lib/javascript/dojo/src/collections/Set.js

@@ -1,84 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Set");
-dojo.require("dojo.collections.Collections");
-dojo.require("dojo.collections.ArrayList");
-
-//	straight up sets are based on arrays or array-based collections.
-dojo.collections.Set = new function(){
-	this.union = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var result = new dojo.collections.ArrayList(setA.toArray());
-		var e = setB.getIterator();
-		while(!e.atEnd()){
-			var item=e.get();
-			if(!result.contains(item)){
-				result.add(item);
-			}
-		}
-		return result;
-	};
-	this.intersection = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var result = new dojo.collections.ArrayList();
-		var e = setB.getIterator();
-		while(!e.atEnd()){
-			var item=e.get();
-			if(setA.contains(item)){
-				result.add(item);
-			}
-		}
-		return result;
-	};
-	//	returns everything in setA that is not in setB.
-	this.difference = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var result = new dojo.collections.ArrayList();
-		var e=setA.getIterator();
-		while(!e.atEnd()){
-			var item=e.get();
-			if(!setB.contains(item)){
-				result.add(item);
-			}
-		}
-		return result;
-	};
-	this.isSubSet = function(setA, setB) {
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var e = setA.getIterator();
-		while(!e.atEnd()){
-			if(!setB.contains(e.get())){
-				return false;
-			}
-		}
-		return true;
-	};
-	this.isSuperSet = function(setA, setB){
-		if (setA.constructor == Array) var setA = new dojo.collections.ArrayList(setA);
-		if (setB.constructor == Array) var setB = new dojo.collections.ArrayList(setB);
-		if (!setA.toArray || !setB.toArray) dojo.raise("Set operations can only be performed on array-based collections.");
-		var e = setB.getIterator();
-		while(!e.atEnd()){
-			if(!setA.contains(e.get())){
-				return false;
-			}
-		}
-		return true;
-	};
-}();

+ 0 - 146
main/inc/lib/javascript/dojo/src/collections/SkipList.js

@@ -1,146 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.SkipList");
-dojo.require("dojo.collections.Collections");
-dojo.require("dojo.experimental");
-
-dojo.experimental("dojo.collections.SkipList");
-
-dojo.collections.SkipList = function(){
-	function node(height, val){
-		this.value = val;
-		this.height = height;
-		this.nodes = new nodeList(height);
-		this.compare = function(val){
-			if (this.value > val) return 1;
-			if (this.value < val) return -1;
-			return 0;
-		}
-		this.incrementHeight = function(){
-			this.nodes.incrementHeight();
-			this.height++;
-		};
-		this.decrementHeight = function(){
-			this.nodes.decrementHeight();
-			this.height--;
-		};
-	}
-	function nodeList(height){
-		var arr = [];
-		this.height = height;
-		for (var i = 0; i < height; i++) arr[i] = null;
-		this.item = function(i){
-			return arr[i];
-		};
-		this.incrementHeight = function(){
-			this.height++;
-			arr[this.height] = null;
-		};
-		this.decrementHeight = function(){
-			arr.splice(arr.length - 1, 1);
-			this.height--;
-		};
-	}
-	function iterator(list){
-		this.current = list.head;
-		this.atEnd = false;
-		this.moveNext = function(){
-			if (this.atEnd) return !this.atEnd;
-			this.current = this.current.nodes[0];
-			this.atEnd = (this.current == null);
-			return !this.atEnd;
-		};
-		this.reset = function(){
-			this.current = null;
-		};
-	}
-
-	function chooseRandomHeight(max){
-		var level = 1;
-		while (Math.random() < PROB && level < max) level++;
-		return level;
-	}
-
-	var PROB = 0.5;
-	var comparisons = 0;
-
-	this.head = new node(1);
-	this.count = 0;
-	this.add = function(val){
-		var updates = [];
-		var current = this.head;
-		for (var i = this.head.height; i >= 0; i--){
-			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) comparisons++;
-			while (current.nodes[i] != null && current.nodes[i].compare(val) < 0){
-				current = current.nodes[i];
-				comparisons++;
-			}
-			updates[i] = current;
-		}
-		if (current.nodes[0] != null && current.nodes[0].compare(val) == 0) return;
-		var n = new node(val, chooseRandomHeight(this.head.height + 1));
-		this.count++;
-		if (n.height > this.head.height){
-			this.head.incrementHeight();
-			this.head.nodes[this.head.height - 1] = n;
-		}
-		for (i = 0; i < n.height; i++){
-			if (i < updates.length) {
-				n.nodes[i] = updates[i].nodes[i];
-				updates[i].nodes[i] = n;
-			}
-		}
-	};
-	
-	this.contains = function(val){
-		var current = this.head;
-		var i;
-		for (i = this.head.height - 1; i >= 0; i--) {
-			while (current.item(i) != null) {
-				comparisons++;
-				var result = current.nodes[i].compare(val);
-				if (result == 0) return true;
-				else if (result < 0) current = current.nodes[i];
-				else break;
-			}
-		}
-		return false;
-	};
-	this.getIterator = function(){
-		return new iterator(this);
-	};
-
-	this.remove = function(val){
-		var updates = [];
-		var current = this.head;
-		for (var i = this.head.height - 1; i >= 0; i--){
-			if (!(current.nodes[i] != null && current.nodes[i].compare(val) < 0)) comparisons++;
-			while (current.nodes[i] != null && current.nodes[i].compare(val) < 0) {
-				current = current.nodes[i];
-				comparisons++;
-			}
-			updates[i] = current;
-		}
-		
-		current = current.nodes[0];
-		if (current != null && current.compare(val) == 0){
-			this.count--;
-			for (var i = 0; i < this.head.height; i++){
-				if (updates[i].nodes[i] != current) break;
-				else updates[i].nodes[i] = current.nodes[i];
-			}
-			if (this.head.nodes[this.head.height - 1] == null) this.head.decrementHeight();
-		}
-	};
-	this.resetComparisons = function(){ 
-		comparisons = 0; 
-	};
-}

+ 0 - 211
main/inc/lib/javascript/dojo/src/collections/SortedList.js

@@ -1,211 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.SortedList");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.SortedList=function(/* object? */ dictionary){
-	//	summary
-	//	creates a collection that acts like a dictionary but is also internally sorted.
-	//	Note that the act of adding any elements forces an internal resort, making this object potentially slow.
-	var _this=this;
-	var items={};
-	var q=[];
-	var sorter=function(a,b){
-		if (a.key > b.key) return 1;
-		if (a.key < b.key) return -1;
-		return 0;
-	};
-	var build=function(){
-		q=[];
-		var e=_this.getIterator();
-		while (!e.atEnd()){
-			q.push(e.get());
-		}
-		q.sort(sorter);
-	};
-	var testObject={};
-
-	this.count=q.length;
-	this.add=function(/* string */ k,/* object */v){
-		//	summary
-		//	add the passed value to the dictionary at location k
-		if (!items[k]) {
-			items[k]=new dojo.collections.DictionaryEntry(k,v);
-			this.count=q.push(items[k]);
-			q.sort(sorter);
-		}
-	};
-	this.clear=function(){
-		//	summary
-		//	clear the internal collections
-		items={};
-		q=[];
-		this.count=q.length;
-	};
-	this.clone=function(){
-		//	summary
-		//	create a clone of this sorted list
-		return new dojo.collections.SortedList(this);	//	dojo.collections.SortedList
-	};
-	this.contains=this.containsKey=function(/* string */ k){
-		//	summary
-		//	Check to see if the list has a location k
-		if(testObject[k]){
-			return false;			//	bool
-		}
-		return (items[k]!=null);	//	bool
-	};
-	this.containsValue=function(/* object */ o){
-		//	summary
-		//	Check to see if this list contains the passed object
-		var e=this.getIterator();
-		while (!e.atEnd()){
-			var item=e.get();
-			if(item.value==o){ 
-				return true;	//	bool
-			}
-		}
-		return false;	//	bool
-	};
-	this.copyTo=function(/* array */ arr, /* int */ i){
-		//	summary
-		//	copy the contents of the list into array arr at index i
-		var e=this.getIterator();
-		var idx=i;
-		while(!e.atEnd()){
-			arr.splice(idx,0,e.get());
-			idx++;
-		}
-	};
-	this.entry=function(/* string */ k){
-		//	summary
-		//	return the object at location k
-		return items[k];	//	dojo.collections.DictionaryEntry
-	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
-			Array.forEach(q, fn, s);
-		}else{
-			for(var i=0; i<q.length; i++){
-				fn.call(s, q[i], i, q);
-			}
-		}
-	};
-	this.getByIndex=function(/* int */ i){
-		//	summary
-		//	return the item at index i
-		return q[i].valueOf();	//	object
-	};
-	this.getIterator=function(){
-		//	summary
-		//	get an iterator for this object
-		return new dojo.collections.DictionaryIterator(items);	//	dojo.collections.DictionaryIterator
-	};
-	this.getKey=function(/* int */ i){
-		//	summary
-		//	return the key of the item at index i
-		return q[i].key;
-	};
-	this.getKeyList=function(){
-		//	summary
-		//	return an array of the keys set in this list
-		var arr=[];
-		var e=this.getIterator();
-		while (!e.atEnd()){
-			arr.push(e.get().key);
-		}
-		return arr;	//	array
-	};
-	this.getValueList=function(){
-		//	summary
-		//	return an array of values in this list
-		var arr=[];
-		var e=this.getIterator();
-		while (!e.atEnd()){
-			arr.push(e.get().value);
-		}
-		return arr;	//	array
-	};
-	this.indexOfKey=function(/* string */ k){
-		//	summary
-		//	return the index of the passed key.
-		for (var i=0; i<q.length; i++){
-			if (q[i].key==k){
-				return i;	//	int
-			}
-		}
-		return -1;	//	int
-	};
-	this.indexOfValue=function(/* object */ o){
-		//	summary
-		//	return the first index of object o
-		for (var i=0; i<q.length; i++){
-			if (q[i].value==o){
-				return i;	//	int
-			}
-		}
-		return -1;	//	int
-	};
-	this.item=function(/* string */ k){
-		// 	summary
-		//	return the value of the object at location k.
-		if(k in items && !testObject[k]){
-			return items[k].valueOf();	//	object
-		}
-		return undefined;	//	object
-	};
-	this.remove=function(/* string */k){
-		// 	summary
-		//	remove the item at location k and rebuild the internal collections.
-		delete items[k];
-		build();
-		this.count=q.length;
-	};
-	this.removeAt=function(/* int */ i){
-		//	summary
-		//	remove the item at index i, and rebuild the internal collections.
-		delete items[q[i].key];
-		build();
-		this.count=q.length;
-	};
-	this.replace=function(/* string */ k, /* object */ v){
-		//	summary
-		//	Replace an existing item if it's there, and add a new one if not.
-		if (!items[k]){
-			//	we're adding a new object, return false
-			this.add(k,v);
-			return false; // bool
-		}else{
-			//	we're replacing an object, return true
-			items[k]=new dojo.collections.DictionaryEntry(k,v);
-			q.sort(sorter);
-			return true; // bool
-		}
-	};
-	this.setByIndex=function(/* int */ i, /* object */ o){
-		//	summary
-		//	set an item by index
-		items[q[i].key].value=o;
-		build();
-		this.count=q.length;
-	};
-	if (dictionary){
-		var e=dictionary.getIterator();
-		while (!e.atEnd()){
-			var item=e.get();
-			q[q.length]=items[item.key]=new dojo.collections.DictionaryEntry(item.key,item.value);
-		}
-		q.sort(sorter);
-	}
-}

+ 0 - 85
main/inc/lib/javascript/dojo/src/collections/Stack.js

@@ -1,85 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.collections.Stack");
-dojo.require("dojo.collections.Collections");
-
-dojo.collections.Stack=function(/* array? */arr){
-	//	summary
-	//	returns an object of type dojo.collections.Stack
-	var q=[];
-	if (arr) q=q.concat(arr);
-	this.count=q.length;
-	this.clear=function(){
-		//	summary
-		//	Clear the internal array and reset the count
-		q=[];
-		this.count=q.length;
-	};
-	this.clone=function(){
-		//	summary
-		//	Create and return a clone of this Stack
-		return new dojo.collections.Stack(q);
-	};
-	this.contains=function(/* object */o){
-		//	summary
-		//	check to see if the stack contains object o
-		for (var i=0; i<q.length; i++){
-			if (q[i] == o){
-				return true;	//	bool
-			}
-		}
-		return false;	//	bool
-	};
-	this.copyTo=function(/* array */ arr, /* int */ i){
-		//	summary
-		//	copy the stack into array arr at index i
-		arr.splice(i,0,q);
-	};
-	this.forEach=function(/* function */ fn, /* object? */ scope){
-		//	summary
-		//	functional iterator, following the mozilla spec.
-		var s=scope||dj_global;
-		if(Array.forEach){
-			Array.forEach(q, fn, s);
-		}else{
-			for(var i=0; i<q.length; i++){
-				fn.call(s, q[i], i, q);
-			}
-		}
-	};
-	this.getIterator=function(){
-		//	summary
-		//	get an iterator for this collection
-		return new dojo.collections.Iterator(q);	//	dojo.collections.Iterator
-	};
-	this.peek=function(){
-		//	summary
-		//	Return the next item without altering the stack itself.
-		return q[(q.length-1)];	//	object
-	};
-	this.pop=function(){
-		//	summary
-		//	pop and return the next item on the stack
-		var r=q.pop();
-		this.count=q.length;
-		return r;	//	object
-	};
-	this.push=function(/* object */ o){
-		//	summary
-		//	Push object o onto the stack
-		this.count=q.push(o);
-	};
-	this.toArray=function(){
-		//	summary
-		//	create and return an array based on the internal collection
-		return [].concat(q);	//	array
-	};
-}

+ 0 - 22
main/inc/lib/javascript/dojo/src/collections/__package__.js

@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.collections.Collections",
-		"dojo.collections.SortedList", 
-		"dojo.collections.Dictionary", 
-		"dojo.collections.Queue", 
-		"dojo.collections.ArrayList", 
-		"dojo.collections.Stack",
-		"dojo.collections.Set"
-	]
-});
-dojo.provide("dojo.collections.*");

+ 0 - 75
main/inc/lib/javascript/dojo/src/compat/0.2.2.js

@@ -1,75 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
-Compatibility package to get 0.2.2 functionality in later Dojo releases.
-*/
-
-//**********************************
-//From bootstrap1.js
-dj_throw = dj_rethrow = function(m, e){
-	dojo.deprecated("dj_throw and dj_rethrow", "use dojo.raise instead", "0.4");
-	dojo.raise(m, e);
-}
-
-dj_debug = dojo.debug;
-dj_unimplemented = dojo.unimplemented;
-dj_deprecated = dojo.deprecated;
-
-dj_inherits = function(subclass, superclass){
-	dojo.deprecated("dj_inherits", "use dojo.inherits instead", "0.4");
-	dojo.inherits(subclass, superclass);
-}
-
-/**
-* Set the base script uri.
-*/
-// In JScript .NET, see interface System._AppDomain implemented by
-// System.AppDomain.CurrentDomain. Members include AppendPrivatePath,
-// RelativeSearchPath, BaseDirectory.
-dojo.hostenv.setBaseScriptUri = function(uri){ djConfig.baseScriptUri = uri }
-
-//**********************************
-//From the old bootstrap2.js
-dojo.hostenv.moduleLoaded = function(){
-	return dojo.hostenv.startPackage.apply(dojo.hostenv, arguments);
-}
-
-dojo.hostenv.require = dojo.hostenv.loadModule;
-dojo.requireAfter = dojo.require;
-dojo.conditionalRequire = dojo.requireIf;
-
-dojo.requireAll = function() {
-	for(var i = 0; i < arguments.length; i++) { dojo.require(arguments[i]); }
-}
-
-dojo.hostenv.conditionalLoadModule = function(){
-	dojo.kwCompoundRequire.apply(dojo, arguments);
-}
-
-dojo.hostenv.provide = dojo.hostenv.startPackage;
-
-//**********************************
-//From hostenv_browser.js
-dojo.hostenv.byId = dojo.byId;
-
-dojo.hostenv.byIdArray = dojo.byIdArray = function(){
-	var ids = [];
-	for(var i = 0; i < arguments.length; i++){
-		if((arguments[i] instanceof Array)||(typeof arguments[i] == "array")){
-			for(var j = 0; j < arguments[i].length; j++){
-				ids = ids.concat(dojo.hostenv.byIdArray(arguments[i][j]));
-			}
-		}else{
-			ids.push(dojo.hostenv.byId(arguments[i]));
-		}
-	}
-	return ids;
-}

+ 0 - 15
main/inc/lib/javascript/dojo/src/crypto.js

@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.crypto");
-
-//	enumerations for use in crypto code. Note that 0 == default, for the most part.
-dojo.crypto.cipherModes={ ECB:0, CBC:1, PCBC:2, CFB:3, OFB:4, CTR:5 };
-dojo.crypto.outputTypes={ Base64:0,Hex:1,String:2,Raw:3 };

+ 0 - 548
main/inc/lib/javascript/dojo/src/crypto/Blowfish.js

@@ -1,548 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.Blowfish");
-
-/*	Blowfish
- *	Created based on the C# implementation by Marcus Hahn (http://www.hotpixel.net/)
- *	Unsigned math functions derived from Joe Gregorio's SecureSyndication GM script
- *	http://bitworking.org/projects/securesyndication/
- *	(Note that this is *not* an adaption of the above script)
- *
- *	version 1.0 
- *	TRT 
- *	2005-12-08
- */
-dojo.crypto.Blowfish = new function(){
-	var POW2=Math.pow(2,2);
-	var POW3=Math.pow(2,3);
-	var POW4=Math.pow(2,4);
-	var POW8=Math.pow(2,8);
-	var POW16=Math.pow(2,16);
-	var POW24=Math.pow(2,24);
-	var iv=null;	//	CBC mode initialization vector
-	var boxes={
-		p:[
-			0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 
-			0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 
-			0x9216d5d9, 0x8979fb1b
-		],
-		s0:[
-			0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
-			0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
-			0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
-			0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
-			0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
-			0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
-			0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
-			0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
-			0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
-			0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
-			0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 
-			0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, 
-			0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 
-			0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
-			0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
-			0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
-			0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 
-			0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, 
-			0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 
-			0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 
-			0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
-			0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 
-			0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
-			0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, 
-			0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
-			0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
-			0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
-			0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
-			0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
-			0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
-			0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
-			0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
-		],
-		s1:[
-			0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
-			0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
-			0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
-			0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
-			0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
-			0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
-			0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
-			0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 
-			0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 
-			0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
-			0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 
-			0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
-			0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, 
-			0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 
-			0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
-			0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, 
-			0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
-			0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 
-			0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
-			0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 
-			0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 
-			0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, 
-			0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
-			0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
-			0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, 
-			0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
-			0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
-			0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
-			0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
-			0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
-			0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
-			0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
-		],
-		s2:[
-			0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
-			0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
-			0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
-			0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
-			0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
-			0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
-			0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
-			0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
-			0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
-			0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
-			0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
-			0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
-			0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
-			0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
-			0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
-			0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
-			0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
-			0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
-			0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
-			0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
-			0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 
-			0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
-			0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
-			0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 
-			0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 
-			0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 
-			0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 
-			0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
-			0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
-			0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 
-			0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
-			0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
-		],
-		s3:[
-			0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
-			0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
-			0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, 
-			0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
-			0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 
-			0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, 
-			0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
-			0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 
-			0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, 
-			0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 
-			0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
-			0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, 
-			0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 
-			0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 
-			0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
-			0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
-			0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 
-			0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
-			0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 
-			0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 
-			0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, 
-			0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 
-			0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
-			0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, 
-			0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
-			0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 
-			0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, 
-			0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 
-			0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 
-			0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
-			0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
-			0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
-		]
-	}
-////////////////////////////////////////////////////////////////////////////
-	function add(x,y){
-		var sum=(x+y)&0xffffffff;
-		if (sum<0){
-			sum=-sum;
-			return (0x10000*((sum>>16)^0xffff))+(((sum&0xffff)^0xffff)+1);
-		}
-		return sum;
-	}
-	function split(x){
-		var r=x&0xffffffff;
-		if(r<0) {
-			r=-r;
-			return [((r&0xffff)^0xffff)+1,(r>>16)^0xffff];
-		}
-		return [r&0xffff,(r>>16)];
-	}
-	function xor(x,y){
-		var xs=split(x);
-		var ys=split(y);
-		return (0x10000*(xs[1]^ys[1]))+(xs[0]^ys[0]);
-	}
-	function $(v, box){
-		var d=v&0xff; v>>=8;
-		var c=v&0xff; v>>=8;
-		var b=v&0xff; v>>=8;
-		var a=v&0xff;
-		var r=add(box.s0[a],box.s1[b]);
-		r=xor(r,box.s2[c]);
-		return add(r,box.s3[d]);
-	}
-////////////////////////////////////////////////////////////////////////////
-	function eb(o, box){
-		var l=o.left;
-		var r=o.right;
-		l=xor(l,box.p[0]);
-		r=xor(r,xor($(l,box),box.p[1]));
-		l=xor(l,xor($(r,box),box.p[2]));
-		r=xor(r,xor($(l,box),box.p[3]));
-		l=xor(l,xor($(r,box),box.p[4]));
-		r=xor(r,xor($(l,box),box.p[5]));
-		l=xor(l,xor($(r,box),box.p[6]));
-		r=xor(r,xor($(l,box),box.p[7]));
-		l=xor(l,xor($(r,box),box.p[8]));
-		r=xor(r,xor($(l,box),box.p[9]));
-		l=xor(l,xor($(r,box),box.p[10]));
-		r=xor(r,xor($(l,box),box.p[11]));
-		l=xor(l,xor($(r,box),box.p[12]));
-		r=xor(r,xor($(l,box),box.p[13]));
-		l=xor(l,xor($(r,box),box.p[14]));
-		r=xor(r,xor($(l,box),box.p[15]));
-		l=xor(l,xor($(r,box),box.p[16]));
-		o.right=l;
-		o.left=xor(r,box.p[17]);
-	}
-
-	function db(o, box){
-		var l=o.left;
-		var r=o.right;
-		l=xor(l,box.p[17]);
-		r=xor(r,xor($(l,box),box.p[16]));
-		l=xor(l,xor($(r,box),box.p[15]));
-		r=xor(r,xor($(l,box),box.p[14]));
-		l=xor(l,xor($(r,box),box.p[13]));
-		r=xor(r,xor($(l,box),box.p[12]));
-		l=xor(l,xor($(r,box),box.p[11]));
-		r=xor(r,xor($(l,box),box.p[10]));
-		l=xor(l,xor($(r,box),box.p[9]));
-		r=xor(r,xor($(l,box),box.p[8]));
-		l=xor(l,xor($(r,box),box.p[7]));
-		r=xor(r,xor($(l,box),box.p[6]));
-		l=xor(l,xor($(r,box),box.p[5]));
-		r=xor(r,xor($(l,box),box.p[4]));
-		l=xor(l,xor($(r,box),box.p[3]));
-		r=xor(r,xor($(l,box),box.p[2]));
-		l=xor(l,xor($(r,box),box.p[1]));
-		o.right=l;
-		o.left=xor(r,box.p[0]);
-	}
-
-	//	Note that we aren't caching contexts here; it might take a little longer
-	//	but we should be more secure this way.
-	function init(key){
-		var k=key;
-		if (typeof(k)=="string"){
-			var a=[];
-			for(var i=0; i<k.length; i++) 
-				a.push(k.charCodeAt(i)&0xff);
-			k=a;
-		}
-		//	init the boxes
-		var box = { p:[], s0:[], s1:[], s2:[], s3:[] };
-		for(var i=0; i<boxes.p.length; i++) box.p.push(boxes.p[i]);
-		for(var i=0; i<boxes.s0.length; i++) box.s0.push(boxes.s0[i]);
-		for(var i=0; i<boxes.s1.length; i++) box.s1.push(boxes.s1[i]);
-		for(var i=0; i<boxes.s2.length; i++) box.s2.push(boxes.s2[i]);
-		for(var i=0; i<boxes.s3.length; i++) box.s3.push(boxes.s3[i]);
-
-		//	init p with the key
-		var pos=0;
-		var data=0;
-		for(var i=0; i < box.p.length; i++){
-			for (var j=0; j<4; j++){
-				data = (data*POW8) | k[pos];
-				if(++pos==k.length) pos=0;
-			}
-			box.p[i] = xor(box.p[i], data);
-		}
-
-		//	encrypt p and the s boxes
-		var res={ left:0, right:0 };
-		for(var i=0; i<box.p.length;){
-			eb(res, box);
-			box.p[i++]=res.left;
-			box.p[i++]=res.right;
-		}
-		for (var i=0; i<4; i++){
-			for(var j=0; j<box["s"+i].length;){
-				eb(res, box);
-				box["s"+i][j++]=res.left;
-				box["s"+i][j++]=res.right;
-			}
-		}
-		return box;
-	}
-
-////////////////////////////////////////////////////////////////////////////
-//	CONVERSION FUNCTIONS
-////////////////////////////////////////////////////////////////////////////
-	//	these operate on byte arrays, NOT word arrays.
-	function toBase64(ba){ 
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		var count=0;
-		for (var i =0; i<ba.length;){
-			var t=ba[i++]<<16|ba[i++]<<8|ba[i++];
-			s.push(tab.charAt((t>>>18)&0x3f)); 
-			s.push(tab.charAt((t>>>12)&0x3f));
-			s.push(tab.charAt((t>>>6)&0x3f));
-			s.push(tab.charAt(t&0x3f));
-			count+=4;
-		}
-		var pa=i-ba.length;
-		while((pa--)>0)	s.push(p);	
-		return s.join("");
-	}
-	function fromBase64(str){
-		var s=str.split("");
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var out=[];
-		var l=s.length;
-		while(s[--l]==p){ }
-		for (var i=0; i<l;){
-			var t=tab.indexOf(s[i++])<<18|tab.indexOf(s[i++])<<12|tab.indexOf(s[i++])<<6|tab.indexOf(s[i++]);
-			out.push((t>>>16)&0xff);
-			out.push((t>>>8)&0xff);
-			out.push(t&0xff);
-		}
-		return out;
-	}
-////////////////////////////////////////////////////////////////////////////
-//	PUBLIC FUNCTIONS
-//	0.2: Only supporting ECB mode for now.
-////////////////////////////////////////////////////////////////////////////
-	this.getIV=function(outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				var s=[];
-				for(var i=0; i<iv.length; i++)
-					s.push((iv[i]).toString(16));
-				return s.join("");
-			}
-			case dojo.crypto.outputTypes.String:{
-				return iv.join("");
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				return iv;
-			}
-			default:{
-				return toBase64(iv);
-			}
-		}
-	};
-	this.setIV=function(data, inputType){
-		var ip=inputType||dojo.crypto.outputTypes.Base64;
-		var ba=null;
-		switch(ip){
-			case dojo.crypto.outputTypes.String:{
-				ba=[];
-				for (var i=0; i<data.length; i++){
-					ba.push(data.charCodeAt(i));
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.Hex:{
-				ba=[];
-				var i=0;
-				while (i+1<data.length){
-					ba.push(parseInt(data.substr(i,2),16));
-					i+=2;
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				ba=data;
-				break;
-			}
-			default:{
-				ba=fromBase64(data);
-				break;
-			}
-		}
-		//	make it a pair of words now
-		iv={};
-		iv.left=ba[0]*POW24|ba[1]*POW16|ba[2]*POW8|ba[3];
-		iv.right=ba[4]*POW24|ba[5]*POW16|ba[6]*POW8|ba[7];
-	}
-	this.encrypt = function(plaintext, key, ao){
-		var out=dojo.crypto.outputTypes.Base64;
-		var mode=dojo.crypto.cipherModes.EBC;
-		if (ao){
-			if (ao.outputType) out=ao.outputType;
-			if (ao.cipherMode) mode=ao.cipherMode;
-		}
-
-		var bx = init(key);
-		var padding = 8-(plaintext.length&7);
-		for (var i=0; i<padding; i++) plaintext+=String.fromCharCode(padding);
-		var cipher=[];
-		var count=plaintext.length >> 3;
-		var pos=0;
-		var o={};
-		var isCBC=(mode==dojo.crypto.cipherModes.CBC);
-		var vector={left:iv.left||null, right:iv.right||null};
-		for(var i=0; i<count; i++){
-			o.left=plaintext.charCodeAt(pos)*POW24
-				|plaintext.charCodeAt(pos+1)*POW16
-				|plaintext.charCodeAt(pos+2)*POW8
-				|plaintext.charCodeAt(pos+3);
-			o.right=plaintext.charCodeAt(pos+4)*POW24
-				|plaintext.charCodeAt(pos+5)*POW16
-				|plaintext.charCodeAt(pos+6)*POW8
-				|plaintext.charCodeAt(pos+7);
-
-			if(isCBC){
-				o.left=xor(o.left, vector.left);
-				o.right=xor(o.right, vector.right);
-			}
-
-			eb(o, bx);	//	encrypt the block
-
-			if(isCBC){
-				vector.left=o.left;
-				vector.right=o.right;dojo.crypto.outputTypes.Hex
-			}
-
-			cipher.push((o.left>>24)&0xff); 
-			cipher.push((o.left>>16)&0xff); 
-			cipher.push((o.left>>8)&0xff);
-			cipher.push(o.left&0xff);
-			cipher.push((o.right>>24)&0xff); 
-			cipher.push((o.right>>16)&0xff); 
-			cipher.push((o.right>>8)&0xff);
-			cipher.push(o.right&0xff);
-			pos+=8;
-		}
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				var s=[];
-				for(var i=0; i<cipher.length; i++)
-					s.push((cipher[i]).toString(16));
-				return s.join("");
-			}
-			case dojo.crypto.outputTypes.String:{
-				return cipher.join("");
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				return cipher;
-			}
-			default:{
-				return toBase64(cipher);
-			}
-		}
-	};
-
-	this.decrypt = function(ciphertext, key, ao){
-		var ip=dojo.crypto.outputTypes.Base64;
-		var mode=dojo.crypto.cipherModes.EBC;
-		if (ao){
-			if (ao.outputType) ip=ao.outputType;
-			if (ao.cipherMode) mode=ao.cipherMode;
-		}
-		var bx = init(key);
-		var pt=[];
-	
-		var c=null;
-		switch(ip){
-			case dojo.crypto.outputTypes.Hex:{
-				c=[];
-				var i=0;
-				while (i+1<ciphertext.length){
-					c.push(parseInt(ciphertext.substr(i,2),16));
-					i+=2;
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.String:{
-				c=[];
-				for (var i=0; i<ciphertext.length; i++){
-					c.push(ciphertext.charCodeAt(i));
-				}
-				break;
-			}
-			case dojo.crypto.outputTypes.Raw:{
-				c=ciphertext;	//	should be a byte array
-				break;
-			}
-			default:{
-				c=fromBase64(ciphertext);
-				break;
-			}
-		}
-
-		var count=c.length >> 3;
-		var pos=0;
-		var o={};
-		var isCBC=(mode==dojo.crypto.cipherModes.CBC);
-		var vector={left:iv.left||null, right:iv.right||null};
-		for(var i=0; i<count; i++){
-			o.left=c[pos]*POW24|c[pos+1]*POW16|c[pos+2]*POW8|c[pos+3];
-			o.right=c[pos+4]*POW24|c[pos+5]*POW16|c[pos+6]*POW8|c[pos+7];
-
-			if(isCBC){
-				var left=o.left;
-				var right=o.right;
-			}
-
-			db(o, bx);	//	decrypt the block
-
-			if(isCBC){
-				o.left=xor(o.left, vector.left);
-				o.right=xor(o.right, vector.right);
-				vector.left=left;
-				vector.right=right;
-			}
-
-			pt.push((o.left>>24)&0xff);
-			pt.push((o.left>>16)&0xff);
-			pt.push((o.left>>8)&0xff);
-			pt.push(o.left&0xff);
-			pt.push((o.right>>24)&0xff);
-			pt.push((o.right>>16)&0xff);
-			pt.push((o.right>>8)&0xff);
-			pt.push(o.right&0xff);
-			pos+=8;
-		}
-
-		//	check for padding, and remove.
-		if(pt[pt.length-1]==pt[pt.length-2]||pt[pt.length-1]==0x01){
-			var n=pt[pt.length-1];
-			pt.splice(pt.length-n, n);
-		}
-
-		//	convert to string
-		for(var i=0; i<pt.length; i++)
-			pt[i]=String.fromCharCode(pt[i]);
-		return pt.join("");
-	};
-
-	this.setIV("0000000000000000", dojo.crypto.outputTypes.Hex);
-}();

+ 0 - 11
main/inc/lib/javascript/dojo/src/crypto/LICENSE

@@ -1,11 +0,0 @@
-License Disclaimer:
-
-All contents of this directory are Copyright (c) the Dojo Foundation, with the
-following exceptions:
--------------------------------------------------------------------------------
-
-MD5.js, SHA1.js:
-	* Copyright 1998-2005, Paul Johnstone
-	  Distributed under the terms of the BSD License
-
-

+ 0 - 193
main/inc/lib/javascript/dojo/src/crypto/MD5.js

@@ -1,193 +0,0 @@
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.MD5");
-
-/*	Return to a port of Paul Johnstone's MD5 implementation
- *	http://pajhome.org.uk/crypt/md5/index.html
- *
- *	Copyright (C) Paul Johnston 1999 - 2002.
- *	Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * 	Distributed under the BSD License
- *
- *	Dojo port by Tom Trenka
- *
- *	2005-12-7
- *	All conversions are internalized (no dependencies)
- *	implemented getHMAC for message digest auth.
- */
-dojo.crypto.MD5 = new function(){
-	var chrsz=8;
-	var mask=(1<<chrsz)-1;
-	function toWord(s) {
-	  var wa=[];
-	  for(var i=0; i<s.length*chrsz; i+=chrsz)
-		wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
-	  return wa;
-	}
-	function toString(wa){
-		var s=[];
-		for(var i=0; i<wa.length*32; i+=chrsz)
-			s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
-		return s.join("");
-	}
-	function toHex(wa) {
-		var h="0123456789abcdef";
-		var s=[];
-		for(var i=0; i<wa.length*4; i++){
-			s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
-		}
-		return s.join("");
-	}
-	function toBase64(wa){
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		for(var i=0; i<wa.length*4; i+=3){
-			var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
-			for(var j=0; j<4; j++){
-				if(i*8+j*6>wa.length*32) s.push(p);
-				else s.push(tab.charAt((t>>6*(3-j))&0x3F));
-			}
-		}
-		return s.join("");
-	}
-	function add(x,y) {
-		var l=(x&0xFFFF)+(y&0xFFFF);
-		var m=(x>>16)+(y>>16)+(l>>16);
-		return (m<<16)|(l&0xFFFF);
-	}
-	function R(n,c){ return (n<<c)|(n>>>(32-c)); }
-	function C(q,a,b,x,s,t){ return add(R(add(add(a,q),add(x,t)),s),b); }
-	function FF(a,b,c,d,x,s,t){ return C((b&c)|((~b)&d),a,b,x,s,t); }
-	function GG(a,b,c,d,x,s,t){ return C((b&d)|(c&(~d)),a,b,x,s,t); }
-	function HH(a,b,c,d,x,s,t){ return C(b^c^d,a,b,x,s,t); }
-	function II(a,b,c,d,x,s,t){ return C(c^(b|(~d)),a,b,x,s,t); }
-	function core(x,len){
-		x[len>>5]|=0x80<<((len)%32);
-		x[(((len+64)>>>9)<<4)+14]=len;
-		var a= 1732584193;
-		var b=-271733879;
-		var c=-1732584194;
-		var d= 271733878;
-		for(var i=0; i<x.length; i+=16){
-			var olda=a;
-			var oldb=b;
-			var oldc=c;
-			var oldd=d;
-
-			a=FF(a,b,c,d,x[i+ 0],7 ,-680876936);
-			d=FF(d,a,b,c,x[i+ 1],12,-389564586);
-			c=FF(c,d,a,b,x[i+ 2],17, 606105819);
-			b=FF(b,c,d,a,x[i+ 3],22,-1044525330);
-			a=FF(a,b,c,d,x[i+ 4],7 ,-176418897);
-			d=FF(d,a,b,c,x[i+ 5],12, 1200080426);
-			c=FF(c,d,a,b,x[i+ 6],17,-1473231341);
-			b=FF(b,c,d,a,x[i+ 7],22,-45705983);
-			a=FF(a,b,c,d,x[i+ 8],7 , 1770035416);
-			d=FF(d,a,b,c,x[i+ 9],12,-1958414417);
-			c=FF(c,d,a,b,x[i+10],17,-42063);
-			b=FF(b,c,d,a,x[i+11],22,-1990404162);
-			a=FF(a,b,c,d,x[i+12],7 , 1804603682);
-			d=FF(d,a,b,c,x[i+13],12,-40341101);
-			c=FF(c,d,a,b,x[i+14],17,-1502002290);
-			b=FF(b,c,d,a,x[i+15],22, 1236535329);
-
-			a=GG(a,b,c,d,x[i+ 1],5 ,-165796510);
-			d=GG(d,a,b,c,x[i+ 6],9 ,-1069501632);
-			c=GG(c,d,a,b,x[i+11],14, 643717713);
-			b=GG(b,c,d,a,x[i+ 0],20,-373897302);
-			a=GG(a,b,c,d,x[i+ 5],5 ,-701558691);
-			d=GG(d,a,b,c,x[i+10],9 , 38016083);
-			c=GG(c,d,a,b,x[i+15],14,-660478335);
-			b=GG(b,c,d,a,x[i+ 4],20,-405537848);
-			a=GG(a,b,c,d,x[i+ 9],5 , 568446438);
-			d=GG(d,a,b,c,x[i+14],9 ,-1019803690);
-			c=GG(c,d,a,b,x[i+ 3],14,-187363961);
-			b=GG(b,c,d,a,x[i+ 8],20, 1163531501);
-			a=GG(a,b,c,d,x[i+13],5 ,-1444681467);
-			d=GG(d,a,b,c,x[i+ 2],9 ,-51403784);
-			c=GG(c,d,a,b,x[i+ 7],14, 1735328473);
-			b=GG(b,c,d,a,x[i+12],20,-1926607734);
-
-			a=HH(a,b,c,d,x[i+ 5],4 ,-378558);
-			d=HH(d,a,b,c,x[i+ 8],11,-2022574463);
-			c=HH(c,d,a,b,x[i+11],16, 1839030562);
-			b=HH(b,c,d,a,x[i+14],23,-35309556);
-			a=HH(a,b,c,d,x[i+ 1],4 ,-1530992060);
-			d=HH(d,a,b,c,x[i+ 4],11, 1272893353);
-			c=HH(c,d,a,b,x[i+ 7],16,-155497632);
-			b=HH(b,c,d,a,x[i+10],23,-1094730640);
-			a=HH(a,b,c,d,x[i+13],4 , 681279174);
-			d=HH(d,a,b,c,x[i+ 0],11,-358537222);
-			c=HH(c,d,a,b,x[i+ 3],16,-722521979);
-			b=HH(b,c,d,a,x[i+ 6],23, 76029189);
-			a=HH(a,b,c,d,x[i+ 9],4 ,-640364487);
-			d=HH(d,a,b,c,x[i+12],11,-421815835);
-			c=HH(c,d,a,b,x[i+15],16, 530742520);
-			b=HH(b,c,d,a,x[i+ 2],23,-995338651);
-
-			a=II(a,b,c,d,x[i+ 0],6 ,-198630844);
-			d=II(d,a,b,c,x[i+ 7],10, 1126891415);
-			c=II(c,d,a,b,x[i+14],15,-1416354905);
-			b=II(b,c,d,a,x[i+ 5],21,-57434055);
-			a=II(a,b,c,d,x[i+12],6 , 1700485571);
-			d=II(d,a,b,c,x[i+ 3],10,-1894986606);
-			c=II(c,d,a,b,x[i+10],15,-1051523);
-			b=II(b,c,d,a,x[i+ 1],21,-2054922799);
-			a=II(a,b,c,d,x[i+ 8],6 , 1873313359);
-			d=II(d,a,b,c,x[i+15],10,-30611744);
-			c=II(c,d,a,b,x[i+ 6],15,-1560198380);
-			b=II(b,c,d,a,x[i+13],21, 1309151649);
-			a=II(a,b,c,d,x[i+ 4],6 ,-145523070);
-			d=II(d,a,b,c,x[i+11],10,-1120210379);
-			c=II(c,d,a,b,x[i+ 2],15, 718787259);
-			b=II(b,c,d,a,x[i+ 9],21,-343485551);
-
-			a = add(a,olda);
-			b = add(b,oldb);
-			c = add(c,oldc);
-			d = add(d,oldd);
-		}
-		return [a,b,c,d];
-	}
-	function hmac(data,key){
-		var wa=toWord(key);
-		if(wa.length>16) wa=core(wa,key.length*chrsz);
-		var l=[], r=[];
-		for(var i=0; i<16; i++){
-			l[i]=wa[i]^0x36363636;
-			r[i]=wa[i]^0x5c5c5c5c;
-		}
-		var h=core(l.concat(toWord(data)),512+data.length*chrsz);
-		return core(r.concat(h),640);
-	}
-
-	//	Public functions
-	this.compute=function(data,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(core(toWord(data),data.length*chrsz));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(core(toWord(data),data.length*chrsz));
-			}
-			default:{
-				return toBase64(core(toWord(data),data.length*chrsz));
-			}
-		}
-	};
-	this.getHMAC=function(data,key,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(hmac(data,key));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(hmac(data,key));
-			}
-			default:{
-				return toBase64(hmac(data,key));
-			}
-		}
-	};
-}();

+ 0 - 22
main/inc/lib/javascript/dojo/src/crypto/Rijndael.js

@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.crypto.Rijndael");
-dojo.require("dojo.crypto");
-dojo.require("dojo.experimental");
-
-dojo.experimental("dojo.crypto.Rijndael");
-
-dojo.crypto.Rijndael = new function(){
-	this.encrypt=function(plaintext, key){
-	};
-	this.decrypt=function(ciphertext, key){
-	};
-}();

+ 0 - 154
main/inc/lib/javascript/dojo/src/crypto/SHA1.js

@@ -1,154 +0,0 @@
-dojo.require("dojo.crypto");
-dojo.provide("dojo.crypto.SHA1");
-dojo.require("dojo.experimental");
-
-/*
- *	A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
- *	in FIPS PUB 180-1
- *
- * 	Version 2.1a Copyright Paul Johnston 2000 - 2002.
- * 	Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
- * 	Distributed under the BSD License
- * 	See http://pajhome.org.uk/crypt/md5 for details.
- *
- *	Dojo port by Tom Trenka
- */
-dojo.experimental("dojo.crypto.SHA1");
-
-dojo.crypto.SHA1 = new function(){
-	var chrsz=8;
-	var mask=(1<<chrsz)-1;
-	function toWord(s) {
-	  var wa=[];
-	  for(var i=0; i<s.length*chrsz; i+=chrsz)
-		wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32);
-	  return wa;
-	}
-	function toString(wa){
-		var s=[];
-		for(var i=0; i<wa.length*32; i+=chrsz)
-			s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask));
-		return s.join("");
-	}
-	function toHex(wa) {
-		var h="0123456789abcdef";
-		var s=[];
-		for(var i=0; i<wa.length*4; i++){
-			s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF));
-		}
-		return s.join("");
-	}
-	function toBase64(wa){
-		var p="=";
-		var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-		var s=[];
-		for(var i=0; i<wa.length*4; i+=3){
-			var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF);
-			for(var j=0; j<4; j++){
-				if(i*8+j*6>wa.length*32) s.push(p);
-				else s.push(tab.charAt((t>>6*(3-j))&0x3F));
-			}
-		}
-		return s.join("");
-	}
-
-	//	math
-	function add(x,y){
-		var l=(x&0xffff)+(y&0xffff);
-		var m=(x>>16)+(y>>16)+(l>>16);
-		return (m<<16)|(l&0xffff);
-	}
-	function r(x,n){  return (x<<n)|(x>>>(32-n)); }
-	
-	//	SHA rounds
-	function f(u,v,w){ return ((u&v)|(~u&w)); }
-	function g(u,v,w){ return ((u&v)|(u&w)|(v&w)); }
-	function h(u,v,w){ return (u^v^w); }
-	
-	function fn(i,u,v,w){
-		if(i<20) return f(u,v,w);
-		if(i<40) return h(u,v,w);
-		if(i<60) return g(u,v,w);
-		return h(u,v,w);
-	}
-	function cnst(i){
-		if(i<20) return 1518500249;
-		if(i<40) return 1859775393;
-		if(i<60) return -1894007588;
-		return -899497514;
-	}
-
-	function core(x,len){
-		x[len>>5]|=0x80<<(24-len%32);
-		x[((len+64>>9)<<4)+15]=len;
-
-		var w=[];
-		var a= 1732584193;		//	0x67452301
-		var b=-271733879;		//	0xefcdab89
-		var c=-1732584194;		//	0x98badcfe
-		var d= 271733878;		//	0x10325476
-		var e=-1009589776;		//	0xc3d2e1f0
-		
-		for(var i=0; i<x.length; i+=16){
-			var olda=a;
-			var oldb=b;
-			var oldc=c;
-			var oldd=d;
-			var olde=e;
-
-			for(var j=0; j<80; j++){
-				if(j<16) w[j]=x[i+j];
-				else w[j]=r(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);
-				var t=add(add(r(a,5),fn(j,b,c,d)),add(add(e,w[j]),cnst(j)));
-				e=d; d=c; c=r(b,30); b=a; a=t;
-			}
-
-			a=add(a,olda);
-			b=add(b,oldb);
-			c=add(c,oldc);
-			d=add(d,oldd);
-			e=add(e,olde);
-		}
-		return [a,b,c,d,e];
-	}
-	function hmac(data,key){
-		var wa=toWord(key);
-		if(wa.length>16) wa=core(wa,key.length*chrsz);
-		var l=[], r=[];
-		for(var i=0; i<16; i++){
-			l[i]=wa[i]^0x36363636;
-			r[i]=wa[i]^0x5c5c5c5c;
-		}
-		var h=core(l.concat(toWord(data)),512+data.length*chrsz);
-		return core(r.concat(h),640);
-	}
-
-	this.compute=function(data,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(core(toWord(data),data.length*chrsz));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(core(toWord(data),data.length*chrsz));
-			}
-			default:{
-				return toBase64(core(toWord(data),data.length*chrsz));
-			}
-		}
-	};
-	this.getHMAC=function(data,key,outputType){
-		var out=outputType||dojo.crypto.outputTypes.Base64;
-		switch(out){
-			case dojo.crypto.outputTypes.Hex:{
-				return toHex(hmac(data,key));
-			}
-			case dojo.crypto.outputTypes.String:{
-				return toString(hmac(data,key));
-			}
-			default:{
-				return toBase64(hmac(data,key));
-			}
-		}
-	};
-}();

+ 0 - 20
main/inc/lib/javascript/dojo/src/crypto/SHA256.js

@@ -1,20 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.crypto.SHA256");
-dojo.require("dojo.crypto");
-dojo.require("dojo.experimental");
-
-dojo.experimental("dojo.crypto.SHA256");
-
-dojo.crypto.SHA256 = new function(){
-	this.compute=function(s){
-	};
-}();

+ 0 - 17
main/inc/lib/javascript/dojo/src/crypto/__package__.js

@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.crypto",
-		"dojo.crypto.MD5"
-	]
-});
-dojo.provide("dojo.crypto.*");

+ 0 - 15
main/inc/lib/javascript/dojo/src/data.js

@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data");
-
-// currently a stub for dojo.data
-
-dojo.data = {};

+ 0 - 62
main/inc/lib/javascript/dojo/src/data/Attribute.js

@@ -1,62 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.Attribute");
-dojo.require("dojo.data.Item");
-dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.Attribute = function(/* dojo.data.provider.Base */ dataProvider, /* string */ attributeId) {
-	/**
-	 * summary:
-	 * An Attribute object represents something like a column in 
-	 * a relational database.
-	 */
-	dojo.lang.assertType(dataProvider, [dojo.data.provider.Base, "optional"]);
-	dojo.lang.assertType(attributeId, String);
-	dojo.data.Item.call(this, dataProvider);
-	this._attributeId = attributeId;
-};
-dojo.inherits(dojo.data.Attribute, dojo.data.Item);
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.Attribute.prototype.toString = function() {
-	return this._attributeId; // string
-};
-
-dojo.data.Attribute.prototype.getAttributeId = function() {
-	/**
-	 * summary: 
-	 * Returns the string token that uniquely identifies this
-	 * attribute within the context of a data provider.
-	 * For a data provider that accesses relational databases,
-	 * typical attributeIds might be tokens like "name", "age", 
-	 * "ssn", or "dept_key".
-	 */ 
-	return this._attributeId; // string
-};
-
-dojo.data.Attribute.prototype.getType = function() {
-	/**
-	 * summary: Returns the data type of the values of this attribute.
-	 */ 
-	return this.get('type'); // dojo.data.Type or null
-};
-
-dojo.data.Attribute.prototype.setType = function(/* dojo.data.Type or null */ type) {
-	/**
-	 * summary: Sets the data type for this attribute.
-	 */ 
-	this.set('type', type);
-};

+ 0 - 332
main/inc/lib/javascript/dojo/src/data/Item.js

@@ -1,332 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.Item");
-dojo.require("dojo.data.Observable");
-dojo.require("dojo.data.Value");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.Item = function(/* dojo.data.provider.Base */ dataProvider) {
-	/**
-	 * summary:
-	 * An Item has attributes and attribute values, sort of like 
-	 * a record in a database, or a 'struct' in C.  Instances of
-	 * the Item class know how to store and retrieve their
-	 * attribute values.
-	 */
-	dojo.lang.assertType(dataProvider, [dojo.data.provider.Base, "optional"]);
-	dojo.data.Observable.call(this);
-	this._dataProvider = dataProvider;
-	this._dictionaryOfAttributeValues = {};
-};
-dojo.inherits(dojo.data.Item, dojo.data.Observable);
-
-// -------------------------------------------------------------------
-// Public class methods
-// -------------------------------------------------------------------
-dojo.data.Item.compare = function(/* dojo.data.Item */ itemOne, /* dojo.data.Item */ itemTwo) {
-	/**
-	 * summary:
-	 * Given two Items to compare, this method returns 0, 1, or -1.
-	 * This method is designed to be used by sorting routines, like
-	 * the JavaScript built-in Array sort() method.
-	 * 
-	 * Example:
-	 * <pre>
-	 *   var a = dataProvider.newItem("kermit");
-	 *   var b = dataProvider.newItem("elmo");
-	 *   var c = dataProvider.newItem("grover");
-	 *   var array = new Array(a, b, c);
-	 *   array.sort(dojo.data.Item.compare);
-	 * </pre>
-	 */
-	dojo.lang.assertType(itemOne, dojo.data.Item);
-	if (!dojo.lang.isOfType(itemTwo, dojo.data.Item)) {
-		return -1;
-	}
-	var nameOne = itemOne.getName();
-	var nameTwo = itemTwo.getName();
-	if (nameOne == nameTwo) {
-		var attributeArrayOne = itemOne.getAttributes();
-		var attributeArrayTwo = itemTwo.getAttributes();
-		if (attributeArrayOne.length != attributeArrayTwo.length) {
-			if (attributeArrayOne.length > attributeArrayTwo.length) {
-				return 1; 
-			} else {
-				return -1;
-			}
-		}
-		for (var i in attributeArrayOne) {
-			var attribute = attributeArrayOne[i];
-			var arrayOfValuesOne = itemOne.getValues(attribute);
-			var arrayOfValuesTwo = itemTwo.getValues(attribute);
-			dojo.lang.assert(arrayOfValuesOne && (arrayOfValuesOne.length > 0));
-			if (!arrayOfValuesTwo) {
-				return 1;
-			}
-			if (arrayOfValuesOne.length != arrayOfValuesTwo.length) {
-				if (arrayOfValuesOne.length > arrayOfValuesTwo.length) {
-					return 1; 
-				} else {
-					return -1;
-				}
-			}
-			for (var j in arrayOfValuesOne) {
-				var value = arrayOfValuesOne[j];
-				if (!itemTwo.hasAttributeValue(value)) {
-					return 1;
-				}
-			}
-			return 0;
-		}
-	} else {
-		if (nameOne > nameTwo) {
-			return 1; 
-		} else {
-			return -1;  // 0, 1, or -1
-		}
-	}
-};
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.Item.prototype.toString = function() {
-	/**
-	 * Returns a simple string representation of the item.
-	 */
-	var arrayOfStrings = [];
-	var attributes = this.getAttributes();
-	for (var i in attributes) {
-		var attribute = attributes[i];
-		var arrayOfValues = this.getValues(attribute);
-		var valueString;
-		if (arrayOfValues.length == 1) {
-			valueString = arrayOfValues[0];
-		} else {
-			valueString = '[';
-			valueString += arrayOfValues.join(', ');
-			valueString += ']';
-		}
-		arrayOfStrings.push('  ' + attribute + ': ' + valueString);
-	}
-	var returnString = '{ ';
-	returnString += arrayOfStrings.join(',\n');
-	returnString += ' }';
-	return returnString; // string
-};
-
-dojo.data.Item.prototype.compare = function(/* dojo.data.Item */ otherItem) {
-	/**
-	 * summary: Compares this Item to another Item, and returns 0, 1, or -1.
-	 */ 
-	return dojo.data.Item.compare(this, otherItem); // 0, 1, or -1
-};
-
-dojo.data.Item.prototype.isEqual = function(/* dojo.data.Item */ otherItem) {
-	/**
-	 * summary: Returns true if this Item is equal to the otherItem, or false otherwise.
-	 */
-	return (this.compare(otherItem) == 0); // boolean
-};
-
-dojo.data.Item.prototype.getName = function() {
-	return this.get('name');
-};
-
-dojo.data.Item.prototype.get = function(/* string or dojo.data.Attribute */ attributeId) {
-	/**
-	 * summary: Returns a single literal value, like "foo" or 33.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.Attribute]);
-	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
-	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
-		return null; // null
-	}
-	if (literalOrValueOrArray instanceof dojo.data.Value) {
-		return literalOrValueOrArray.getValue(); // literal
-	}
-	if (dojo.lang.isArray(literalOrValueOrArray)) {
-		var dojoDataValue = literalOrValueOrArray[0];
-		return dojoDataValue.getValue(); // literal
-	}
-	return literalOrValueOrArray; // literal
-};
-
-dojo.data.Item.prototype.getValue = function(/* string or dojo.data.Attribute */ attributeId) {
-	/**
-	 * summary: Returns a single instance of dojo.data.Value.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.Attribute]);
-	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
-	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
-		return null; // null
-	}
-	if (literalOrValueOrArray instanceof dojo.data.Value) {
-		return literalOrValueOrArray; // dojo.data.Value
-	}
-	if (dojo.lang.isArray(literalOrValueOrArray)) {
-		var dojoDataValue = literalOrValueOrArray[0];
-		return dojoDataValue; // dojo.data.Value
-	}
-	var literal = literalOrValueOrArray;
-	dojoDataValue = new dojo.data.Value(literal);
-	this._dictionaryOfAttributeValues[attributeId] = dojoDataValue;
-	return dojoDataValue; // dojo.data.Value
-};
-
-dojo.data.Item.prototype.getValues = function(/* string or dojo.data.Attribute */ attributeId) {
-	/**
-	 * summary: Returns an array of dojo.data.Value objects.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.Attribute]);
-	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
-	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
-		return null; // null
-	}
-	if (literalOrValueOrArray instanceof dojo.data.Value) {
-		var array = [literalOrValueOrArray];
-		this._dictionaryOfAttributeValues[attributeId] = array;
-		return array; // Array
-	}
-	if (dojo.lang.isArray(literalOrValueOrArray)) {
-		return literalOrValueOrArray; // Array
-	}
-	var literal = literalOrValueOrArray;
-	var dojoDataValue = new dojo.data.Value(literal);
-	array = [dojoDataValue];
-	this._dictionaryOfAttributeValues[attributeId] = array;
-	return array; // Array
-};
-
-dojo.data.Item.prototype.load = function(/* string or dojo.data.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: 
-	 * Used for loading an attribute value into an item when
-	 * the item is first being loaded into memory from some
-	 * data store (such as a file).
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.Attribute]);
-	this._dataProvider.registerAttribute(attributeId);
-	var literalOrValueOrArray = this._dictionaryOfAttributeValues[attributeId];
-	if (dojo.lang.isUndefined(literalOrValueOrArray)) {
-		this._dictionaryOfAttributeValues[attributeId] = value;
-		return;
-	}
-	if (!(value instanceof dojo.data.Value)) {
-		value = new dojo.data.Value(value);
-	}
-	if (literalOrValueOrArray instanceof dojo.data.Value) {
-		var array = [literalOrValueOrArray, value];
-		this._dictionaryOfAttributeValues[attributeId] = array;
-		return;
-	}
-	if (dojo.lang.isArray(literalOrValueOrArray)) {
-		literalOrValueOrArray.push(value);
-		return;
-	}
-	var literal = literalOrValueOrArray;
-	var dojoDataValue = new dojo.data.Value(literal);
-	array = [dojoDataValue, value];
-	this._dictionaryOfAttributeValues[attributeId] = array;
-};
-
-dojo.data.Item.prototype.set = function(/* string or dojo.data.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: 
-	 * Used for setting an attribute value as a result of a
-	 * user action.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.Attribute]);
-	this._dataProvider.registerAttribute(attributeId);
-	this._dictionaryOfAttributeValues[attributeId] = value;
-	this._dataProvider.noteChange(this, attributeId, value);
-};
-
-dojo.data.Item.prototype.setValue = function(/* string or dojo.data.Attribute */ attributeId, /* dojo.data.Value */ value) {
-	this.set(attributeId, value);
-};
-
-dojo.data.Item.prototype.addValue = function(/* string or dojo.data.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: 
-	 * Used for adding an attribute value as a result of a
-	 * user action.
-	 */ 
-	this.load(attributeId, value);
-	this._dataProvider.noteChange(this, attributeId, value);
-};
-
-dojo.data.Item.prototype.setValues = function(/* string or dojo.data.Attribute */ attributeId, /* Array */ arrayOfValues) {
-	/**
-	 * summary: 
-	 * Used for setting an array of attribute values as a result of a
-	 * user action.
-	 */
-	// dojo.lang.assertType(attributeId, [String, dojo.data.Attribute]);
-	dojo.lang.assertType(arrayOfValues, Array);
-	this._dataProvider.registerAttribute(attributeId);
-	var finalArray = [];
-	this._dictionaryOfAttributeValues[attributeId] = finalArray;
-	for (var i in arrayOfValues) {
-		var value = arrayOfValues[i];
-		if (!(value instanceof dojo.data.Value)) {
-			value = new dojo.data.Value(value);
-		}
-		finalArray.push(value);
-		this._dataProvider.noteChange(this, attributeId, value);
-	}
-};
-
-dojo.data.Item.prototype.getAttributes = function() {
-	/**
-	 * summary: 
-	 * Returns an array containing all of the attributes for which
-	 * this item has attribute values.
-	 */ 
-	var arrayOfAttributes = [];
-	for (var key in this._dictionaryOfAttributeValues) {
-		arrayOfAttributes.push(this._dataProvider.getAttribute(key));
-	}
-	return arrayOfAttributes; // Array
-};
-
-dojo.data.Item.prototype.hasAttribute = function(/* string or dojo.data.Attribute */ attributeId) {
-	/**
-	 * summary: Returns true if the given attribute of the item has been assigned any value.
-	 */ 
-	// dojo.lang.assertType(attributeId, [String, dojo.data.Attribute]);
-	for (var key in this._dictionaryOfAttributeValues) {
-		if (key == attributeId) {
-			return true; // boolean
-		}
-	}
-	return false; // boolean
-};
-
-dojo.data.Item.prototype.hasAttributeValue = function(/* string or dojo.data.Attribute */ attributeId, /* anything */ value) {
-	/**
-	 * summary: Returns true if the given attribute of the item has been assigned the given value.
-	 */ 
-	var arrayOfValues = this.getValues(attributeId);
-	for (var i in arrayOfValues) {
-		var candidateValue = arrayOfValues[i];
-		if (candidateValue.isEqual(value)) {
-			return true; // boolean
-		}
-	}
-	return false; // boolean
-};
-
-

+ 0 - 28
main/inc/lib/javascript/dojo/src/data/Kind.js

@@ -1,28 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.Kind");
-dojo.require("dojo.data.Item");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.Kind = function(/* dojo.data.provider.Base */ dataProvider) {
-	/**
-	 * summary:
-	 * A Kind represents a kind of item.  In the dojo data model
-	 * the item Snoopy might belong to the 'kind' Dog, where in
-	 * a Java program the object Snoopy would belong to the 'class'
-	 * Dog, and in MySQL the record for Snoopy would be in the 
-	 * table Dog.
-	 */
-	dojo.data.Item.call(this, dataProvider);
-};
-dojo.inherits(dojo.data.Kind, dojo.data.Item);

+ 0 - 59
main/inc/lib/javascript/dojo/src/data/Observable.js

@@ -1,59 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.Observable");
-dojo.require("dojo.lang.common");
-dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.Observable = function() {
-};
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.Observable.prototype.addObserver = function(/* object */ observer) {
-	/**
-	 * summary: Registers an object as an observer of this item,
-	 * so that the object will be notified when the item changes.
-	 */ 
-	dojo.lang.assertType(observer, Object);
-	dojo.lang.assertType(observer.observedObjectHasChanged, Function);
-	if (!this._arrayOfObservers) {
-		this._arrayOfObservers = [];
-	}
-	if (!dojo.lang.inArray(this._arrayOfObservers, observer)) {
-		this._arrayOfObservers.push(observer);
-	}
-};
-
-dojo.data.Observable.prototype.removeObserver = function(/* object */ observer) {
-	/**
-	 * summary: Removes the observer registration for a previously
-	 * registered object.
-	 */ 
-	if (!this._arrayOfObservers) {
-		return;
-	}
-	var index = dojo.lang.indexOf(this._arrayOfObservers, observer);
-	if (index != -1) {
-		this._arrayOfObservers.splice(index, 1);
-	}
-};
-
-dojo.data.Observable.prototype.getObservers = function() {
-	/**
-	 * summary: Returns an array with all the observers of this item.
-	 */ 
-	return this._arrayOfObservers; // Array or undefined
-};
-

+ 0 - 70
main/inc/lib/javascript/dojo/src/data/ResultSet.js

@@ -1,70 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.ResultSet");
-dojo.require("dojo.lang.assert");
-dojo.require("dojo.collections.Collections");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.ResultSet = function(/* dojo.data.provider.Base */ dataProvider, /* Array */ arrayOfItems) {
-	/**
-	 * summary:
-	 * A ResultSet holds a collection of Items.  A data provider
-	 * returns a ResultSet in reponse to a query.
-	 * (The name "Result Set" comes from the MySQL terminology.)
-	 */
-	dojo.lang.assertType(dataProvider, [dojo.data.provider.Base, "optional"]);
-	dojo.lang.assertType(arrayOfItems, [Array, "optional"]);
-	dojo.data.Observable.call(this);
-	this._dataProvider = dataProvider;
-	this._arrayOfItems = [];
-	if (arrayOfItems) {
-		this._arrayOfItems = arrayOfItems;
-	}
-};
-dojo.inherits(dojo.data.ResultSet, dojo.data.Observable);
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.ResultSet.prototype.toString = function() {
-	var returnString = this._arrayOfItems.join(', ');
-	return returnString; // string
-};
-
-dojo.data.ResultSet.prototype.toArray = function() {
-	return this._arrayOfItems; // Array
-};
-
-dojo.data.ResultSet.prototype.getIterator = function() {
-	return new dojo.collections.Iterator(this._arrayOfItems);
-};
-
-dojo.data.ResultSet.prototype.getLength = function() {
-	return this._arrayOfItems.length; // integer
-};
-
-dojo.data.ResultSet.prototype.getItemAt = function(/* numeric */ index) {
-	return this._arrayOfItems[index];
-};
-
-dojo.data.ResultSet.prototype.indexOf = function(/* dojo.data.Item */ item) {
-	return dojo.lang.indexOf(this._arrayOfItems, item); // integer
-};
-
-dojo.data.ResultSet.prototype.contains = function(/* dojo.data.Item */ item) {
-	return dojo.lang.inArray(this._arrayOfItems, item); // boolean
-};
-
-dojo.data.ResultSet.prototype.getDataProvider = function() {
-	return this._dataProvider; // dojo.data.provider.Base
-};

+ 0 - 25
main/inc/lib/javascript/dojo/src/data/Type.js

@@ -1,25 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.Type");
-dojo.require("dojo.data.Item");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.Type = function(/* dojo.data.provider.Base */ dataProvider) {
-	/**
-	 * summary:
-	 * A Type represents a type of value, like Text, Number, Picture,
-	 * or Varchar.
-	 */
-	dojo.data.Item.call(this, dataProvider);
-};
-dojo.inherits(dojo.data.Type, dojo.data.Item);

+ 0 - 55
main/inc/lib/javascript/dojo/src/data/Value.js

@@ -1,55 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.Value");
-dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.Value = function(/* anything */ value) {
-	/**
-	 * summary:
-	 * A Value represents a simple literal value (like "foo" or 334),
-	 * or a reference value (a pointer to an Item).
-	 */
-	this._value = value;
-	this._type = null;
-};
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.Value.prototype.toString = function() {
-	return this._value.toString(); // string
-};
-
-dojo.data.Value.prototype.getValue = function() {
-	/**
-	 * summary: Returns the value itself.
-	 */ 
-	return this._value; // anything
-};
-
-dojo.data.Value.prototype.getType = function() {
-	/**
-	 * summary: Returns the data type of the value.
-	 */ 
-	dojo.unimplemented('dojo.data.Value.prototype.getType');
-	return this._type; // dojo.data.Type
-};
-
-dojo.data.Value.prototype.compare = function() {
-	dojo.unimplemented('dojo.data.Value.prototype.compare');
-};
-
-dojo.data.Value.prototype.isEqual = function() {
-	dojo.unimplemented('dojo.data.Value.prototype.isEqual');
-};

+ 0 - 22
main/inc/lib/javascript/dojo/src/data/__package__.js

@@ -1,22 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.experimental");
-
-dojo.experimental("dojo.data.*");
-dojo.kwCompoundRequire({
-	common: [
-		"dojo.data.Item",
-		"dojo.data.ResultSet",
-		"dojo.data.provider.FlatFile"
-	]
-});
-dojo.provide("dojo.data.*");
-

+ 0 - 112
main/inc/lib/javascript/dojo/src/data/format/Csv.js

@@ -1,112 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.format.Csv");
-dojo.require("dojo.lang.assert");
-
-
-dojo.data.format.Csv = new function() {
-
-	// -------------------------------------------------------------------
-	// Public functions
-	// -------------------------------------------------------------------
-	this.getArrayStructureFromCsvFileContents = function(/* string */ csvFileContents) {
-		/**
-		 * Given a string containing CSV records, this method parses
-		 * the string and returns a data structure containing the parsed
-		 * content.  The data structure we return is an array of length
-		 * R, where R is the number of rows (lines) in the CSV data.  The 
-		 * return array contains one sub-array for each CSV line, and each 
-		 * sub-array contains C string values, where C is the number of 
-		 * columns in the CSV data.
-		 * 
-		 * For example, given this CSV string as input:
-		 * <pre>
-		 *   "Title, Year, Producer \n Alien, 1979, Ridley Scott \n Blade Runner, 1982, Ridley Scott"
-		 * </pre>
-		 * We will return this data structure:
-		 * <pre>
-		 *   [["Title", "Year", "Producer"]
-		 *    ["Alien", "1979", "Ridley Scott"],  
-		 *    ["Blade Runner", "1982", "Ridley Scott"]]
-		 * </pre>
-		 */
-		dojo.lang.assertType(csvFileContents, String);
-		
-		var lineEndingCharacters = new RegExp("\r\n|\n|\r");
-		var leadingWhiteSpaceCharacters = new RegExp("^\\s+",'g');
-		var trailingWhiteSpaceCharacters = new RegExp("\\s+$",'g');
-		var doubleQuotes = new RegExp('""','g');
-		var arrayOfOutputRecords = [];
-		
-		var arrayOfInputLines = csvFileContents.split(lineEndingCharacters);
-		for (var i in arrayOfInputLines) {
-			var singleLine = arrayOfInputLines[i];
-			if (singleLine.length > 0) {
-				var listOfFields = singleLine.split(',');
-				var j = 0;
-				while (j < listOfFields.length) {
-					var space_field_space = listOfFields[j];
-					var field_space = space_field_space.replace(leadingWhiteSpaceCharacters, ''); // trim leading whitespace
-					var field = field_space.replace(trailingWhiteSpaceCharacters, ''); // trim trailing whitespace
-					var firstChar = field.charAt(0);
-					var lastChar = field.charAt(field.length - 1);
-					var secondToLastChar = field.charAt(field.length - 2);
-					var thirdToLastChar = field.charAt(field.length - 3);
-					if ((firstChar == '"') && 
-							((lastChar != '"') || 
-							 ((lastChar == '"') && (secondToLastChar == '"') && (thirdToLastChar != '"')) )) {
-						if (j+1 === listOfFields.length) {
-							// alert("The last field in record " + i + " is corrupted:\n" + field);
-							return null;
-						}
-						var nextField = listOfFields[j+1];
-						listOfFields[j] = field_space + ',' + nextField;
-						listOfFields.splice(j+1, 1); // delete element [j+1] from the list
-					} else {
-						if ((firstChar == '"') && (lastChar == '"')) {
-							field = field.slice(1, (field.length - 1)); // trim the " characters off the ends
-							field = field.replace(doubleQuotes, '"');   // replace "" with "
-						}
-						listOfFields[j] = field;
-						j += 1;
-					}
-				}
-				arrayOfOutputRecords.push(listOfFields);
-			}
-		}
-		return arrayOfOutputRecords; // Array
-	};
-
-	this.loadDataProviderFromFileContents = function(/* dojo.data.provider.Base */ dataProvider, /* string */ csvFileContents) {
-		dojo.lang.assertType(dataProvider, dojo.data.provider.Base);
-		dojo.lang.assertType(csvFileContents, String);
-		var arrayOfArrays = this.getArrayStructureFromCsvFileContents(csvFileContents);
-		if (arrayOfArrays) {
-			var arrayOfKeys = arrayOfArrays[0];
-			for (var i = 1; i < arrayOfArrays.length; ++i) {
-				var row = arrayOfArrays[i];
-				var item = dataProvider.getNewItemToLoad();
-				for (var j in row) {
-					var value = row[j];
-					var key = arrayOfKeys[j];
-					item.load(key, value);
-				}
-			}
-		}
-	};
-	
-	this.getCsvStringFromResultSet = function(/* dojo.data.ResultSet */ resultSet) {
-		dojo.unimplemented('dojo.data.format.Csv.getCsvStringFromResultSet');
-		var csvString = null;
-		return csvString; // String
-	};
-	
-}();

+ 0 - 103
main/inc/lib/javascript/dojo/src/data/format/Json.js

@@ -1,103 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.format.Json");
-dojo.require("dojo.lang.assert");
-
-dojo.data.format.Json = new function() {
-
-	// -------------------------------------------------------------------
-	// Public functions
-	// -------------------------------------------------------------------
-	this.loadDataProviderFromFileContents = function(/* dojo.data.provider.Base */ dataProvider, /* string */ jsonFileContents) {
-		dojo.lang.assertType(dataProvider, dojo.data.provider.Base);
-		dojo.lang.assertType(jsonFileContents, String);
-		var arrayOfJsonData = eval("(" + jsonFileContents + ")");
-		this.loadDataProviderFromArrayOfJsonData(dataProvider, arrayOfJsonData);
-	};
-	
-	this.loadDataProviderFromArrayOfJsonData = function(/* dojo.data.provider.Base */ dataProvider, /* Array */ arrayOfJsonData) {
-		dojo.lang.assertType(arrayOfJsonData, [Array, "optional"]);
-		if (arrayOfJsonData && (arrayOfJsonData.length > 0)) {
-			var firstRow = arrayOfJsonData[0];
-			dojo.lang.assertType(firstRow, [Array, "pureobject"]);
-			if (dojo.lang.isArray(firstRow)) {
-				_loadDataProviderFromArrayOfArrays(dataProvider, arrayOfJsonData);
-			} else {
-				dojo.lang.assertType(firstRow, "pureobject");
-				_loadDataProviderFromArrayOfObjects(dataProvider, arrayOfJsonData);
-			}
-		}
-	};
-
-	this.getJsonStringFromResultSet = function(/* dojo.data.ResultSet */ resultSet) {
-		dojo.unimplemented('dojo.data.format.Json.getJsonStringFromResultSet');
-		var jsonString = null;
-		return jsonString; // String
-	};
-
-	// -------------------------------------------------------------------
-	// Private functions
-	// -------------------------------------------------------------------
-	function _loadDataProviderFromArrayOfArrays(/* dojo.data.provider.Base */ dataProvider, /* Array */ arrayOfJsonData) {
-		/** 
-		 * Example: 
-		 * var arrayOfJsonStates = [
-		 * 	 [ "abbr",  "population",  "name" ]
-		 * 	 [  "WA",     5894121,      "Washington"    ],
-		 * 	 [  "WV",     1808344,      "West Virginia" ],
-		 * 	 [  "WI",     5453896,      "Wisconsin"     ],
-		 *   [  "WY",      493782,      "Wyoming"       ] ];
-		 * this._loadFromArrayOfArrays(arrayOfJsonStates);
-		 */
-		var arrayOfKeys = arrayOfJsonData[0];
-		for (var i = 1; i < arrayOfJsonData.length; ++i) {
-			var row = arrayOfJsonData[i];
-			var item = dataProvider.getNewItemToLoad();
-			for (var j in row) {
-				var value = row[j];
-				var key = arrayOfKeys[j];
-				item.load(key, value);
-			}
-		}
-	}
-
-	function _loadDataProviderFromArrayOfObjects(/* dojo.data.provider.Base */ dataProvider, /* Array */ arrayOfJsonData) {
-		/** 
-		 * Example: 
-		 * var arrayOfJsonStates = [
-		 * 	 { abbr: "WA", name: "Washington" },
-		 * 	 { abbr: "WV", name: "West Virginia" },
-		 * 	 { abbr: "WI", name: "Wisconsin", song: "On, Wisconsin!" },
-		 * 	 { abbr: "WY", name: "Wyoming", cities: ["Lander", "Cheyenne", "Laramie"] } ];
-		 * this._loadFromArrayOfArrays(arrayOfJsonStates);
-		 */
-		// dojo.debug("_loadDataProviderFromArrayOfObjects");
-		for (var i in arrayOfJsonData) {
-			var row = arrayOfJsonData[i];
-			var item = dataProvider.getNewItemToLoad();
-			for (var key in row) {
-				var value = row[key];
-				if (dojo.lang.isArray(value)) {
-					var arrayOfValues = value;
-					for (var j in arrayOfValues) {
-						value = arrayOfValues[j];
-						item.load(key, value);
-						// dojo.debug("loaded: " + key + " = " + value); 
-					}
-				} else {
-					item.load(key, value);
-				}
-			}
-		}
-	}
-	
-}();
-

+ 0 - 183
main/inc/lib/javascript/dojo/src/data/provider/Base.js

@@ -1,183 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.provider.Base");
-dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.provider.Base = function() {
-	/**
-	 * summary:
-	 * A Data Provider serves as a connection to some data source,
-	 * like a relational database.  This data provider Base class
-	 * serves as an abstract superclass for other data provider
-	 * classes.
-	 */
-	this._countOfNestedTransactions = 0;
-	this._changesInCurrentTransaction = null;
-};
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.provider.Base.prototype.beginTransaction = function() {
-	/**
-	 * Marks the beginning of a transaction.
-	 *
-	 * Each time you call beginTransaction() you open a new transaction, 
-	 * which you need to close later using endTransaction().  Transactions
-	 * may be nested, but the beginTransaction and endTransaction calls
-	 * always need to come in pairs.
-	 */
-	if (this._countOfNestedTransactions === 0) {
-		this._changesInCurrentTransaction = [];
-	}
-	this._countOfNestedTransactions += 1;
-};
-
-dojo.data.provider.Base.prototype.endTransaction = function() {
-	/**
-	 * Marks the end of a transaction.
-	 */
-	this._countOfNestedTransactions -= 1;
-	dojo.lang.assert(this._countOfNestedTransactions >= 0);
-
-	if (this._countOfNestedTransactions === 0) {
-		var listOfChangesMade = this._saveChanges();
-		this._changesInCurrentTransaction = null;
-		if (listOfChangesMade.length > 0) {
-			// dojo.debug("endTransaction: " + listOfChangesMade.length + " changes made");
-			this._notifyObserversOfChanges(listOfChangesMade);
-		}
-	}
-};
-
-dojo.data.provider.Base.prototype.getNewItemToLoad = function() {
-	return this._newItem(); // dojo.data.Item
-};
-
-dojo.data.provider.Base.prototype.newItem = function(/* string */ itemName) {
-	/**
-	 * Creates a new item.
-	 */
-	dojo.lang.assertType(itemName, [String, "optional"]);
-	var item = this._newItem();
-	if (itemName) {
-		item.set('name', itemName);
-	}
-	return item; // dojo.data.Item
-};
-
-dojo.data.provider.Base.prototype.newAttribute = function(/* string */ attributeId) {
-	/**
-	 * Creates a new attribute.
-	 */
-	dojo.lang.assertType(attributeId, String); // FIXME: should be optional
-	var attribute = this._newAttribute(attributeId);
-	return attribute; // dojo.data.Attribute
-};
-
-dojo.data.provider.Base.prototype.getAttribute = function(/* string */ attributeId) {
-	dojo.unimplemented('dojo.data.provider.Base');
-	var attribute;
-	return attribute; // dojo.data.Attribute
-};
-
-dojo.data.provider.Base.prototype.getAttributes = function() {
-	dojo.unimplemented('dojo.data.provider.Base');
-	return this._arrayOfAttributes; // Array
-};
-
-dojo.data.provider.Base.prototype.fetchArray = function() {
-	dojo.unimplemented('dojo.data.provider.Base');
-	return []; // Array
-};
-
-dojo.data.provider.Base.prototype.fetchResultSet = function() {
-	dojo.unimplemented('dojo.data.provider.Base');
-	var resultSet;
-	return resultSet; // dojo.data.ResultSet
-};
-
-dojo.data.provider.Base.prototype.noteChange = function(/* dojo.data.Item */ item, /* string or dojo.data.Attribute */ attribute, /* anything */ value) {
-	var change = {item: item, attribute: attribute, value: value};
-	if (this._countOfNestedTransactions === 0) {
-		this.beginTransaction();
-		this._changesInCurrentTransaction.push(change);
-		this.endTransaction();
-	} else {
-		this._changesInCurrentTransaction.push(change);
-	}
-};
-
-dojo.data.provider.Base.prototype.addItemObserver = function(/* dojo.data.Item */ item, /* object */ observer) {
-	/**
-	 * summary: Registers an object as an observer of an item,
-	 * so that the object will be notified when the item changes.
-	 */
-	dojo.lang.assertType(item, dojo.data.Item);
-	item.addObserver(observer);
-};
-
-dojo.data.provider.Base.prototype.removeItemObserver = function(/* dojo.data.Item */ item, /* object */ observer) {
-	/**
-	 * summary: Removes the observer registration for a previously
-	 * registered object.
-	 */ 
-	dojo.lang.assertType(item, dojo.data.Item);
-	item.removeObserver(observer);
-};
-
-// -------------------------------------------------------------------
-// Private instance methods
-// -------------------------------------------------------------------
-dojo.data.provider.Base.prototype._newItem = function() {
-	var item = new dojo.data.Item(this);
-	return item; // dojo.data.Item
-};
-
-dojo.data.provider.Base.prototype._newAttribute = function(/* String */ attributeId) {
-	var attribute = new dojo.data.Attribute(this);
-	return attribute; // dojo.data.Attribute
-};
-
-dojo.data.provider.Base.prototype._saveChanges = function() {
-	var arrayOfChangesMade = this._changesInCurrentTransaction;
-	return arrayOfChangesMade; // Array
-};
-
-dojo.data.provider.Base.prototype._notifyObserversOfChanges = function(/* Array */ arrayOfChanges) {
-	var arrayOfResultSets = this._getResultSets();
-	for (var i in arrayOfChanges) {
-		var change = arrayOfChanges[i];
-		var changedItem = change.item;
-		var arrayOfItemObservers = changedItem.getObservers();
-		for (var j in arrayOfItemObservers) {
-			var observer = arrayOfItemObservers[j];
-			observer.observedObjectHasChanged(changedItem, change);
-		}
-		for (var k in arrayOfResultSets) {
-			var resultSet = arrayOfResultSets[k];
-			var arrayOfResultSetObservers = resultSet.getObservers();
-			for (var m in arrayOfResultSetObservers) {
-				observer = arrayOfResultSetObservers[m];
-				observer.observedObjectHasChanged(resultSet, change);
-			}
-		}
-	}
-};
-
-dojo.data.provider.Base.prototype._getResultSets = function() {
-	dojo.unimplemented('dojo.data.provider.Base');
-	return []; // Array
-};
-

+ 0 - 85
main/inc/lib/javascript/dojo/src/data/provider/Delicious.js

@@ -1,85 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.provider.Delicious");
-dojo.require("dojo.data.provider.FlatFile");
-dojo.require("dojo.data.format.Json");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.provider.Delicious = function() {
-	/**
-	 * summary:
-	 * The Delicious Data Provider can be used to take data from
-	 * del.icio.us and make it available as dojo.data.Items
-	 * In order to use the Delicious Data Provider, you need 
-	 * to have loaded a script tag that looks like this:
-	 * <script type="text/javascript" src="http://del.icio.us/feeds/json/gumption?count=8"></script>
-	 */
-	dojo.data.provider.FlatFile.call(this);
-	// Delicious = null;
-	if (Delicious && Delicious.posts) {
-		dojo.data.format.Json.loadDataProviderFromArrayOfJsonData(this, Delicious.posts);
-	} else {
-		// document.write("<script type='text/javascript'>dojo.data.provider.Delicious._fetchComplete()</script>");		
-		/*
-		document.write("<script type='text/javascript'>alert('boo!');</script>");		
-		document.write("<script type='text/javascript'>var foo = 'not dojo'; alert('dojo == ' + foo);</script>");		
-		document.write("<script type='text/javascript'>var foo = fetchComplete; alert('dojo == ' + foo);</script>");		
-		fetchComplete();
-		*/
-		// dojo.debug("Delicious line 29: constructor");
-	}
-	var u = this.registerAttribute('u');
-	var d = this.registerAttribute('d');
-	var t = this.registerAttribute('t');
-	
-	u.load('name', 'Bookmark');
-	d.load('name', 'Description');
-	t.load('name', 'Tags');
-	
-	u.load('type', 'String');
-	d.load('type', 'String');
-	t.load('type', 'String');
-};
-dojo.inherits(dojo.data.provider.Delicious, dojo.data.provider.FlatFile);
-
-/********************************************************************
- * FIXME: the rest of this is work in progress
- *
- 
-dojo.data.provider.Delicious.prototype.getNewItemToLoad = function() {
-	var newItem = this._newItem();
-	this._currentArray.push(newItem);
-	return newItem; // dojo.data.Item
-};
-
-dojo.data.provider.Delicious.prototype.fetchArray = function(query) {
-	if (!query) {	
-		query = "gumption";
-	}
-	this._currentArray = [];
-	alert("Delicious line 60: loadDataProviderFromArrayOfJsonData");
-	alert("Delicious line 61: " + dojo);
-		var sourceUrl = "http://del.icio.us/feeds/json/" + query + "?count=8";
-		document.write("<script type='text/javascript' src='" + sourceUrl + "'></script>");
-		document.write("<script type='text/javascript'>alert('line 63: ' + Delicious.posts[0].u);</script>");		
-		document.write("<script type='text/javascript'>callMe();</script>");		
-	alert("line 66");
-	dojo.data.format.Json.loadDataProviderFromArrayOfJsonData(this, Delicious.posts);
-	return this._currentArray; // Array
-};
-
-callMe = function() {
-	alert("callMe!");
-};
-
-*/

+ 0 - 153
main/inc/lib/javascript/dojo/src/data/provider/FlatFile.js

@@ -1,153 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.provider.FlatFile");
-dojo.require("dojo.data.provider.Base");
-dojo.require("dojo.data.Item");
-dojo.require("dojo.data.Attribute");
-dojo.require("dojo.data.ResultSet");
-dojo.require("dojo.data.format.Json");
-dojo.require("dojo.data.format.Csv");
-dojo.require("dojo.lang.assert");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.provider.FlatFile = function(/* keywords */ keywordParameters) {
-	/**
-	 * summary:
-	 * A Json Data Provider knows how to read in simple JSON data
-	 * tables and make their contents accessable as Items.
-	 */
-	dojo.lang.assertType(keywordParameters, ["pureobject", "optional"]);
-	dojo.data.provider.Base.call(this);
-	this._arrayOfItems = [];
-	this._resultSet = null;
-	this._dictionaryOfAttributes = {};
-
-	if (keywordParameters) {
-		var jsonObjects = keywordParameters["jsonObjects"];
-		var jsonString  = keywordParameters["jsonString"];
-		var fileUrl     = keywordParameters["url"];
-		if (jsonObjects) {
-			dojo.data.format.Json.loadDataProviderFromArrayOfJsonData(this, jsonObjects);
-		}
-		if (jsonString) {
-			dojo.data.format.Json.loadDataProviderFromFileContents(this, jsonString);
-		}
-		if (fileUrl) {
-			var arrayOfParts = fileUrl.split('.');
-			var lastPart = arrayOfParts[(arrayOfParts.length - 1)];
-			var formatParser = null;
-			if (lastPart == "json") {
-				formatParser = dojo.data.format.Json;
-			}
-			if (lastPart == "csv") {
-				formatParser = dojo.data.format.Csv;
-			}
-			if (formatParser) {
-				var fileContents = dojo.hostenv.getText(fileUrl);
-				formatParser.loadDataProviderFromFileContents(this, fileContents);
-			} else {
-				dojo.lang.assert(false, "new dojo.data.provider.FlatFile({url: }) was passed a file without a .csv or .json suffix");
-			}
-		}
-	}
-};
-dojo.inherits(dojo.data.provider.FlatFile, dojo.data.provider.Base);
-
-// -------------------------------------------------------------------
-// Public instance methods
-// -------------------------------------------------------------------
-dojo.data.provider.FlatFile.prototype.getProviderCapabilities = function(/* string */ keyword) {
-	dojo.lang.assertType(keyword, [String, "optional"]);
-	if (!this._ourCapabilities) {
-		this._ourCapabilities = {
-			transactions: false,
-			undo: false,
-			login: false,
-			versioning: false,
-			anonymousRead: true,
-			anonymousWrite: false,
-			permissions: false,
-			queries: false,
-			strongTyping: false,
-			datatypes: [String, Date, Number]
-		};
-	}
-	if (keyword) {
-		return this._ourCapabilities[keyword];
-	} else {
-		return this._ourCapabilities;
-	}
-};
-
-dojo.data.provider.FlatFile.prototype.registerAttribute = function(/* string or dojo.data.Attribute */ attributeId) {
-	var registeredAttribute = this.getAttribute(attributeId);
-	if (!registeredAttribute) {
-		var newAttribute = new dojo.data.Attribute(this, attributeId);
-		this._dictionaryOfAttributes[attributeId] = newAttribute;
-		registeredAttribute = newAttribute;
-	}
-	return registeredAttribute; // dojo.data.Attribute
-};
-
-dojo.data.provider.FlatFile.prototype.getAttribute = function(/* string or dojo.data.Attribute */ attributeId) {
-	var attribute = (this._dictionaryOfAttributes[attributeId] || null);
-	return attribute; // dojo.data.Attribute or null
-};
-
-dojo.data.provider.FlatFile.prototype.getAttributes = function() {
-	var arrayOfAttributes = [];
-	for (var key in this._dictionaryOfAttributes) {
-		var attribute = this._dictionaryOfAttributes[key];
-		arrayOfAttributes.push(attribute);
-	}
-	return arrayOfAttributes; // Array
-};
-
-dojo.data.provider.FlatFile.prototype.fetchArray = function(query) {
-	/**
-	 * summary: Returns an Array containing all of the Items.
-	 */ 
-	return this._arrayOfItems; // Array
-};
-
-dojo.data.provider.FlatFile.prototype.fetchResultSet = function(query) {
-	/**
-	 * summary: Returns a ResultSet containing all of the Items.
-	 */ 
-	if (!this._resultSet) {
-		this._resultSet = new dojo.data.ResultSet(this, this.fetchArray(query));
-	}
-	return this._resultSet; // dojo.data.ResultSet
-};
-
-// -------------------------------------------------------------------
-// Private instance methods
-// -------------------------------------------------------------------
-dojo.data.provider.FlatFile.prototype._newItem = function() {
-	var item = new dojo.data.Item(this);
-	this._arrayOfItems.push(item);
-	return item; // dojo.data.Item
-};
-
-dojo.data.provider.FlatFile.prototype._newAttribute = function(/* String */ attributeId) {
-	dojo.lang.assertType(attributeId, String);
-	dojo.lang.assert(this.getAttribute(attributeId) === null);
-	var attribute = new dojo.data.Attribute(this, attributeId);
-	this._dictionaryOfAttributes[attributeId] = attribute;
-	return attribute; // dojo.data.Attribute
-};
-
-dojo.data.provider.Base.prototype._getResultSets = function() {
-	return [this._resultSet]; // Array
-};
-

+ 0 - 27
main/inc/lib/javascript/dojo/src/data/provider/JotSpot.js

@@ -1,27 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.provider.JotSpot");
-dojo.require("dojo.data.provider.Base");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.provider.JotSpot = function() {
-	/**
-	 * summary:
-	 * A JotSpot Data Provider knows how to read data from a JotSpot data 
-	 * store and make the contents accessable as dojo.data.Items.
-	 */
-	dojo.unimplemented('dojo.data.provider.JotSpot');
-};
-
-dojo.inherits(dojo.data.provider.JotSpot, dojo.data.provider.Base);
-

+ 0 - 27
main/inc/lib/javascript/dojo/src/data/provider/MySql.js

@@ -1,27 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.data.provider.MySql");
-dojo.require("dojo.data.provider.Base");
-
-// -------------------------------------------------------------------
-// Constructor
-// -------------------------------------------------------------------
-dojo.data.provider.MySql = function() {
-	/**
-	 * summary:
-	 * A MySql Data Provider knows how to connect to a MySQL database
-	 * on a server and and make the content records available as 
-	 * dojo.data.Items.
-	 */
-	dojo.unimplemented('dojo.data.provider.MySql');
-};
-
-dojo.inherits(dojo.data.provider.MySql, dojo.data.provider.Base);

+ 0 - 45
main/inc/lib/javascript/dojo/src/data/to_do.txt

@@ -1,45 +0,0 @@
-Existing Features
- * can import data from .json or .csv format files
- * can import data from del.icio.us
- * can create and modify data programmatically
- * can bind data to dojo.widget.Chart
- * can bind data to dojo.widget.SortableTable
- * can bind one data set to multiple widgets
- * notifications: widgets are notified when data changes
- * notification available per-item or per-resultSet
- * can create ad-hoc attributes
- * attributes can be loosely-typed 
- * attributes can have meta-data like type and display name
- * half-implemented support for sorting
- * half-implemented support for export to .json
- * API for getting data in simple arrays 
- * API for getting ResultSets with iterators (precursor to support for something like the openrico.org live grid)
- 
-~~~~~~~~~~~~~~~~~~~~~~~~
-To-Do List
- * be able to import data from an html <table></table>
- * think about being able to import data from some type of XML 
- * think about integration with dojo.undo.Manager
- * think more about how to represent the notion of different data types
- * think about what problems we'll run into when we have a MySQL data provider
- * in TableBindingHack, improve support for data types in the SortableTable binding
- * deal with ids (including MySQL multi-field keys)
- * add support for item-references:  employeeItem.set('department', departmentItem);
- * deal with Attributes as instances of Items, not just subclasses of Items
- * unit tests for compare/sort code
- * unit tests for everything
- * implement item.toString('json') and item.toString('xml')
- * implement dataProvider.newItem({name: 'foo', age: 26})
- * deal better with transactions
- * add support for deleting items
- * don't send out multiple notifications to the same observer
- * deal with item versions
- * prototype a Yahoo data provider -- http://developer.yahoo.net/common/json.html
- * prototype a data provider that enforces strong typing
- * prototype a data provider that prevents ad-hoc attributes
- * prototype a data provider that enforces single-kind item
- * prototype a data provider that allows for login/authentication
- * have loosely typed result sets play nicely with widgets that expect strong typing
- * prototype an example of spreadsheet-style formulas or derivation rules
- * experiment with some sort of fetch() that returns only a subset of a data provider's items
-

+ 0 - 761
main/inc/lib/javascript/dojo/src/date.js

@@ -1,761 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.date");
-
-
-/* Supplementary Date Functions
- *******************************/
-
-dojo.date.setDayOfYear = function (dateObject, dayofyear) {
-	dateObject.setMonth(0);
-	dateObject.setDate(dayofyear);
-	return dateObject;
-}
-
-dojo.date.getDayOfYear = function (dateObject) {
-	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
-	return Math.floor((dateObject.getTime() -
-		firstDayOfYear.getTime()) / 86400000);
-}
-
-
-
-
-dojo.date.setWeekOfYear = function (dateObject, week, firstDay) {
-	if (arguments.length == 1) { firstDay = 0; } // Sunday
-	dojo.unimplemented("dojo.date.setWeekOfYear");
-}
-
-dojo.date.getWeekOfYear = function (dateObject, firstDay) {
-	if (arguments.length == 1) { firstDay = 0; } // Sunday
-
-	// work out the first day of the year corresponding to the week
-	var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1);
-	var day = firstDayOfYear.getDay();
-	firstDayOfYear.setDate(firstDayOfYear.getDate() -
-			day + firstDay - (day > firstDay ? 7 : 0));
-
-	return Math.floor((dateObject.getTime() -
-		firstDayOfYear.getTime()) / 604800000);
-}
-
-
-
-
-dojo.date.setIsoWeekOfYear = function (dateObject, week, firstDay) {
-	if (arguments.length == 1) { firstDay = 1; } // Monday
-	dojo.unimplemented("dojo.date.setIsoWeekOfYear");
-}
-
-dojo.date.getIsoWeekOfYear = function (dateObject, firstDay) {
-	if (arguments.length == 1) { firstDay = 1; } // Monday
-	dojo.unimplemented("dojo.date.getIsoWeekOfYear");
-}
-
-
-
-
-/* ISO 8601 Functions
- *********************/
-
-dojo.date.setIso8601 = function (dateObject, string){
-	var comps = (string.indexOf("T") == -1) ? string.split(" ") : string.split("T");
-	dojo.date.setIso8601Date(dateObject, comps[0]);
-	if (comps.length == 2) { dojo.date.setIso8601Time(dateObject, comps[1]); }
-	return dateObject;
-}
-
-dojo.date.fromIso8601 = function (string) {
-	return dojo.date.setIso8601(new Date(0, 0), string);
-}
-
-
-
-
-dojo.date.setIso8601Date = function (dateObject, string) {
-	var regexp = "^([0-9]{4})((-?([0-9]{2})(-?([0-9]{2}))?)|" +
-			"(-?([0-9]{3}))|(-?W([0-9]{2})(-?([1-7]))?))?$";
-	var d = string.match(new RegExp(regexp));
-	if(!d) {
-		dojo.debug("invalid date string: " + string);
-		return false;
-	}
-	var year = d[1];
-	var month = d[4];
-	var date = d[6];
-	var dayofyear = d[8];
-	var week = d[10];
-	var dayofweek = (d[12]) ? d[12] : 1;
-
-	dateObject.setYear(year);
-	
-	if (dayofyear) { dojo.date.setDayOfYear(dateObject, Number(dayofyear)); }
-	else if (week) {
-		dateObject.setMonth(0);
-		dateObject.setDate(1);
-		var gd = dateObject.getDay();
-		var day =  (gd) ? gd : 7;
-		var offset = Number(dayofweek) + (7 * Number(week));
-		
-		if (day <= 4) { dateObject.setDate(offset + 1 - day); }
-		else { dateObject.setDate(offset + 8 - day); }
-	} else {
-		if (month) { 
-			dateObject.setDate(1);
-			dateObject.setMonth(month - 1); 
-		}
-		if (date) { dateObject.setDate(date); }
-	}
-	
-	return dateObject;
-}
-
-dojo.date.fromIso8601Date = function (string) {
-	return dojo.date.setIso8601Date(new Date(0, 0), string);
-}
-
-
-
-
-dojo.date.setIso8601Time = function (dateObject, string) {
-	// first strip timezone info from the end
-	var timezone = "Z|(([-+])([0-9]{2})(:?([0-9]{2}))?)$";
-	var d = string.match(new RegExp(timezone));
-
-	var offset = 0; // local time if no tz info
-	if (d) {
-		if (d[0] != 'Z') {
-			offset = (Number(d[3]) * 60) + Number(d[5]);
-			offset *= ((d[2] == '-') ? 1 : -1);
-		}
-		offset -= dateObject.getTimezoneOffset();
-		string = string.substr(0, string.length - d[0].length);
-	}
-
-	// then work out the time
-	var regexp = "^([0-9]{2})(:?([0-9]{2})(:?([0-9]{2})(\.([0-9]+))?)?)?$";
-	var d = string.match(new RegExp(regexp));
-	if(!d) {
-		dojo.debug("invalid time string: " + string);
-		return false;
-	}
-	var hours = d[1];
-	var mins = Number((d[3]) ? d[3] : 0);
-	var secs = (d[5]) ? d[5] : 0;
-	var ms = d[7] ? (Number("0." + d[7]) * 1000) : 0;
-
-	dateObject.setHours(hours);
-	dateObject.setMinutes(mins);
-	dateObject.setSeconds(secs);
-	dateObject.setMilliseconds(ms);
-	
-	return dateObject;
-}
-
-dojo.date.fromIso8601Time = function (string) {
-	return dojo.date.setIso8601Time(new Date(0, 0), string);
-}
-
-
-
-/* Informational Functions
- **************************/
-
-dojo.date.shortTimezones = ["IDLW", "BET", "HST", "MART", "AKST", "PST", "MST",
-	"CST", "EST", "AST", "NFT", "BST", "FST", "AT", "GMT", "CET", "EET", "MSK",
-	"IRT", "GST", "AFT", "AGTT", "IST", "NPT", "ALMT", "MMT", "JT", "AWST",
-	"JST", "ACST", "AEST", "LHST", "VUT", "NFT", "NZT", "CHAST", "PHOT",
-	"LINT"];
-dojo.date.timezoneOffsets = [-720, -660, -600, -570, -540, -480, -420, -360,
-	-300, -240, -210, -180, -120, -60, 0, 60, 120, 180, 210, 240, 270, 300,
-	330, 345, 360, 390, 420, 480, 540, 570, 600, 630, 660, 690, 720, 765, 780,
-	840];
-/*
-dojo.date.timezones = ["International Date Line West", "Bering Standard Time",
-	"Hawaiian Standard Time", "Marquesas Time", "Alaska Standard Time",
-	"Pacific Standard Time (USA)", "Mountain Standard Time",
-	"Central Standard Time (USA)", "Eastern Standard Time (USA)",
-	"Atlantic Standard Time", "Newfoundland Time", "Brazil Standard Time",
-	"Fernando de Noronha Standard Time (Brazil)", "Azores Time",
-	"Greenwich Mean Time", "Central Europe Time", "Eastern Europe Time",
-	"Moscow Time", "Iran Standard Time", "Gulf Standard Time",
-	"Afghanistan Time", "Aqtobe Time", "Indian Standard Time", "Nepal Time",
-	"Almaty Time", "Myanmar Time", "Java Time",
-	"Australian Western Standard Time", "Japan Standard Time",
-	"Australian Central Standard Time", "Lord Hove Standard Time (Australia)",
-	"Vanuata Time", "Norfolk Time (Australia)", "New Zealand Standard Time",
-	"Chatham Standard Time (New Zealand)", "Phoenix Islands Time (Kribati)",
-	"Line Islands Time (Kribati)"];
-*/
-dojo.date.months = ["January", "February", "March", "April", "May", "June",
-	"July", "August", "September", "October", "November", "December"];
-dojo.date.shortMonths = ["Jan", "Feb", "Mar", "Apr", "May", "June",
-	"July", "Aug", "Sep", "Oct", "Nov", "Dec"];
-dojo.date.days = ["Sunday", "Monday", "Tuesday", "Wednesday",
-	"Thursday", "Friday", "Saturday"];
-dojo.date.shortDays = ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"];
-
-
-dojo.date.getDaysInMonth = function (dateObject) {
-	var month = dateObject.getMonth();
-	var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
-	if (month == 1 && dojo.date.isLeapYear(dateObject)) { return 29; }
-	else { return days[month]; }
-}
-
-dojo.date.isLeapYear = function (dateObject) {
-	/*
-	 * 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 == 0) ? true : (year%100 == 0) ? false : (year%4 == 0) ? true : false;
-}
-
-
-
-dojo.date.getDayName = function (dateObject) {
-	return dojo.date.days[dateObject.getDay()];
-}
-
-dojo.date.getDayShortName = function (dateObject) {
-	return dojo.date.shortDays[dateObject.getDay()];
-}
-
-
-
-
-dojo.date.getMonthName = function (dateObject) {
-	return dojo.date.months[dateObject.getMonth()];
-}
-
-dojo.date.getMonthShortName = function (dateObject) {
-	return dojo.date.shortMonths[dateObject.getMonth()];
-}
-
-
-
-
-dojo.date.getTimezoneName = function (dateObject) {
-	// need to negate timezones to get it right 
-	// i.e UTC+1 is CET winter, but getTimezoneOffset returns -60
-	var timezoneOffset = -(dateObject.getTimezoneOffset());
-	
-	for (var i = 0; i < dojo.date.timezoneOffsets.length; i++) {
-		if (dojo.date.timezoneOffsets[i] == timezoneOffset) {
-			return dojo.date.shortTimezones[i];
-		}
-	}
-	
-	// we don't know so return it formatted as "+HH:MM"
-	function $ (s) { s = String(s); while (s.length < 2) { s = "0" + s; } return s; }
-	return (timezoneOffset < 0 ? "-" : "+") + $(Math.floor(Math.abs(
-		timezoneOffset)/60)) + ":" + $(Math.abs(timezoneOffset)%60);
-}
-
-
-
-
-dojo.date.getOrdinal = function (dateObject) {
-	var date = dateObject.getDate();
-
-	if (date%100 != 11 && date%10 == 1) { return "st"; }
-	else if (date%100 != 12 && date%10 == 2) { return "nd"; }
-	else if (date%100 != 13 && date%10 == 3) { return "rd"; }
-	else { return "th"; }
-}
-
-
-
-/* Date Formatter Functions
- ***************************/
-
-// POSIX strftime
-// see <http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html>
-dojo.date.format = dojo.date.strftime = function (dateObject, format) {
-
-	// zero pad
-	var padChar = null;
-	function _ (s, n) {
-		s = String(s);
-		n = (n || 2) - s.length;
-		while (n-- > 0) { s = (padChar == null ? "0" : padChar) + s; }
-		return s;
-	}
-	
-	function $ (property) {
-		switch (property) {
-			case "a": // abbreviated weekday name according to the current locale
-				return dojo.date.getDayShortName(dateObject); break;
-
-			case "A": // full weekday name according to the current locale
-				return dojo.date.getDayName(dateObject); break;
-
-			case "b":
-			case "h": // abbreviated month name according to the current locale
-				return dojo.date.getMonthShortName(dateObject); break;
-				
-			case "B": // full month name according to the current locale
-				return dojo.date.getMonthName(dateObject); break;
-				
-			case "c": // preferred date and time representation for the current
-				      // locale
-				return dateObject.toLocaleString(); break;
-
-			case "C": // century number (the year divided by 100 and truncated
-				      // to an integer, range 00 to 99)
-				return _(Math.floor(dateObject.getFullYear()/100)); break;
-				
-			case "d": // day of the month as a decimal number (range 01 to 31)
-				return _(dateObject.getDate()); break;
-				
-			case "D": // same as %m/%d/%y
-				return $("m") + "/" + $("d") + "/" + $("y"); break;
-					
-			case "e": // day of the month as a decimal number, a single digit is
-				      // preceded by a space (range ' 1' to '31')
-				if (padChar == null) { padChar = " "; }
-				return _(dateObject.getDate(), 2); break;
-			
-			case "g": // like %G, but without the century.
-				break;
-			
-			case "G": // The 4-digit year corresponding to the ISO week number
-				      // (see %V).  This has the same format and value as %Y,
-				      // except that if the ISO week number belongs to the
-				      // previous or next year, that year is used instead.
-				break;
-			
-			case "F": // same as %Y-%m-%d
-				return $("Y") + "-" + $("m") + "-" + $("d"); break;
-				
-			case "H": // hour as a decimal number using a 24-hour clock (range
-				      // 00 to 23)
-				return _(dateObject.getHours()); break;
-				
-			case "I": // hour as a decimal number using a 12-hour clock (range
-				      // 01 to 12)
-				return _(dateObject.getHours() % 12 || 12); break;
-				
-			case "j": // day of the year as a decimal number (range 001 to 366)
-				return _(dojo.date.getDayOfYear(dateObject), 3); break;
-				
-			case "m": // month as a decimal number (range 01 to 12)
-				return _(dateObject.getMonth() + 1); break;
-				
-			case "M": // minute as a decimal numbe
-				return _(dateObject.getMinutes()); break;
-			
-			case "n":
-				return "\n"; break;
-
-			case "p": // either `am' or `pm' according to the given time value,
-				      // or the corresponding strings for the current locale
-				return dateObject.getHours() < 12 ? "am" : "pm"; break;
-				
-			case "r": // time in a.m. and p.m. notation
-				return $("I") + ":" + $("M") + ":" + $("S") + " " + $("p"); break;
-				
-			case "R": // time in 24 hour notation
-				return $("H") + ":" + $("M"); break;
-				
-			case "S": // second as a decimal number
-				return _(dateObject.getSeconds()); break;
-
-			case "t":
-				return "\t"; break;
-
-			case "T": // current time, equal to %H:%M:%S
-				return $("H") + ":" + $("M") + ":" + $("S"); break;
-				
-			case "u": // weekday as a decimal number [1,7], with 1 representing
-				      // Monday
-				return String(dateObject.getDay() || 7); break;
-				
-			case "U": // week number of the current year as a decimal number,
-				      // starting with the first Sunday as the first day of the
-				      // first week
-				return _(dojo.date.getWeekOfYear(dateObject)); break;
-
-			case "V": // week number of the year (Monday as the first day of the
-				      // week) as a decimal number [01,53]. If the week containing
-				      // 1 January has four or more days in the new year, then it 
-				      // is considered week 1. Otherwise, it is the last week of 
-				      // the previous year, and the next week is week 1.
-				return _(dojo.date.getIsoWeekOfYear(dateObject)); break;
-				
-			case "W": // week number of the current year as a decimal number,
-				      // starting with the first Monday as the first day of the
-				      // first week
-				return _(dojo.date.getWeekOfYear(dateObject, 1)); break;
-				
-			case "w": // day of the week as a decimal, Sunday being 0
-				return String(dateObject.getDay()); break;
-
-			case "x": // preferred date representation for the current locale
-				      // without the time
-				break;
-
-			case "X": // preferred date representation for the current locale
-				      // without the time
-				break;
-
-			case "y": // year as a decimal number without a century (range 00 to
-				      // 99)
-				return _(dateObject.getFullYear()%100); break;
-				
-			case "Y": // year as a decimal number including the century
-				return String(dateObject.getFullYear()); break;
-			
-			case "z": // time zone or name or abbreviation
-				var timezoneOffset = dateObject.getTimezoneOffset();
-				return (timezoneOffset < 0 ? "-" : "+") + 
-					_(Math.floor(Math.abs(timezoneOffset)/60)) + ":" +
-					_(Math.abs(timezoneOffset)%60); break;
-				
-			case "Z": // time zone or name or abbreviation
-				return dojo.date.getTimezoneName(dateObject); break;
-			
-			case "%":
-				return "%"; break;
-		}
-	}
-
-	// parse the formatting string and construct the resulting string
-	var string = "";
-	var i = 0, index = 0, switchCase;
-	while ((index = format.indexOf("%", i)) != -1) {
-		string += format.substring(i, index++);
-		
-		// inspect modifier flag
-		switch (format.charAt(index++)) {
-			case "_": // Pad a numeric result string with spaces.
-				padChar = " "; break;
-			case "-": // Do not pad a numeric result string.
-				padChar = ""; break;
-			case "0": // Pad a numeric result string with zeros.
-				padChar = "0"; break;
-			case "^": // Convert characters in result string to upper case.
-				switchCase = "upper"; break;
-			case "#": // Swap the case of the result string.
-				switchCase = "swap"; break;
-			default: // no modifer flag so decremenet the index
-				padChar = null; index--; break;
-		}
-
-		// toggle case if a flag is set
-		var property = $(format.charAt(index++));
-		if (switchCase == "upper" ||
-			(switchCase == "swap" && /[a-z]/.test(property))) {
-			property = property.toUpperCase();
-		} else if (switchCase == "swap" && !/[a-z]/.test(property)) {
-			property = property.toLowerCase();
-		}
-		var swicthCase = null;
-		
-		string += property;
-		i = index;
-	}
-	string += format.substring(i);
-	
-	return string;
-}
-
-/* compare and add
- ******************/
-dojo.date.compareTypes={
-	// 	summary
-	//	bitmask for comparison operations.
-	DATE:1, TIME:2 
-};
-dojo.date.compare=function(/* Date */ dateA, /* Date */ dateB, /* int */ options){
-	//	summary
-	//	Compare two date objects by date, time, or both.
-	var dA=dateA;
-	var dB=dateB||new Date();
-	var now=new Date();
-	var opt=options||(dojo.date.compareTypes.DATE|dojo.date.compareTypes.TIME);
-	var d1=new Date(
-		((opt&dojo.date.compareTypes.DATE)?(dA.getFullYear()):now.getFullYear()), 
-		((opt&dojo.date.compareTypes.DATE)?(dA.getMonth()):now.getMonth()), 
-		((opt&dojo.date.compareTypes.DATE)?(dA.getDate()):now.getDate()), 
-		((opt&dojo.date.compareTypes.TIME)?(dA.getHours()):0), 
-		((opt&dojo.date.compareTypes.TIME)?(dA.getMinutes()):0), 
-		((opt&dojo.date.compareTypes.TIME)?(dA.getSeconds()):0)
-	);
-	var d2=new Date(
-		((opt&dojo.date.compareTypes.DATE)?(dB.getFullYear()):now.getFullYear()), 
-		((opt&dojo.date.compareTypes.DATE)?(dB.getMonth()):now.getMonth()), 
-		((opt&dojo.date.compareTypes.DATE)?(dB.getDate()):now.getDate()), 
-		((opt&dojo.date.compareTypes.TIME)?(dB.getHours()):0), 
-		((opt&dojo.date.compareTypes.TIME)?(dB.getMinutes()):0), 
-		((opt&dojo.date.compareTypes.TIME)?(dB.getSeconds()):0)
-	);
-	if(d1.valueOf()>d2.valueOf()){
-		return 1;	//	int
-	}
-	if(d1.valueOf()<d2.valueOf()){
-		return -1;	//	int
-	}
-	return 0;	//	int
-}
-
-dojo.date.dateParts={ 
-	//	summary
-	//	constants for use in dojo.date.add
-	YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MILLISECOND:6 
-};
-dojo.date.add=function(/* Date */ d, /* dojo.date.dateParts */ unit, /* int */ amount){
-	var n=(amount)?amount:1;
-	var v;
-	switch(unit){
-		case dojo.date.dateParts.YEAR:{
-			v=new Date(d.getFullYear()+n, d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());
-			break;
-		}
-		case dojo.date.dateParts.MONTH:{
-			v=new Date(d.getFullYear(), d.getMonth()+n, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());
-			break;
-		}
-		case dojo.date.dateParts.HOUR:{
-			v=new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours()+n, d.getMinutes(), d.getSeconds(), d.getMilliseconds());
-			break;
-		}
-		case dojo.date.dateParts.MINUTE:{
-			v=new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes()+n, d.getSeconds(), d.getMilliseconds());
-			break;
-		}
-		case dojo.date.dateParts.SECOND:{
-			v=new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()+n, d.getMilliseconds());
-			break;
-		}
-		case dojo.date.dateParts.MILLISECOND:{
-			v=new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds()+n);
-			break;
-		}
-		default:{
-			v=new Date(d.getFullYear(), d.getMonth(), d.getDate()+n, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());
-		}
-	};
-	return v;	//	Date
-};
-
-/* Deprecated
- *************/
-
-
-dojo.date.toString = function(date, format){
-	dojo.deprecated("dojo.date.toString",
-		"use dojo.date.format instead", "0.4");
-
-	if (format.indexOf("#d") > -1) {
-		format = format.replace(/#dddd/g, dojo.date.getDayOfWeekName(date));
-		format = format.replace(/#ddd/g, dojo.date.getShortDayOfWeekName(date));
-		format = format.replace(/#dd/g, (date.getDate().toString().length==1?"0":"")+date.getDate());
-		format = format.replace(/#d/g, date.getDate());
-	}
-
-	if (format.indexOf("#M") > -1) {
-		format = format.replace(/#MMMM/g, dojo.date.getMonthName(date));
-		format = format.replace(/#MMM/g, dojo.date.getShortMonthName(date));
-		format = format.replace(/#MM/g, ((date.getMonth()+1).toString().length==1?"0":"")+(date.getMonth()+1));
-		format = format.replace(/#M/g, date.getMonth() + 1);
-	}
-
-	if (format.indexOf("#y") > -1) {
-		var fullYear = date.getFullYear().toString();
-		format = format.replace(/#yyyy/g, fullYear);
-		format = format.replace(/#yy/g, fullYear.substring(2));
-		format = format.replace(/#y/g, fullYear.substring(3));
-	}
-
-	// Return if only date needed;
-	if (format.indexOf("#") == -1) {
-		return format;
-	}
-	
-	if (format.indexOf("#h") > -1) {
-		var hours = date.getHours();
-		hours = (hours > 12 ? hours - 12 : (hours == 0) ? 12 : hours);
-		format = format.replace(/#hh/g, (hours.toString().length==1?"0":"")+hours);
-		format = format.replace(/#h/g, hours);
-	}
-	
-	if (format.indexOf("#H") > -1) {
-		format = format.replace(/#HH/g, (date.getHours().toString().length==1?"0":"")+date.getHours());
-		format = format.replace(/#H/g, date.getHours());
-	}
-	
-	if (format.indexOf("#m") > -1) {
-		format = format.replace(/#mm/g, (date.getMinutes().toString().length==1?"0":"")+date.getMinutes());
-		format = format.replace(/#m/g, date.getMinutes());
-	}
-
-	if (format.indexOf("#s") > -1) {
-		format = format.replace(/#ss/g, (date.getSeconds().toString().length==1?"0":"")+date.getSeconds());
-		format = format.replace(/#s/g, date.getSeconds());
-	}
-	
-	if (format.indexOf("#T") > -1) {
-		format = format.replace(/#TT/g, date.getHours() >= 12 ? "PM" : "AM");
-		format = format.replace(/#T/g, date.getHours() >= 12 ? "P" : "A");
-	}
-
-	if (format.indexOf("#t") > -1) {
-		format = format.replace(/#tt/g, date.getHours() >= 12 ? "pm" : "am");
-		format = format.replace(/#t/g, date.getHours() >= 12 ? "p" : "a");
-	}
-					
-	return format;
-	
-}
-
-
-dojo.date.daysInMonth = function (month, year) {
-	dojo.deprecated("daysInMonth(month, year)",
-		"replaced by getDaysInMonth(dateObject)", "0.4");
-	return dojo.date.getDaysInMonth(new Date(year, month, 1));
-}
-
-/**
- *
- * Returns a string of the date in the version "January 1, 2004"
- *
- * @param date The date object
- */
-dojo.date.toLongDateString = function(date) {
-	dojo.deprecated("dojo.date.toLongDateString",
-		'use dojo.date.format(date, "%B %e, %Y") instead', "0.4");
-	return dojo.date.format(date, "%B %e, %Y")
-}
-
-/**
- *
- * Returns a string of the date in the version "Jan 1, 2004"
- *
- * @param date The date object
- */
-dojo.date.toShortDateString = function(date) {
-	dojo.deprecated("dojo.date.toShortDateString",
-		'use dojo.date.format(date, "%b %e, %Y") instead', "0.4");
-	return dojo.date.format(date, "%b %e, %Y");
-}
-
-/**
- *
- * Returns military formatted time
- *
- * @param date the date object
- */
-dojo.date.toMilitaryTimeString = function(date){
-	dojo.deprecated("dojo.date.toMilitaryTimeString",
-		'use dojo.date.format(date, "%T")', "0.4");
-	return dojo.date.format(date, "%T");
-}
-
-/**
- *
- * Returns a string of the date relative to the current date.
- *
- * @param date The date object
- *
- * Example returns:
- * - "1 minute ago"
- * - "4 minutes ago"
- * - "Yesterday"
- * - "2 days ago"
- */
-dojo.date.toRelativeString = function(date) {
-	var now = new Date();
-	var diff = (now - date) / 1000;
-	var end = " ago";
-	var future = false;
-	if(diff < 0) {
-		future = true;
-		end = " from now";
-		diff = -diff;
-	}
-
-	if(diff < 60) {
-		diff = Math.round(diff);
-		return diff + " second" + (diff == 1 ? "" : "s") + end;
-	} else if(diff < 3600) {
-		diff = Math.round(diff/60);
-		return diff + " minute" + (diff == 1 ? "" : "s") + end;
-	} else if(diff < 3600*24 && date.getDay() == now.getDay()) {
-		diff = Math.round(diff/3600);
-		return diff + " hour" + (diff == 1 ? "" : "s") + end;
-	} else if(diff < 3600*24*7) {
-		diff = Math.round(diff/(3600*24));
-		if(diff == 1) {
-			return future ? "Tomorrow" : "Yesterday";
-		} else {
-			return diff + " days" + end;
-		}
-	} else {
-		return dojo.date.toShortDateString(date);
-	}
-}
-
-/**
- * Retrieves the day of the week the Date is set to.
- *
- * @return The day of the week
- */
-dojo.date.getDayOfWeekName = function (date) {
-	dojo.deprecated("dojo.date.getDayOfWeekName",
-		"use dojo.date.getDayName instead", "0.4");
-	return dojo.date.days[date.getDay()];
-}
-
-/**
- * Retrieves the short day of the week name the Date is set to.
- *
- * @return The short day of the week name
- */
-dojo.date.getShortDayOfWeekName = function (date) {
-	dojo.deprecated("dojo.date.getShortDayOfWeekName",
-		"use dojo.date.getDayShortName instead", "0.4");
-	return dojo.date.shortDays[date.getDay()];
-}
-
-/**
- * Retrieves the short month name the Date is set to.
- *
- * @return The short month name
- */
-dojo.date.getShortMonthName = function (date) {
-	dojo.deprecated("dojo.date.getShortMonthName",
-		"use dojo.date.getMonthShortName instead", "0.4");
-	return dojo.date.shortMonths[date.getMonth()];
-}
-
-
-/**
- * Convert a Date to a SQL string, optionally ignoring the HH:MM:SS portion of the Date
- */
-dojo.date.toSql = function(date, noTime) {
-	return dojo.date.format(date, "%F" + !noTime ? " %T" : "");
-}
-
-/**
- * Convert a SQL date string to a JavaScript Date object
- */
-dojo.date.fromSql = function(sqlDate) {
-	var parts = sqlDate.split(/[\- :]/g);
-	while(parts.length < 6) {
-		parts.push(0);
-	}
-	return new Date(parts[0], (parseInt(parts[1],10)-1), parts[2], parts[3], parts[4], parts[5]);
-}
-

+ 0 - 80
main/inc/lib/javascript/dojo/src/debug.js

@@ -1,80 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
- * Produce a line of debug output. 
- * Does nothing unless djConfig.isDebug is true.
- * varargs, joined with ''.
- * Caller should not supply a trailing "\n".
- */
-dojo.debug = function(){
-	if (!djConfig.isDebug) { return; }
-	var args = arguments;
-	if(dj_undef("println", dojo.hostenv)){
-		dojo.raise("dojo.debug not available (yet?)");
-	}
-	var isJUM = dj_global["jum"] && !dj_global["jum"].isBrowser;
-	var s = [(isJUM ? "": "DEBUG: ")];
-	for(var i=0;i<args.length;++i){
-		if(!false && args[i] && args[i] instanceof Error){
-			var msg = "[" + args[i].name + ": " + dojo.errorToString(args[i]) +
-				(args[i].fileName ? ", file: " + args[i].fileName : "") +
-				(args[i].lineNumber ? ", line: " + args[i].lineNumber : "") + "]";
-		} else {
-			try {
-				var msg = String(args[i]);
-			} catch(e) {
-				if(dojo.render.html.ie) {
-					var msg = "[ActiveXObject]";
-				} else {
-					var msg = "[unknown]";
-				}
-			}
-		}
-		s.push(msg);
-	}
-	if(isJUM){ // this seems to be the only way to get JUM to "play nice"
-		jum.debug(s.join(" "));
-	}else{
-		dojo.hostenv.println(s.join(" "));
-	}
-}
-
-/**
- * this is really hacky for now - just 
- * display the properties of the object
-**/
-
-dojo.debugShallow = function(obj){
-	if (!djConfig.isDebug) { return; }
-	dojo.debug('------------------------------------------------------------');
-	dojo.debug('Object: '+obj);
-	var props = [];
-	for(var prop in obj){
-		try {
-			props.push(prop + ': ' + obj[prop]);
-		} catch(E) {
-			props.push(prop + ': ERROR - ' + E.message);
-		}
-	}
-	props.sort();
-	for(var i = 0; i < props.length; i++) {
-		dojo.debug(props[i]);
-	}
-	dojo.debug('------------------------------------------------------------');
-}
-
-dojo.debugDeep = function(obj){
-	if (!djConfig.isDebug) { return; }
-	if (!dojo.uri || !dojo.uri.dojoUri){ return dojo.debug("You'll need to load dojo.uri.* for deep debugging - sorry!"); }
-	if (!window.open){ return dojo.debug('Deep debugging is only supported in host environments with window.open'); }
-	var win = window.open(dojo.uri.dojoUri("src/debug/deep.html"), '_blank', 'width=600, height=400, resizable=yes, scrollbars=yes, status=yes');
-	win.debugVar = obj;
-}

+ 0 - 17
main/inc/lib/javascript/dojo/src/debug/Firebug.js

@@ -1,17 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.debug.Firebug");
-
-if (console.log) {
-	dojo.hostenv.println=console.log;
-} else {
-	dojo.debug("dojo.debug.Firebug requires Firebug > 0.4");
-}

BIN
main/inc/lib/javascript/dojo/src/debug/arrow_hide.gif


BIN
main/inc/lib/javascript/dojo/src/debug/arrow_show.gif


+ 0 - 359
main/inc/lib/javascript/dojo/src/debug/deep.html

@@ -1,359 +0,0 @@
-<html>
-<head>
-<title>Deep Debugger</title>
-<script>
-
-var tableRows = {};
-var tableCels = {};
-var tableObjs = {};
-var tablesBuilt = {};
-var tableShows = {};
-var tableHides = {};
-
-// IE: nodes w/id need to be redeclared or getElementById is b0rked
-var frame = null;
-
-window.onload = function(){
-	// if IE loads this page too quickly (instantly) then 
-	// window.debugVar might not have been set
-	window.setTimeout(startMeUp, 100);
-}
-
-function startMeUp(){
-	frame = document.getElementById('frame');
-	buildTable('root', frame, window.debugVar);
-}
-
-function buildTable(path, parent, obj){
-
-	var keys = [];
-	var vals = [];
-	for(var prop in obj){
-		keys.push(prop);
-		try {
-			vals[prop] = obj[prop];
-		} catch(E) {
-			vals[prop] = 'ERROR: ' + E.message;
-		}
-	}
-	keys.sort(keySorter);
-
-	if (!keys.length){
-
-		var div = document.createElement('div');
-		div.appendChild(document.createTextNode('Object has no properties.'));
-
-		parent.appendChild(div);
-		return;
-	}
-
-
-	var t = document.createElement('table');
-	t.border = "1";
-
-	var tb = document.createElement('tbody');
-	t.appendChild(tb);
-
-
-	for(var i = 0; i < keys.length; i++) {
-		buildTableRow(path+'-'+keys[i], tb, keys[i], vals[keys[i]]);
-	}
-
-	if (path == 'root'){
-		//t.style.width = '90%';
-	}
-	t.style.width = '100%';
-
-	parent.appendChild(t);
-
-	tablesBuilt[path] = true;
-}
-
-function buildTableRow(path, tb, name, value) {
-
-	var simpleType = typeof(value);
-	var createSubrow = (simpleType == 'object');
-	var complexType = simpleType;
-
-	if (simpleType == 'object'){
-		var cls = getConstructorClass(value);
-		if (cls){
-			if (cls == 'Object'){
-			}else if (cls == 'Array'){
-				complexType = 'array';
-			}else{
-				complexType += ' ('+cls+')';
-			}
-		}
-	}
-
-/*var tr1 = document.createElement('tr');
-	var td1 = document.createElement('td');
-	var td2 = document.createElement('td');
-	var td3 = document.createElement('td');
-	var td4 = document.createElement('td');*/
-
-	var row = tb.rows.length;
-	var tr1 = tb.insertRow(row++);
-	var td1 = tr1.insertCell(0);
-	var td2 = tr1.insertCell(1);
-	var td3 = tr1.insertCell(2);
-	var td4 = tr1.insertCell(3);
-	
-	tr1.style.verticalAlign = 'top';
-	td1.style.verticalAlign = 'middle';
-
-	td1.className = 'propPlus';
-	td2.className = 'propName';
-	td3.className = 'propType';
-	td4.className = 'propVal';
-
-	//tr1.appendChild(td1);
-	//tr1.appendChild(td2);
-	//tr1.appendChild(td3);
-	//tr1.appendChild(td4);
-
-	if (createSubrow){
-		var img1 = document.createElement('img');
-		img1.width = 9;
-		img1.height = 9;
-		img1.src = 'arrow_show.gif';
-		var a1 = document.createElement('a');
-		a1.appendChild(img1);
-		a1.href = '#';
-		a1.onclick = function(){ showTableRow(path); return false; };
-
-		var img2 = document.createElement('img');
-		img2.width = 9;
-		img2.height = 9;
-		img2.src = 'arrow_hide.gif';
-		var a2 = document.createElement('a');
-		a2.appendChild(img2);
-		a2.href = '#';
-		a2.onclick = function(){ hideTableRow(path); return false; };
-		a2.style.display = 'none';
-
-		tableShows[path] = a1;
-		tableHides[path] = a2;
-
-		td1.appendChild(a1);
-		td1.appendChild(a2);
-	}else{
-		var img = document.createElement('img');
-		img.width = 9;
-		img.height = 9;
-		img.src = 'spacer.gif';
-
-		td1.appendChild(img);
-	}
-
-	td2.appendChild(document.createTextNode(name));
-	td3.appendChild(document.createTextNode(complexType));
-	td4.appendChild(buildPreBlock(value));
-
-	//tb.appendChild(tr1);
-
-	if (createSubrow){
-		var tr2 = tb.insertRow(row++);
-		var td5 = tr2.insertCell(0);
-		var td6 = tr2.insertCell(1);
-		
-		//var tr2 = document.createElement('tr');
-		//var td5 = document.createElement('td');
-		//var td6 = document.createElement('td');
-
-		td5.innerHTML = '&nbsp;';
-		//td6.innerHTML = '&nbsp;';
-
-		td6.colSpan = '3';
-
-		tr2.appendChild(td5);
-		tr2.appendChild(td6);
-
-		tr2.style.display = 'none';
-
-		tb.appendChild(tr2);
-
-		tableRows[path] = tr2;
-		tableCels[path] = td6;
-		tableObjs[path] = value;
-	}
-}
-
-function showTableRow(path){
-
-	var tr = tableRows[path];
-	var td = tableCels[path];
-	var a1 = tableShows[path];
-	var a2 = tableHides[path];
-
-	if (!tablesBuilt[path]){
-
-		//alert('building table for '+path);
-		buildTable(path, td, tableObjs[path]);
-	}
-
-	tr.style.display = 'table-row';
-
-	a1.style.display = 'none';
-	a2.style.display = 'inline';
-}
-
-function hideTableRow(path){
-
-	var tr = tableRows[path];
-	var a1 = tableShows[path];
-	var a2 = tableHides[path];
-
-	tr.style.display = 'none';
-
-	a1.style.display = 'inline';
-	a2.style.display = 'none';
-}
-
-function buildPreBlock(value){
-
-	//
-	// how many lines ?
-	//
-
-	var s = ''+value;
-	s = s.replace("\r\n", "\n");
-	s = s.replace("\r", "");
-	var lines = s.split("\n");
-
-
-	if (lines.length < 2){
-
-		if (lines[0].length < 60){
-
-			var pre = document.createElement('pre');
-			pre.appendChild(document.createTextNode(s));
-			return pre;
-		}
-	}
-
-
-	//
-	// multiple lines :(
-	//
-
-	var preview = lines[0].substr(0, 60) + ' ...';
-
-	var pre1 = document.createElement('pre');
-	pre1.appendChild(document.createTextNode(preview));
-	pre1.className = 'clicky';
-
-	var pre2 = document.createElement('pre');
-	pre2.appendChild(document.createTextNode(s));
-	pre2.style.display = 'none';
-	pre2.className = 'clicky';
-
-	pre1.onclick = function(){
-		pre1.style.display = 'none';
-		pre2.style.display = 'block';
-	}
-
-	pre2.onclick = function(){
-		pre1.style.display = 'block';
-		pre2.style.display = 'none';
-	}
-
-	var pre = document.createElement('div');
-
-	pre.appendChild(pre1);
-	pre.appendChild(pre2);
-
-	return pre;
-}
-
-function getConstructorClass(obj){
-
-	if (!obj.constructor || !obj.constructor.toString) return;
-
-	var m = obj.constructor.toString().match(/function\s*(\w+)/);
-
-	if (m && m.length == 2) return m[1];
-
-	return null;
-}
-
-function keySorter(a, b){
-
-	if (a == parseInt(a) && b == parseInt(b)){
-
-		return (parseInt(a) > parseInt(b)) ? 1 : ((parseInt(a) < parseInt(b)) ? -1 : 0);
-	}
-
-	// sort by lowercase string
-
-	var a2 = String(a).toLowerCase();
-	var b2 = String(b).toLowerCase();
-
-	return (a2 > b2) ? 1 : ((a2 < b2) ? -1 : 0);
-}
-
-</script>
-<style>
-
-body {
-	font-family: arial, helvetica, sans-serif;
-}
-
-table {
-	border-width: 0px;
-	border-spacing: 1px;
-	border-collapse: separate;
-}
-
-td {
-	border-width: 0px;
-	padding: 2px;
-}
-
-img {
-	border: 0;
-}
-
-pre {
-	margin: 0;
-	padding: 0;
-	white-space: -moz-pre-wrap;  /* Mozilla, supported since 1999 */
-	white-space: -pre-wrap;      /* Opera 4 - 6 */
-	white-space: -o-pre-wrap;    /* Opera 7 */
-	white-space: pre-wrap;       /* CSS3 - Text module (Candidate Recommendation) http://www.w3.org/TR/css3-text/#white-space */
-	word-wrap: break-word;       /* IE 5.5+ */
-}
-
-pre.clicky {
-	cursor: hand;
-	cursor: pointer;
-}
-
-td.propPlus {
-	width: 9px;
-	background-color: #ddd;
-}
-
-td.propName {
-	background-color: #ddd;
-}
-
-td.propType {
-	background-color: #ddd;
-}
-
-td.propVal {
-	background-color: #ddd;
-}
-
-</style>
-</head>
-<body>
-
-<h2>Javascript Object Browser</h2>
-
-<div id="frame"></div>
-
-</body>
-</html>

BIN
main/inc/lib/javascript/dojo/src/debug/spacer.gif


+ 0 - 175
main/inc/lib/javascript/dojo/src/dnd/DragAndDrop.js

@@ -1,175 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.lang");
-dojo.provide("dojo.dnd.DragSource");
-dojo.provide("dojo.dnd.DropTarget");
-dojo.provide("dojo.dnd.DragObject");
-dojo.provide("dojo.dnd.DragAndDrop");
-
-dojo.dnd.DragSource = function(){
-	var dm = dojo.dnd.dragManager;
-	if(dm["registerDragSource"]){ // side-effect prevention
-		dm.registerDragSource(this);
-	}
-}
-
-dojo.lang.extend(dojo.dnd.DragSource, {
-	type: "",
-
-	onDragEnd: function(){
-	},
-
-	onDragStart: function(){
-	},
-
-	/*
-	 * This function gets called when the DOM element was 
-	 * selected for dragging by the HtmlDragAndDropManager.
-	 */
-	onSelected: function(){
-	},
-
-	unregister: function(){
-		dojo.dnd.dragManager.unregisterDragSource(this);
-	},
-
-	reregister: function(){
-		dojo.dnd.dragManager.registerDragSource(this);
-	}
-});
-
-dojo.dnd.DragObject = function(){
-	var dm = dojo.dnd.dragManager;
-	if(dm["registerDragObject"]){ // side-effect prevention
-		dm.registerDragObject(this);
-	}
-}
-
-dojo.lang.extend(dojo.dnd.DragObject, {
-	type: "",
-
-	onDragStart: function(){
-		// gets called directly after being created by the DragSource
-		// default action is to clone self as icon
-	},
-
-	onDragMove: function(){
-		// this changes the UI for the drag icon
-		//	"it moves itself"
-	},
-
-	onDragOver: function(){
-	},
-
-	onDragOut: function(){
-	},
-
-	onDragEnd: function(){
-	},
-
-	// normal aliases
-	onDragLeave: this.onDragOut,
-	onDragEnter: this.onDragOver,
-
-	// non-camel aliases
-	ondragout: this.onDragOut,
-	ondragover: this.onDragOver
-});
-
-dojo.dnd.DropTarget = function(){
-	if (this.constructor == dojo.dnd.DropTarget) { return; } // need to be subclassed
-	this.acceptedTypes = [];
-	dojo.dnd.dragManager.registerDropTarget(this);
-}
-
-dojo.lang.extend(dojo.dnd.DropTarget, {
-
-	acceptsType: function(type){
-		if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
-			if(!dojo.lang.inArray(this.acceptedTypes, type)) { return false; }
-		}
-		return true;
-	},
-
-	accepts: function(dragObjects){
-		if(!dojo.lang.inArray(this.acceptedTypes, "*")){ // wildcard
-			for (var i = 0; i < dragObjects.length; i++) {
-				if (!dojo.lang.inArray(this.acceptedTypes,
-					dragObjects[i].type)) { return false; }
-			}
-		}
-		return true;
-	},
-
-	onDragOver: function(){
-	},
-
-	onDragOut: function(){
-	},
-
-	onDragMove: function(){
-	},
-
-	onDropStart: function(){
-	},
-
-	onDrop: function(){
-	},
-
-	onDropEnd: function(){
-	}
-});
-
-// NOTE: this interface is defined here for the convenience of the DragManager
-// implementor. It is expected that in most cases it will be satisfied by
-// extending a native event (DOM event in HTML and SVG).
-dojo.dnd.DragEvent = function(){
-	this.dragSource = null;
-	this.dragObject = null;
-	this.target = null;
-	this.eventStatus = "success";
-	//
-	// can be one of:
-	//	[	"dropSuccess", "dropFailure", "dragMove",
-	//		"dragStart", "dragEnter", "dragLeave"]
-	//
-}
-
-dojo.dnd.DragManager = function(){
-	/*
-	 *	The DragManager handles listening for low-level events and dispatching
-	 *	them to higher-level primitives like drag sources and drop targets. In
-	 *	order to do this, it must keep a list of the items.
-	 */
-}
-
-dojo.lang.extend(dojo.dnd.DragManager, {
-	selectedSources: [],
-	dragObjects: [],
-	dragSources: [],
-	registerDragSource: function(){},
-	dropTargets: [],
-	registerDropTarget: function(){},
-	lastDragTarget: null,
-	currentDragTarget: null,
-	onKeyDown: function(){},
-	onMouseOut: function(){},
-	onMouseMove: function(){},
-	onMouseUp: function(){}
-});
-
-// NOTE: despite the existance of the DragManager class, there will be a
-// singleton drag manager provided by the renderer-specific D&D support code.
-// It is therefore sane for us to assign instance variables to the DragManager
-// prototype
-
-// The renderer-specific file will define the following object:
-// dojo.dnd.dragManager = null;

+ 0 - 475
main/inc/lib/javascript/dojo/src/dnd/HtmlDragAndDrop.js

@@ -1,475 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.HtmlDragAndDrop");
-dojo.provide("dojo.dnd.HtmlDragSource");
-dojo.provide("dojo.dnd.HtmlDropTarget");
-dojo.provide("dojo.dnd.HtmlDragObject");
-
-dojo.require("dojo.dnd.HtmlDragManager");
-dojo.require("dojo.dnd.DragAndDrop");
-
-dojo.require("dojo.dom");
-dojo.require("dojo.style");
-dojo.require("dojo.html");
-dojo.require("dojo.html.extras");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lfx.*");
-dojo.require("dojo.event");
-
-dojo.dnd.HtmlDragSource = function(node, type){
-	node = dojo.byId(node);
-	this.dragObjects = [];
-	this.constrainToContainer = false;
-	if(node){
-		this.domNode = node;
-		this.dragObject = node;
-		// register us
-		dojo.dnd.DragSource.call(this);
-		// set properties that might have been clobbered by the mixin
-		this.type = (type)||(this.domNode.nodeName.toLowerCase());
-	}
-}
-dojo.inherits(dojo.dnd.HtmlDragSource, dojo.dnd.DragSource);
-dojo.lang.extend(dojo.dnd.HtmlDragSource, {
-	dragClass: "", // CSS classname(s) applied to node when it is being dragged
-
-	onDragStart: function(){
-		var dragObj = new dojo.dnd.HtmlDragObject(this.dragObject, this.type);
-		if(this.dragClass) { dragObj.dragClass = this.dragClass; }
-
-		if (this.constrainToContainer) {
-			dragObj.constrainTo(this.constrainingContainer || this.domNode.parentNode);
-		}
-
-		return dragObj;
-	},
-
-	setDragHandle: function(node){
-		node = dojo.byId(node);
-		dojo.dnd.dragManager.unregisterDragSource(this);
-		this.domNode = node;
-		dojo.dnd.dragManager.registerDragSource(this);
-	},
-
-	setDragTarget: function(node){
-		this.dragObject = node;
-	},
-
-	constrainTo: function(container) {
-		this.constrainToContainer = true;
-		if (container) {
-			this.constrainingContainer = container;
-		}
-	},
-	
-	/*
-	*
-	* see dojo.dnd.DragSource.onSelected
-	*/
-	onSelected: function() {
-		for (var i=0; i<this.dragObjects.length; i++) {
-			dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragSource(this.dragObjects[i]));
-		}
-	},
-
-	/**
-	* Register elements that should be dragged along with
-	* the actual DragSource.
-	*
-	* Example usage:
-	* 	var dragSource = new dojo.dnd.HtmlDragSource(...);
-	*	// add a single element
-	*	dragSource.addDragObjects(dojo.byId('id1'));
-	*	// add multiple elements to drag along
-	*	dragSource.addDragObjects(dojo.byId('id2'), dojo.byId('id3'));
-	*
-	* el A dom node to add to the drag list.
-	*/
-	addDragObjects: function(/*DOMNode*/ el) {
-		for (var i=0; i<arguments.length; i++) {
-			this.dragObjects.push(arguments[i]);
-		}
-	}
-});
-
-dojo.dnd.HtmlDragObject = function(node, type){
-	this.domNode = dojo.byId(node);
-	this.type = type;
-	this.constrainToContainer = false;
-	this.dragSource = null;
-}
-dojo.inherits(dojo.dnd.HtmlDragObject, dojo.dnd.DragObject);
-dojo.lang.extend(dojo.dnd.HtmlDragObject, {
-	dragClass: "",
-	opacity: 0.5,
-	createIframe: true,		// workaround IE6 bug
-
-	// if true, node will not move in X and/or Y direction
-	disableX: false,
-	disableY: false,
-
-	createDragNode: function() {
-		var node = this.domNode.cloneNode(true);
-		if(this.dragClass) { dojo.html.addClass(node, this.dragClass); }
-		if(this.opacity < 1) { dojo.style.setOpacity(node, this.opacity); }
-		if(node.tagName.toLowerCase() == "tr"){
-			// dojo.debug("Dragging table row")
-			// Create a table for the cloned row
-			var doc = this.domNode.ownerDocument;
-			var table = doc.createElement("table");
-			var tbody = doc.createElement("tbody");
-			tbody.appendChild(node);
-			table.appendChild(tbody);
-
-			// Set a fixed width to the cloned TDs
-			var domTds = this.domNode.childNodes;
-			var cloneTds = node.childNodes;
-			for(var i = 0; i < domTds.length; i++){
-			    if((cloneTds[i])&&(cloneTds[i].style)){
-				    cloneTds[i].style.width = dojo.style.getContentWidth(domTds[i]) + "px";
-			    }
-			}
-			node = table;
-		}
-
-		if((dojo.render.html.ie55||dojo.render.html.ie60) && this.createIframe){
-			with(node.style) {
-				top="0px";
-				left="0px";
-			}
-			var outer = document.createElement("div");
-			outer.appendChild(node);
-			this.bgIframe = new dojo.html.BackgroundIframe(outer);
-			outer.appendChild(this.bgIframe.iframe);
-			node = outer;
-		}
-		node.style.zIndex = 999;
-		return node;
-	},
-
-	onDragStart: function(e){
-		dojo.html.clearSelection();
-
-		this.scrollOffset = dojo.html.getScrollOffset();
-		this.dragStartPosition = dojo.style.getAbsolutePosition(this.domNode, true);
-
-		this.dragOffset = {y: this.dragStartPosition.y - e.pageY,
-			x: this.dragStartPosition.x - e.pageX};
-
-		this.dragClone = this.createDragNode();
-
-		this.containingBlockPosition = this.domNode.offsetParent ? 
-			dojo.style.getAbsolutePosition(this.domNode.offsetParent) : {x:0, y:0};
-
-		if (this.constrainToContainer) {
-			this.constraints = this.getConstraints();
-		}
-
-		// set up for dragging
-		with(this.dragClone.style){
-			position = "absolute";
-			top = this.dragOffset.y + e.pageY + "px";
-			left = this.dragOffset.x + e.pageX + "px";
-		}
-
-		document.body.appendChild(this.dragClone);
-
-		dojo.event.topic.publish('dragStart', { source: this } );
-	},
-
-	/** Return min/max x/y (relative to document.body) for this object) **/
-	getConstraints: function() {
-		if (this.constrainingContainer.nodeName.toLowerCase() == 'body') {
-			var width = dojo.html.getViewportWidth();
-			var height = dojo.html.getViewportHeight();
-			var x = 0;
-			var y = 0;
-		} else {
-			width = dojo.style.getContentWidth(this.constrainingContainer);
-			height = dojo.style.getContentHeight(this.constrainingContainer);
-			x =
-				this.containingBlockPosition.x +
-				dojo.style.getPixelValue(this.constrainingContainer, "padding-left", true) +
-				dojo.style.getBorderExtent(this.constrainingContainer, "left");
-			y =
-				this.containingBlockPosition.y +
-				dojo.style.getPixelValue(this.constrainingContainer, "padding-top", true) +
-				dojo.style.getBorderExtent(this.constrainingContainer, "top");
-		}
-
-		return {
-			minX: x,
-			minY: y,
-			maxX: x + width - dojo.style.getOuterWidth(this.domNode),
-			maxY: y + height - dojo.style.getOuterHeight(this.domNode)
-		}
-	},
-
-	updateDragOffset: function() {
-		var scroll = dojo.html.getScrollOffset();
-		if(scroll.y != this.scrollOffset.y) {
-			var diff = scroll.y - this.scrollOffset.y;
-			this.dragOffset.y += diff;
-			this.scrollOffset.y = scroll.y;
-		}
-		if(scroll.x != this.scrollOffset.x) {
-			var diff = scroll.x - this.scrollOffset.x;
-			this.dragOffset.x += diff;
-			this.scrollOffset.x = scroll.x;
-		}
-	},
-
-	/** Moves the node to follow the mouse */
-	onDragMove: function(e){
-		this.updateDragOffset();
-		var x = this.dragOffset.x + e.pageX;
-		var y = this.dragOffset.y + e.pageY;
-
-		if (this.constrainToContainer) {
-			if (x < this.constraints.minX) { x = this.constraints.minX; }
-			if (y < this.constraints.minY) { y = this.constraints.minY; }
-			if (x > this.constraints.maxX) { x = this.constraints.maxX; }
-			if (y > this.constraints.maxY) { y = this.constraints.maxY; }
-		}
-
-		this.setAbsolutePosition(x, y);
-
-		dojo.event.topic.publish('dragMove', { source: this } );
-	},
-
-	/**
-	 * Set the position of the drag clone.  (x,y) is relative to <body>.
-	 */
-	setAbsolutePosition: function(x, y){
-		// The drag clone is attached to document.body so this is trivial
-		if(!this.disableY) { this.dragClone.style.top = y + "px"; }
-		if(!this.disableX) { this.dragClone.style.left = x + "px"; }
-	},
-
-
-	/**
-	 * If the drag operation returned a success we reomve the clone of
-	 * ourself from the original position. If the drag operation returned
-	 * failure we slide back over to where we came from and end the operation
-	 * with a little grace.
-	 */
-	onDragEnd: function(e){
-		switch(e.dragStatus){
-
-			case "dropSuccess":
-				dojo.dom.removeNode(this.dragClone);
-				this.dragClone = null;
-				break;
-
-			case "dropFailure": // slide back to the start
-				var startCoords = dojo.style.getAbsolutePosition(this.dragClone, true);
-				// offset the end so the effect can be seen
-				var endCoords = [this.dragStartPosition.x + 1,
-					this.dragStartPosition.y + 1];
-
-				// animate
-				var line = new dojo.lfx.Line(startCoords, endCoords);
-				var anim = new dojo.lfx.Animation(500, line, dojo.lfx.easeOut);
-				var dragObject = this;
-				dojo.event.connect(anim, "onAnimate", function(e) {
-					dragObject.dragClone.style.left = e[0] + "px";
-					dragObject.dragClone.style.top = e[1] + "px";
-				});
-				dojo.event.connect(anim, "onEnd", function (e) {
-					// pause for a second (not literally) and disappear
-					dojo.lang.setTimeout(function() {
-							dojo.dom.removeNode(dragObject.dragClone);
-							// Allow drag clone to be gc'ed
-							dragObject.dragClone = null;
-						},
-						200);
-				});
-				anim.play();
-				break;
-		}
-
-		// shortly the browser will fire an onClick() event,
-		// but since this was really a drag, just squelch it
-		dojo.event.connect(this.domNode, "onclick", this, "squelchOnClick");
-
-		dojo.event.topic.publish('dragEnd', { source: this } );
-	},
-
-	squelchOnClick: function(e){
-		// squelch this onClick() event because it's the result of a drag (it's not a real click)
-		e.preventDefault();
-
-		// but if a real click comes along, allow it
-		dojo.event.disconnect(this.domNode, "onclick", this, "squelchOnClick");
-	},
-
-	constrainTo: function(container) {
-		this.constrainToContainer=true;
-		if (container) {
-			this.constrainingContainer = container;
-		} else {
-			this.constrainingContainer = this.domNode.parentNode;
-		}
-	}
-});
-
-dojo.dnd.HtmlDropTarget = function(node, types){
-	if (arguments.length == 0) { return; }
-	this.domNode = dojo.byId(node);
-	dojo.dnd.DropTarget.call(this);
-	if(types && dojo.lang.isString(types)) {
-		types = [types];
-	}
-	this.acceptedTypes = types || [];
-}
-dojo.inherits(dojo.dnd.HtmlDropTarget, dojo.dnd.DropTarget);
-
-dojo.lang.extend(dojo.dnd.HtmlDropTarget, {
-	onDragOver: function(e){
-		if(!this.accepts(e.dragObjects)){ return false; }
-
-		// cache the positions of the child nodes
-		this.childBoxes = [];
-		for (var i = 0, child; i < this.domNode.childNodes.length; i++) {
-			child = this.domNode.childNodes[i];
-			if (child.nodeType != dojo.dom.ELEMENT_NODE) { continue; }
-			var pos = dojo.style.getAbsolutePosition(child, true);
-			var height = dojo.style.getInnerHeight(child);
-			var width = dojo.style.getInnerWidth(child);
-			this.childBoxes.push({top: pos.y, bottom: pos.y+height,
-				left: pos.x, right: pos.x+width, node: child});
-		}
-
-		// TODO: use dummy node
-
-		return true;
-	},
-
-	_getNodeUnderMouse: function(e){
-		// find the child
-		for (var i = 0, child; i < this.childBoxes.length; i++) {
-			with (this.childBoxes[i]) {
-				if (e.pageX >= left && e.pageX <= right &&
-					e.pageY >= top && e.pageY <= bottom) { return i; }
-			}
-		}
-
-		return -1;
-	},
-
-	createDropIndicator: function() {
-		this.dropIndicator = document.createElement("div");
-		with (this.dropIndicator.style) {
-			position = "absolute";
-			zIndex = 999;
-			borderTopWidth = "1px";
-			borderTopColor = "black";
-			borderTopStyle = "solid";
-			width = dojo.style.getInnerWidth(this.domNode) + "px";
-			left = dojo.style.getAbsoluteX(this.domNode, true) + "px";
-		}
-	},
-
-	onDragMove: function(e, dragObjects){
-		var i = this._getNodeUnderMouse(e);
-
-		if(!this.dropIndicator){
-			this.createDropIndicator();
-		}
-
-		if(i < 0) {
-			if(this.childBoxes.length) {
-				var before = (dojo.html.gravity(this.childBoxes[0].node, e) & dojo.html.gravity.NORTH);
-			} else {
-				var before = true;
-			}
-		} else {
-			var child = this.childBoxes[i];
-			var before = (dojo.html.gravity(child.node, e) & dojo.html.gravity.NORTH);
-		}
-		this.placeIndicator(e, dragObjects, i, before);
-
-		if(!dojo.html.hasParent(this.dropIndicator)) {
-			document.body.appendChild(this.dropIndicator);
-		}
-	},
-
-	/**
-	 * Position the horizontal line that indicates "insert between these two items"
-	 */
-	placeIndicator: function(e, dragObjects, boxIndex, before) {
-		with(this.dropIndicator.style){
-			if (boxIndex < 0) {
-				if (this.childBoxes.length) {
-					top = (before ? this.childBoxes[0].top
-						: this.childBoxes[this.childBoxes.length - 1].bottom) + "px";
-				} else {
-					top = dojo.style.getAbsoluteY(this.domNode, true) + "px";
-				}
-			} else {
-				var child = this.childBoxes[boxIndex];
-				top = (before ? child.top : child.bottom) + "px";
-			}
-		}
-	},
-
-	onDragOut: function(e) {
-		if(this.dropIndicator) {
-			dojo.dom.removeNode(this.dropIndicator);
-			delete this.dropIndicator;
-		}
-	},
-
-	/**
-	 * Inserts the DragObject as a child of this node relative to the
-	 * position of the mouse.
-	 *
-	 * @return true if the DragObject was inserted, false otherwise
-	 */
-	onDrop: function(e){
-		this.onDragOut(e);
-
-		var i = this._getNodeUnderMouse(e);
-
-		if (i < 0) {
-			if (this.childBoxes.length) {
-				if (dojo.html.gravity(this.childBoxes[0].node, e) & dojo.html.gravity.NORTH) {
-					return this.insert(e, this.childBoxes[0].node, "before");
-				} else {
-					return this.insert(e, this.childBoxes[this.childBoxes.length-1].node, "after");
-				}
-			}
-			return this.insert(e, this.domNode, "append");
-		}
-
-		var child = this.childBoxes[i];
-		if (dojo.html.gravity(child.node, e) & dojo.html.gravity.NORTH) {
-			return this.insert(e, child.node, "before");
-		} else {
-			return this.insert(e, child.node, "after");
-		}
-	},
-
-	insert: function(e, refNode, position) {
-		var node = e.dragObject.domNode;
-
-		if(position == "before") {
-			return dojo.html.insertBefore(node, refNode);
-		} else if(position == "after") {
-			return dojo.html.insertAfter(node, refNode);
-		} else if(position == "append") {
-			refNode.appendChild(node);
-			return true;
-		}
-
-		return false;
-	}
-});

+ 0 - 475
main/inc/lib/javascript/dojo/src/dnd/HtmlDragManager.js

@@ -1,475 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.HtmlDragManager");
-dojo.require("dojo.dnd.DragAndDrop");
-dojo.require("dojo.event.*");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.html");
-dojo.require("dojo.style");
-
-// NOTE: there will only ever be a single instance of HTMLDragManager, so it's
-// safe to use prototype properties for book-keeping.
-dojo.dnd.HtmlDragManager = function(){
-}
-
-dojo.inherits(dojo.dnd.HtmlDragManager, dojo.dnd.DragManager);
-
-dojo.lang.extend(dojo.dnd.HtmlDragManager, {
-	/**
-	 * There are several sets of actions that the DnD code cares about in the
-	 * HTML context:
-	 *	1.) mouse-down ->
-	 *			(draggable selection)
-	 *			(dragObject generation)
-	 *		mouse-move ->
-	 *			(draggable movement)
-	 *			(droppable detection)
-	 *			(inform droppable)
-	 *			(inform dragObject)
-	 *		mouse-up
-	 *			(inform/destroy dragObject)
-	 *			(inform draggable)
-	 *			(inform droppable)
-	 *	2.) mouse-down -> mouse-down
-	 *			(click-hold context menu)
-	 *	3.) mouse-click ->
-	 *			(draggable selection)
-	 *		shift-mouse-click ->
-	 *			(augment draggable selection)
-	 *		mouse-down ->
-	 *			(dragObject generation)
-	 *		mouse-move ->
-	 *			(draggable movement)
-	 *			(droppable detection)
-	 *			(inform droppable)
-	 *			(inform dragObject)
-	 *		mouse-up
-	 *			(inform draggable)
-	 *			(inform droppable)
-	 *	4.) mouse-up
-	 *			(clobber draggable selection)
-	 */
-	disabled: false, // to kill all dragging!
-	nestedTargets: false,
-	mouseDownTimer: null, // used for click-hold operations
-	dsCounter: 0,
-	dsPrefix: "dojoDragSource",
-
-	// dimension calculation cache for use durring drag
-	dropTargetDimensions: [],
-
-	currentDropTarget: null,
-	// currentDropTargetPoints: null,
-	previousDropTarget: null,
-	_dragTriggered: false,
-
-	selectedSources: [],
-	dragObjects: [],
-
-	// mouse position properties
-	currentX: null,
-	currentY: null,
-	lastX: null,
-	lastY: null,
-	mouseDownX: null,
-	mouseDownY: null,
-	threshold: 7,
-
-	dropAcceptable: false,
-
-	cancelEvent: function(e){ e.stopPropagation(); e.preventDefault();},
-
-	// method over-rides
-	registerDragSource: function(ds){
-		if(ds["domNode"]){
-			// FIXME: dragSource objects SHOULD have some sort of property that
-			// references their DOM node, we shouldn't just be passing nodes and
-			// expecting it to work.
-			var dp = this.dsPrefix;
-			var dpIdx = dp+"Idx_"+(this.dsCounter++);
-			ds.dragSourceId = dpIdx;
-			this.dragSources[dpIdx] = ds;
-			ds.domNode.setAttribute(dp, dpIdx);
-
-			// so we can drag links
-			if(dojo.render.html.ie){
-				dojo.event.connect(ds.domNode, "ondragstart", this.cancelEvent);
-			}
-		}
-	},
-
-	unregisterDragSource: function(ds){
-		if (ds["domNode"]){
-
-			var dp = this.dsPrefix;
-			var dpIdx = ds.dragSourceId;
-			delete ds.dragSourceId;
-			delete this.dragSources[dpIdx];
-			ds.domNode.setAttribute(dp, null);
-		}
-		if(dojo.render.html.ie){
-			dojo.event.disconnect(ds.domNode, "ondragstart", this.cancelEvent );
-		}
-	},
-
-	registerDropTarget: function(dt){
-		this.dropTargets.push(dt);
-	},
-
-	unregisterDropTarget: function(dt){
-		var index = dojo.lang.find(this.dropTargets, dt, true);
-		if (index>=0) {
-			this.dropTargets.splice(index, 1);
-		}
-	},
-
-	/**
-	* Get the DOM element that is meant to drag.
-	* Loop through the parent nodes of the event target until
-	* the element is found that was created as a DragSource and 
-	* return it.
-	*
-	* @param event object The event for which to get the drag source.
-	*/
-	getDragSource: function(e){
-		var tn = e.target;
-		if(tn === document.body){ return; }
-		var ta = dojo.html.getAttribute(tn, this.dsPrefix);
-		while((!ta)&&(tn)){
-			tn = tn.parentNode;
-			if((!tn)||(tn === document.body)){ return; }
-			ta = dojo.html.getAttribute(tn, this.dsPrefix);
-		}
-		return this.dragSources[ta];
-	},
-
-	onKeyDown: function(e){
-	},
-
-	onMouseDown: function(e){
-		if(this.disabled) { return; }
-
-		// only begin on left click
-		if(dojo.render.html.ie) {
-			if(e.button != 1) { return; }
-		} else if(e.which != 1) {
-			return;
-		}
-
-		var target = e.target.nodeType == dojo.dom.TEXT_NODE ?
-			e.target.parentNode : e.target;
-
-		// do not start drag involvement if the user is interacting with
-		// a form element.
-		if(dojo.html.isTag(target, "button", "textarea", "input", "select", "option")) {
-			return;
-		}
-
-		// find a selection object, if one is a parent of the source node
-		var ds = this.getDragSource(e);
-		
-		// this line is important.  if we aren't selecting anything then
-		// we need to return now, so preventDefault() isn't called, and thus
-		// the event is propogated to other handling code
-		if(!ds){ return; }
-
-		if(!dojo.lang.inArray(this.selectedSources, ds)){
-			this.selectedSources.push(ds);
-			ds.onSelected();
-		}
-
- 		this.mouseDownX = e.pageX;
- 		this.mouseDownY = e.pageY;
-
-		// Must stop the mouse down from being propogated, or otherwise can't
-		// drag links in firefox.
-		// WARNING: preventing the default action on all mousedown events
-		// prevents user interaction with the contents.
-		e.preventDefault();
-
-		dojo.event.connect(document, "onmousemove", this, "onMouseMove");
-	},
-
-	onMouseUp: function(e, cancel){
-		// if we aren't dragging then ignore the mouse-up
-		// (in particular, don't call preventDefault(), because other
-		// code may need to process this event)
-		if(this.selectedSources.length==0){
-			return;
-		}
-
-		this.mouseDownX = null;
-		this.mouseDownY = null;
-		this._dragTriggered = false;
- 		// e.preventDefault();
-		e.dragSource = this.dragSource;
-		if((!e.shiftKey)&&(!e.ctrlKey)){
-			if(this.currentDropTarget) {
-				this.currentDropTarget.onDropStart();
-			}
-			dojo.lang.forEach(this.dragObjects, function(tempDragObj){
-				var ret = null;
-				if(!tempDragObj){ return; }
-				if(this.currentDropTarget) {
-					e.dragObject = tempDragObj;
-
-					// NOTE: we can't get anything but the current drop target
-					// here since the drag shadow blocks mouse-over events.
-					// This is probelematic for dropping "in" something
-					var ce = this.currentDropTarget.domNode.childNodes;
-					if(ce.length > 0){
-						e.dropTarget = ce[0];
-						while(e.dropTarget == tempDragObj.domNode){
-							e.dropTarget = e.dropTarget.nextSibling;
-						}
-					}else{
-						e.dropTarget = this.currentDropTarget.domNode;
-					}
-					if(this.dropAcceptable){
-						ret = this.currentDropTarget.onDrop(e);
-					}else{
-						 this.currentDropTarget.onDragOut(e);
-					}
-				}
-
-				e.dragStatus = this.dropAcceptable && ret ? "dropSuccess" : "dropFailure";
-				// decouple the calls for onDragEnd, so they don't block the execution here
-				// ie. if the onDragEnd would call an alert, the execution here is blocked until the
-				// user has confirmed the alert box and then the rest of the dnd code is executed
-				// while the mouse doesnt "hold" the dragged object anymore ... and so on
-				dojo.lang.delayThese([
-					function() {
-						// in FF1.5 this throws an exception, see 
-						// http://dojotoolkit.org/pipermail/dojo-interest/2006-April/006751.html
-						try{
-							tempDragObj.dragSource.onDragEnd(e)
-						} catch(err) {
-							// since the problem seems passing e, we just copy all 
-							// properties and try the copy ...
-							var ecopy = {};
-							for (var i in e) {
-								if (i=="type") { // the type property contains the exception, no idea why...
-									ecopy.type = "mouseup";
-									continue;
-								}
-								ecopy[i] = e[i];
-							}
-							tempDragObj.dragSource.onDragEnd(ecopy);
-						}
-					}
-					, function() {tempDragObj.onDragEnd(e)}]);
-			}, this);
-
-			this.selectedSources = [];
-			this.dragObjects = [];
-			this.dragSource = null;
-			if(this.currentDropTarget) {
-				this.currentDropTarget.onDropEnd();
-			}
-		}
-
-		dojo.event.disconnect(document, "onmousemove", this, "onMouseMove");
-		this.currentDropTarget = null;
-	},
-
-	onScroll: function(){
-		for(var i = 0; i < this.dragObjects.length; i++) {
-			if(this.dragObjects[i].updateDragOffset) {
-				this.dragObjects[i].updateDragOffset();
-			}
-		}
-		// TODO: do not recalculate, only adjust coordinates
-		this.cacheTargetLocations();
-	},
-
-	_dragStartDistance: function(x, y){
-		if((!this.mouseDownX)||(!this.mouseDownX)){
-			return;
-		}
-		var dx = Math.abs(x-this.mouseDownX);
-		var dx2 = dx*dx;
-		var dy = Math.abs(y-this.mouseDownY);
-		var dy2 = dy*dy;
-		return parseInt(Math.sqrt(dx2+dy2), 10);
-	},
-
-	cacheTargetLocations: function(){
-		this.dropTargetDimensions = [];
-		dojo.lang.forEach(this.dropTargets, function(tempTarget){
-			var tn = tempTarget.domNode;
-			if(!tn){ return; }
-			var ttx = dojo.style.getAbsoluteX(tn, true);
-			var tty = dojo.style.getAbsoluteY(tn, true);
-			this.dropTargetDimensions.push([
-				[ttx, tty],	// upper-left
-				// lower-right
-				[ ttx+dojo.style.getInnerWidth(tn), tty+dojo.style.getInnerHeight(tn) ],
-				tempTarget
-			]);
-			//dojo.debug("Cached for "+tempTarget)
-		}, this);
-		//dojo.debug("Cache locations")
-	},
-
-	onMouseMove: function(e){
-		if((dojo.render.html.ie)&&(e.button != 1)){
-			// Oooops - mouse up occurred - e.g. when mouse was not over the
-			// window. I don't think we can detect this for FF - but at least
-			// we can be nice in IE.
-			this.currentDropTarget = null;
-			this.onMouseUp(e, true);
-			return;
-		}
-
-		// if we've got some sources, but no drag objects, we need to send
-		// onDragStart to all the right parties and get things lined up for
-		// drop target detection
-
-		if(	(this.selectedSources.length)&&
-			(!this.dragObjects.length) ){
-			var dx;
-			var dy;
-			if(!this._dragTriggered){
-				this._dragTriggered = (this._dragStartDistance(e.pageX, e.pageY) > this.threshold);
-				if(!this._dragTriggered){ return; }
-				dx = e.pageX - this.mouseDownX;
-				dy = e.pageY - this.mouseDownY;
-			}
-
-			// the first element is always our dragSource, if there are multiple
-			// selectedSources (elements that move along) then the first one is the master
-			// and for it the events will be fired etc.
-			this.dragSource = this.selectedSources[0];
-			
-			dojo.lang.forEach(this.selectedSources, function(tempSource){
-				if(!tempSource){ return; }
-				var tdo = tempSource.onDragStart(e);
-				if(tdo){
-					tdo.onDragStart(e);
-
-					// "bump" the drag object to account for the drag threshold
-					tdo.dragOffset.top += dy;
-					tdo.dragOffset.left += dx;
-					tdo.dragSource = tempSource;
-
-					this.dragObjects.push(tdo);
-				}
-			}, this);
-
-			/* clean previous drop target in dragStart */
-			this.previousDropTarget = null;
-
-			this.cacheTargetLocations();
-		}
-
-		// FIXME: we need to add dragSources and dragObjects to e
-		dojo.lang.forEach(this.dragObjects, function(dragObj){
-			if(dragObj){ dragObj.onDragMove(e); }
-		});
-
-		// if we have a current drop target, check to see if we're outside of
-		// it. If so, do all the actions that need doing.
-		if(this.currentDropTarget){
-			//dojo.debug(dojo.dom.hasParent(this.currentDropTarget.domNode))
-			var c = dojo.style.toCoordinateArray(this.currentDropTarget.domNode, true);
-			//		var dtp = this.currentDropTargetPoints;
-			var dtp = [
-				[c[0],c[1]], [c[0]+c[2], c[1]+c[3]]
-			];
-		}
-
-		if((!this.nestedTargets)&&(dtp)&&(this.isInsideBox(e, dtp))){
-			if(this.dropAcceptable){
-				this.currentDropTarget.onDragMove(e, this.dragObjects);
-			}
-		}else{
-			// FIXME: need to fix the event object!
-			// see if we can find a better drop target
-			var bestBox = this.findBestTarget(e);
-
-			if(bestBox.target === null){
-				if(this.currentDropTarget){
-					this.currentDropTarget.onDragOut(e);
-					this.previousDropTarget = this.currentDropTarget;
-					this.currentDropTarget = null;
-					// this.currentDropTargetPoints = null;
-				}
-				this.dropAcceptable = false;
-				return;
-			}
-
-			if(this.currentDropTarget !== bestBox.target){
-				if(this.currentDropTarget){
-					this.previousDropTarget = this.currentDropTarget;
-					this.currentDropTarget.onDragOut(e);
-				}
-				this.currentDropTarget = bestBox.target;
-				// this.currentDropTargetPoints = bestBox.points;
-				e.dragObjects = this.dragObjects;
-				this.dropAcceptable = this.currentDropTarget.onDragOver(e);
-
-			}else{
-				if(this.dropAcceptable){
-					this.currentDropTarget.onDragMove(e, this.dragObjects);
-				}
-			}
-		}
-	},
-
-	findBestTarget: function(e) {
-		var _this = this;
-		var bestBox = new Object();
-		bestBox.target = null;
-		bestBox.points = null;
-		dojo.lang.every(this.dropTargetDimensions, function(tmpDA) {
-			if(!_this.isInsideBox(e, tmpDA))
-				return true;
-			bestBox.target = tmpDA[2];
-			bestBox.points = tmpDA;
-			// continue iterating only if _this.nestedTargets == true
-			return Boolean(_this.nestedTargets);
-		});
-
-		return bestBox;
-	},
-
-	isInsideBox: function(e, coords){
-		if(	(e.pageX > coords[0][0])&&
-			(e.pageX < coords[1][0])&&
-			(e.pageY > coords[0][1])&&
-			(e.pageY < coords[1][1]) ){
-			return true;
-		}
-		return false;
-	},
-
-	onMouseOver: function(e){
-	},
-
-	onMouseOut: function(e){
-	}
-});
-
-dojo.dnd.dragManager = new dojo.dnd.HtmlDragManager();
-
-// global namespace protection closure
-(function(){
-	var d = document;
-	var dm = dojo.dnd.dragManager;
-	// set up event handlers on the document
-	dojo.event.connect(d, "onkeydown", 		dm, "onKeyDown");
-	dojo.event.connect(d, "onmouseover",	dm, "onMouseOver");
-	dojo.event.connect(d, "onmouseout", 	dm, "onMouseOut");
-	dojo.event.connect(d, "onmousedown",	dm, "onMouseDown");
-	dojo.event.connect(d, "onmouseup",		dm, "onMouseUp");
-	// TODO: process scrolling of elements, not only window
-	dojo.event.connect(window, "onscroll",	dm, "onScroll");
-})();

+ 0 - 76
main/inc/lib/javascript/dojo/src/dnd/HtmlDragMove.js

@@ -1,76 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.HtmlDragMove");
-dojo.provide("dojo.dnd.HtmlDragMoveSource");
-dojo.provide("dojo.dnd.HtmlDragMoveObject");
-dojo.require("dojo.dnd.*");
-
-dojo.dnd.HtmlDragMoveSource = function(node, type){
-	dojo.dnd.HtmlDragSource.call(this, node, type);
-}
-dojo.inherits(dojo.dnd.HtmlDragMoveSource, dojo.dnd.HtmlDragSource);
-dojo.lang.extend(dojo.dnd.HtmlDragMoveSource, {
-	onDragStart: function(){
-		var dragObj =  new dojo.dnd.HtmlDragMoveObject(this.dragObject, this.type);
-		if (this.constrainToContainer) {
-			dragObj.constrainTo(this.constrainingContainer);
-		}
-		return dragObj;
-	},
-	/*
-	 * see dojo.dnd.HtmlDragSource.onSelected
-	 */
-	onSelected: function() {
-		for (var i=0; i<this.dragObjects.length; i++) {
-			dojo.dnd.dragManager.selectedSources.push(new dojo.dnd.HtmlDragMoveSource(this.dragObjects[i]));
-		}
-	}
-});
-
-dojo.dnd.HtmlDragMoveObject = function(node, type){
-	dojo.dnd.HtmlDragObject.call(this, node, type);
-}
-dojo.inherits(dojo.dnd.HtmlDragMoveObject, dojo.dnd.HtmlDragObject);
-dojo.lang.extend(dojo.dnd.HtmlDragMoveObject, {
-	onDragEnd: function(e){
-		// shortly the browser will fire an onClick() event,
-		// but since this was really a drag, just squelch it
-		dojo.event.connect(this.domNode, "onclick", this, "squelchOnClick");
-	},
-	onDragStart: function(e){
-		dojo.html.clearSelection();
-
-		this.dragClone = this.domNode;
-
-		this.scrollOffset = dojo.html.getScrollOffset();
-		this.dragStartPosition = dojo.style.getAbsolutePosition(this.domNode, true);
-		
-		this.dragOffset = {y: this.dragStartPosition.y - e.pageY,
-			x: this.dragStartPosition.x - e.pageX};
-
-		this.containingBlockPosition = this.domNode.offsetParent ? 
-			dojo.style.getAbsolutePosition(this.domNode.offsetParent, true) : {x:0, y:0};
-
-		this.dragClone.style.position = "absolute";
-
-		if (this.constrainToContainer) {
-			this.constraints = this.getConstraints();
-		}
-	},
-	/**
-	 * Set the position of the drag node.  (x,y) is relative to <body>.
-	 */
-	setAbsolutePosition: function(x, y){
-		// The drag clone is attached to it's constraining container so offset for that
-		if(!this.disableY) { this.domNode.style.top = (y-this.containingBlockPosition.y) + "px"; }
-		if(!this.disableX) { this.domNode.style.left = (x-this.containingBlockPosition.x) + "px"; }
-	}
-});

+ 0 - 28
main/inc/lib/javascript/dojo/src/dnd/Sortable.js

@@ -1,28 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dnd.Sortable");
-dojo.require("dojo.dnd.*");
-
-dojo.dnd.Sortable = function () {}
-
-dojo.lang.extend(dojo.dnd.Sortable, {
-
-	ondragstart: function (e) {
-		var dragObject = e.target;
-		while (dragObject.parentNode && dragObject.parentNode != this) {
-			dragObject = dragObject.parentNode;
-		}
-		// TODO: should apply HtmlDropTarget interface to self
-		// TODO: should apply HtmlDragObject interface?
-		return dragObject;
-	}
-
-});

+ 0 - 473
main/inc/lib/javascript/dojo/src/dnd/TreeDragAndDrop.js

@@ -1,473 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
- * TreeDrag* specialized on managing subtree drags
- * It selects nodes and visualises what's going on,
- * but delegates real actions upon tree to the controller
- *
- * This code is considered a part of controller
-*/
-
-dojo.provide("dojo.dnd.TreeDragAndDrop");
-dojo.provide("dojo.dnd.TreeDragSource");
-dojo.provide("dojo.dnd.TreeDropTarget");
-dojo.provide("dojo.dnd.TreeDNDController");
-
-dojo.require("dojo.dnd.HtmlDragAndDrop");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-
-dojo.dnd.TreeDragSource = function(node, syncController, type, treeNode){
-	this.controller = syncController;
-	this.treeNode = treeNode;
-
-	dojo.dnd.HtmlDragSource.call(this, node, type);
-}
-
-dojo.inherits(dojo.dnd.TreeDragSource, dojo.dnd.HtmlDragSource);
-
-dojo.lang.extend(dojo.dnd.TreeDragSource, {
-	onDragStart: function(){
-		/* extend adds functions to prototype */
-		var dragObject = dojo.dnd.HtmlDragSource.prototype.onDragStart.call(this);
-		//dojo.debugShallow(dragObject)
-
-		dragObject.treeNode = this.treeNode;
-
-		dragObject.onDragStart = dojo.lang.hitch(dragObject, function(e) {
-
-			/* save selection */
-			this.savedSelectedNode = this.treeNode.tree.selector.selectedNode;
-			if (this.savedSelectedNode) {
-				this.savedSelectedNode.unMarkSelected();
-			}
-
-			var result = dojo.dnd.HtmlDragObject.prototype.onDragStart.apply(this, arguments);
-
-
-			/* remove background grid from cloned object */
-			var cloneGrid = this.dragClone.getElementsByTagName('img');
-			for(var i=0; i<cloneGrid.length; i++) {
-				cloneGrid.item(i).style.backgroundImage='url()';
-			}
-
-			return result;
-
-
-		});
-
-		dragObject.onDragEnd = function(e) {
-
-			/* restore selection */
-			if (this.savedSelectedNode) {
-				this.savedSelectedNode.markSelected();
-			}
-			//dojo.debug(e.dragStatus);
-
-			return dojo.dnd.HtmlDragObject.prototype.onDragEnd.apply(this, arguments);
-		}
-		//dojo.debug(dragObject.domNode.outerHTML)
-
-
-		return dragObject;
-	},
-
-	onDragEnd: function(e){
-
-
-		 var res = dojo.dnd.HtmlDragSource.prototype.onDragEnd.call(this, e);
-
-
-		 return res;
-	}
-});
-
-// .......................................
-
-dojo.dnd.TreeDropTarget = function(domNode, controller, type, treeNode, DNDMode){
-
-	this.treeNode = treeNode;
-	this.controller = controller; // I will sync-ly process drops
-	this.DNDMode = DNDMode;
-
-	dojo.dnd.HtmlDropTarget.apply(this, [domNode, type]);
-}
-
-dojo.inherits(dojo.dnd.TreeDropTarget, dojo.dnd.HtmlDropTarget);
-
-dojo.lang.extend(dojo.dnd.TreeDropTarget, {
-
-	autoExpandDelay: 1500,
-	autoExpandTimer: null,
-
-
-	position: null,
-
-	indicatorStyle: "2px black solid",
-
-	showIndicator: function(position) {
-
-		// do not change style too often, cause of blinking possible
-		if (this.position == position) {
-			return;
-		}
-
-		//dojo.debug(position)
-
-		this.hideIndicator();
-
-		this.position = position;
-
-		if (position == "before") {
-			this.treeNode.labelNode.style.borderTop = this.indicatorStyle;
-		} else if (position == "after") {
-			this.treeNode.labelNode.style.borderBottom = this.indicatorStyle;
-		} else if (position == "onto") {
-			this.treeNode.markSelected();
-		}
-
-
-	},
-
-	hideIndicator: function() {
-		this.treeNode.labelNode.style.borderBottom="";
-		this.treeNode.labelNode.style.borderTop="";
-		this.treeNode.unMarkSelected();
-		this.position = null;
-	},
-
-
-
-	// is the target possibly ok ?
-	// This function is run on dragOver, but drop possibility is also determined by position over node
-	// that's why acceptsWithPosition is called
-	// doesnt take index into account ( can change while moving mouse w/o changing target )
-
-
-	/**
-	 * Coarse (tree-level) access check.
-	 * We can't determine real accepts status w/o position
-	*/
-	onDragOver: function(e){
-//dojo.debug("onDragOver for "+e);
-
-
-		var accepts = dojo.dnd.HtmlDropTarget.prototype.onDragOver.apply(this, arguments);
-
-		//dojo.debug("TreeDropTarget.onDragOver accepts:"+accepts)
-
-		if (accepts && this.treeNode.isFolder && !this.treeNode.isExpanded) {
-			this.setAutoExpandTimer();
-		}
-
-		return accepts;
-	},
-
-	/* Parent.onDragOver calls this function to get accepts status */
-	accepts: function(dragObjects) {
-
-		var accepts = dojo.dnd.HtmlDropTarget.prototype.accepts.apply(this, arguments);
-
-		if (!accepts) return false;
-
-		var sourceTreeNode = dragObjects[0].treeNode;
-
-		if (dojo.lang.isUndefined(sourceTreeNode) || !sourceTreeNode || !sourceTreeNode.isTreeNode) {
-			dojo.raise("Source is not TreeNode or not found");
-		}
-
-		if (sourceTreeNode === this.treeNode) return false;
-
-		return true;
-	},
-
-
-
-	setAutoExpandTimer: function() {
-		// set up autoexpand timer
-		var _this = this;
-
-		var autoExpand = function () {
-			if (dojo.dnd.dragManager.currentDropTarget === _this) {
-				_this.controller.expand(_this.treeNode);
-			}
-		}
-
-		this.autoExpandTimer = dojo.lang.setTimeout(autoExpand, _this.autoExpandDelay);
-	},
-
-
-	getAcceptPosition: function(e, sourceTreeNode) {
-
-		var DNDMode = this.DNDMode;
-
-		if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO &&
-			// check if ONTO is allowed localy
-			!(
-			  !this.treeNode.actionIsDisabled(dojo.widget.TreeNode.prototype.actions.ADDCHILD) // check dynamically cause may change w/o regeneration of dropTarget
-			  && sourceTreeNode.parent !== this.treeNode
-			  && this.controller.canMove(sourceTreeNode, this.treeNode)
-			 )
-		) {
-			// disable ONTO if can't move
-			DNDMode &= ~dojo.widget.Tree.prototype.DNDModes.ONTO;
-		}
-
-
-		var position = this.getPosition(e, DNDMode);
-
-		//dojo.debug(DNDMode & +" : "+position);
-
-
-		// if onto is here => it was allowed before, no accept check is needed
-		if (position=="onto" ||
-			(!this.isAdjacentNode(sourceTreeNode, position)
-			 && this.controller.canMove(sourceTreeNode, this.treeNode.parent)
-			)
-		) {
-			return position;
-		} else {
-			return false;
-		}
-
-	},
-
-	onDragOut: function(e) {
-		this.clearAutoExpandTimer();
-
-		this.hideIndicator();
-	},
-
-
-	clearAutoExpandTimer: function() {
-		if (this.autoExpandTimer) {
-			clearTimeout(this.autoExpandTimer);
-			this.autoExpandTimer = null;
-		}
-	},
-
-
-
-	onDragMove: function(e, dragObjects){
-
-		var sourceTreeNode = dragObjects[0].treeNode;
-
-		var position = this.getAcceptPosition(e, sourceTreeNode);
-
-		if (position) {
-			this.showIndicator(position);
-		}
-
-	},
-
-	isAdjacentNode: function(sourceNode, position) {
-
-		if (sourceNode === this.treeNode) return true;
-		if (sourceNode.getNextSibling() === this.treeNode && position=="before") return true;
-		if (sourceNode.getPreviousSibling() === this.treeNode && position=="after") return true;
-
-		return false;
-	},
-
-
-	/* get DNDMode and see which position e fits */
-	getPosition: function(e, DNDMode) {
-		node = dojo.byId(this.treeNode.labelNode);
-		var mousey = e.pageY || e.clientY + document.body.scrollTop;
-		var nodey = dojo.html.getAbsoluteY(node);
-		var height = dojo.html.getInnerHeight(node);
-
-		var relY = mousey - nodey;
-		var p = relY / height;
-
-		var position = ""; // "" <=> forbidden
-		if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO
-		  && DNDMode & dojo.widget.Tree.prototype.DNDModes.BETWEEN) {
-			if (p<=0.3) {
-				position = "before";
-			} else if (p<=0.7) {
-				position = "onto";
-			} else {
-				position = "after";
-			}
-		} else if (DNDMode & dojo.widget.Tree.prototype.DNDModes.BETWEEN) {
-			if (p<=0.5) {
-				position = "before";
-			} else {
-				position = "after";
-			}
-		}
-		else if (DNDMode & dojo.widget.Tree.prototype.DNDModes.ONTO) {
-			position = "onto";
-		}
-
-
-		return position;
-	},
-
-
-
-	getTargetParentIndex: function(sourceTreeNode, position) {
-
-		var index = position == "before" ? this.treeNode.getParentIndex() : this.treeNode.getParentIndex()+1;
-		if (this.treeNode.parent === sourceTreeNode.parent
-		  && this.treeNode.getParentIndex() > sourceTreeNode.getParentIndex()) {
-		  	index--;  // dragging a node is different for simple move bacause of before-after issues
-		}
-
-		return index;
-	},
-
-
-	onDrop: function(e){
-		// onDragOut will clean position
-
-
-		var position = this.position;
-
-//dojo.debug(position);
-
-		this.onDragOut(e);
-
-		var sourceTreeNode = e.dragObject.treeNode;
-
-		if (!dojo.lang.isObject(sourceTreeNode)) {
-			dojo.raise("TreeNode not found in dragObject")
-		}
-
-		if (position == "onto") {
-			return this.controller.move(sourceTreeNode, this.treeNode, 0);
-		} else {
-			var index = this.getTargetParentIndex(sourceTreeNode, position);
-			return this.controller.move(sourceTreeNode, this.treeNode.parent, index);
-		}
-
-		//dojo.debug('drop2');
-
-
-
-	}
-
-
-});
-
-
-
-dojo.dnd.TreeDNDController = function(treeController) {
-
-	// I use this controller to perform actions
-	this.treeController = treeController;
-
-	this.dragSources = {};
-
-	this.dropTargets = {};
-
-}
-
-dojo.lang.extend(dojo.dnd.TreeDNDController, {
-
-
-	listenTree: function(tree) {
-		//dojo.debug("Listen tree "+tree);
-		dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.subscribe(tree.eventNames.moveTo, this, "onMoveTo");
-		dojo.event.topic.subscribe(tree.eventNames.addChild, this, "onAddChild");
-		dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-	},
-
-
-	unlistenTree: function(tree) {
-		//dojo.debug("Listen tree "+tree);
-		dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");
-		dojo.event.topic.unsubscribe(tree.eventNames.moveTo, this, "onMoveTo");
-		dojo.event.topic.unsubscribe(tree.eventNames.addChild, this, "onAddChild");
-		dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");
-		dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");
-	},
-
-	onTreeDestroy: function(message) {
-		this.unlistenTree(message.source);
-		// I'm not widget so don't use destroy() call and dieWithTree
-	},
-
-	onCreateDOMNode: function(message) {
-		this.registerDNDNode(message.source);
-	},
-
-	onAddChild: function(message) {
-		this.registerDNDNode(message.child);
-	},
-
-	onMoveFrom: function(message) {
-		var _this = this;
-		dojo.lang.forEach(
-			message.child.getDescendants(),
-			function(node) { _this.unregisterDNDNode(node); }
-		);
-	},
-
-	onMoveTo: function(message) {
-		var _this = this;
-		dojo.lang.forEach(
-			message.child.getDescendants(),
-			function(node) { _this.registerDNDNode(node); }
-		);
-	},
-
-	/**
-	 * Controller(node model) creates DNDNodes because it passes itself to node for synchroneous drops processing
-	 * I can't process DnD with events cause an event can't return result success/false
-	*/
-	registerDNDNode: function(node) {
-		if (!node.tree.DNDMode) return;
-
-//dojo.debug("registerDNDNode "+node);
-
-		/* I drag label, not domNode, because large domNodes are very slow to copy and large to drag */
-
-		var source = null;
-		var target = null;
-
-		if (!node.actionIsDisabled(node.actions.MOVE)) {
-			//dojo.debug("reg source")
-			var source = new dojo.dnd.TreeDragSource(node.labelNode, this, node.tree.widgetId, node);
-			this.dragSources[node.widgetId] = source;
-		}
-
-		var target = new dojo.dnd.TreeDropTarget(node.labelNode, this.treeController, node.tree.DNDAcceptTypes, node, node.tree.DNDMode);
-
-		this.dropTargets[node.widgetId] = target;
-
-	},
-
-
-	unregisterDNDNode: function(node) {
-
-		if (this.dragSources[node.widgetId]) {
-			dojo.dnd.dragManager.unregisterDragSource(this.dragSources[node.widgetId]);
-			delete this.dragSources[node.widgetId];
-		}
-
-		if (this.dropTargets[node.widgetId]) {
-			dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[node.widgetId]);
-			delete this.dropTargets[node.widgetId];
-		}
-	}
-
-
-
-
-
-});

+ 0 - 16
main/inc/lib/javascript/dojo/src/dnd/__package__.js

@@ -1,16 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.kwCompoundRequire({
-	common: ["dojo.dnd.DragAndDrop"],
-	browser: ["dojo.dnd.HtmlDragAndDrop"],
-	dashboard: ["dojo.dnd.HtmlDragAndDrop"]
-});
-dojo.provide("dojo.dnd.*");

+ 0 - 622
main/inc/lib/javascript/dojo/src/doc.js

@@ -1,622 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.doc");
-dojo.require("dojo.io.*");
-dojo.require("dojo.event.topic");
-dojo.require("dojo.rpc.JotService");
-dojo.require("dojo.dom");
-
-/*
- * TODO:
- *
- * Package summary needs to compensate for "is"
- * Handle host environments
- * Deal with dojo.widget weirdness
- * Parse parameters
- * Limit function parameters to only the valid ones (Involves packing parameters onto meta during rewriting)
- * Package display page
- *
- */
-
-dojo.doc._count = 0;
-dojo.doc._keys = {};
-dojo.doc._myKeys = [];
-dojo.doc._callbacks = {function_names: []};
-dojo.doc._cache = {}; // Saves the JSON objects in cache
-dojo.doc._rpc = new dojo.rpc.JotService;
-dojo.doc._rpc.serviceUrl = "http://dojotoolkit.org/~pottedmeat/jsonrpc.php";
-
-dojo.lang.mixin(dojo.doc, {
-	functionNames: function(/*mixed*/ selectKey, /*Function*/ callback){
-		// summary: Returns an ordered list of package and function names.
-		dojo.debug("functionNames()");
-		if(!selectKey){
-			selectKey = ++dojo.doc._count;
-		}
-		dojo.doc._buildCache({
-			type: "function_names",
-			callbacks: [dojo.doc._functionNames, callback],
-			selectKey: selectKey
-		});
-	},
-
-	_functionNames: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){
-		dojo.debug("_functionNames()");
-		var searchData = [];
-		for(var key in data){
-			// Add the package if it doesn't exist in its children
-			if(!dojo.lang.inArray(data[key], key)){
-				searchData.push([key, key]);
-			}
-			// Add the functions
-			for(var pkg_key in data[key]){
-				searchData.push([data[key][pkg_key], data[key][pkg_key]]);
-			}
-		}
-
-		searchData = searchData.sort(dojo.doc._sort);
-
-		if(evt.callbacks && evt.callbacks.length){
-			var callback = evt.callbacks.shift();
-			callback.call(null, type, searchData, evt);
-		}
-	},
-
-	getMeta: function(/*mixed*/ selectKey, /*Function*/ callback, /*Function*/ name, /*String?*/ id){
-		// summary: Gets information about a function in regards to its meta data
-		dojo.debug("getMeta(" + name + ")");
-		if(!selectKey){
-			selectKey = ++dojo.doc._count;
-		}
-		dojo.doc._buildCache({
-			type: "meta",
-			callbacks: [callback],
-			name: name,
-			id: id,
-			selectKey: selectKey
-		});
-	},
-
-	_getMeta: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){
-		dojo.debug("_getMeta(" + evt.name + ") has package: " + evt.pkg + " with: " + type);
-		if("load" == type && evt.pkg){
-			evt.type = "meta";
-			dojo.doc._buildCache(evt);
-		}else{
-			if(evt.callbacks && evt.callbacks.length){
-				var callback = evt.callbacks.shift();
-				callback.call(null, "error", {}, evt);
-			}
-		}
-	},
-
-	getSrc: function(/*mixed*/ selectKey, /*Function*/ callback, /*String*/ name, /*String?*/ id){
-		// summary: Gets src file (created by the doc parser)
-		dojo.debug("getSrc()");
-		if(!selectKey){
-			selectKey = ++dojo.doc._count;
-		}	
-		dojo.doc._buildCache({
-			type: "src",
-			callbacks: [callback],
-			name: name,
-			id: id,
-			selectKey: selectKey
-		});
-	},
-
-	_getSrc: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){
-		dojo.debug("_getSrc()");
-		if(evt.pkg){	
-			evt.type = "src";
-			dojo.doc._buildCache(evt);
-		}else{
-			if(evt.callbacks && evt.callbacks.length){
-				var callback =  evt.callbacks.shift();
-				callback.call(null, "error", {}, evt);
-			}
-		}
-	},
-
-	getDoc: function(/*mixed*/ selectKey, /*Function*/ callback, /*String*/ name, /*String?*/ id){
-		// summary: Gets external documentation stored on jot
-		dojo.debug("getDoc()");
-		if(!selectKey){
-			selectKey = ++dojo.doc._count;
-		}
-		var input = {
-			type: "doc",
-			callbacks: [callback],
-			name: name,
-			id: id,
-			selectKey: selectKey
-		}
-		dojo.doc.functionPackage(dojo.doc._getDoc, input);
-	},
-
-	_getDoc: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){
-		dojo.debug("_getDoc(" + evt.pkg + "/" + evt.name + ")");
-	
-		dojo.doc._keys[evt.selectKey] = {count: 0};
-
-		var search = {};
-		search.forFormName = "DocFnForm";
-		search.limit = 1;
-
-		if(!evt.id){
-			search.filter = "it/DocFnForm/require = '" + evt.pkg + "' and it/DocFnForm/name = '" + evt.name + "' and not(it/DocFnForm/id)";
-		}else{
-			search.filter = "it/DocFnForm/require = '" + evt.pkg + "' and it/DocFnForm/name = '" + evt.name + "' and it/DocFnForm/id = '" + evt.id + "'";
-		}
-		dojo.debug(dojo.json.serialize(search));
-	
-		dojo.doc._rpc.callRemote("search", search).addCallbacks(function(data){ evt.type = "fn"; dojo.doc._gotDoc("load", data.list[0], evt); }, function(data){ evt.type = "fn"; dojo.doc._gotDoc("error", {}, evt); });
-	
-		search.forFormName = "DocParamForm";
-
-		if(!evt.id){
-			search.filter = "it/DocParamForm/fns = '" + evt.pkg + "=>" + evt.name + "'";
-		}else{
-			search.filter = "it/DocParamForm/fns = '" + evt.pkg + "=>" + evt.name + "=>" + evt.id + "'";
-		}
-		delete search.limit;
-
-		dojo.doc._rpc.callRemote("search", search).addCallbacks(function(data){ evt.type = "param"; dojo.doc._gotDoc("load", data.list, evt); }, function(data){ evt.type = "param"; dojo.doc._gotDoc("error", {}, evt); });
-	},
-
-	_gotDoc: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){
-		dojo.debug("_gotDoc(" + evt.type + ") for " + evt.selectKey);
-		dojo.doc._keys[evt.selectKey][evt.type] = data;
-		if(++dojo.doc._keys[evt.selectKey].count == 2){
-			dojo.debug("_gotDoc() finished");
-			var keys = dojo.doc._keys[evt.selectKey];
-			var description = '';
-			if(!keys.fn){
-				keys.fn = {}
-			}
-			if(keys.fn["main/text"]){
-				description = dojo.dom.createDocumentFromText(keys.fn["main/text"]).childNodes[0].innerHTML;
-				if(!description){
-					description = keys.fn["main/text"];
-				}			
-			}
-			data = {
-				description: description,
-				returns: keys.fn["DocFnForm/returns"],
-				id: keys.fn["DocFnForm/id"],
-				parameters: {},
-				variables: []
-			}
-			for(var i = 0, param; param = keys["param"][i]; i++){
-				data.parameters[param["DocParamForm/name"]] = {
-					description: param["DocParamForm/desc"]
-				};
-			}
-
-			delete dojo.doc._keys[evt.selectKey];
-		
-			if(evt.callbacks && evt.callbacks.length){
-				var callback = evt.callbacks.shift();
-				callback.call(null, "load", data, evt);
-			}
-		}
-	},
-
-	getPkgMeta: function(/*mixed*/ selectKey, /*Function*/ callback, /*String*/ name){
-		dojo.debug("getPkgMeta(" + name + ")");
-		if(!selectKey){
-			selectKey = ++dojo.doc._count;
-		}
-		dojo.doc._buildCache({
-			type: "pkgmeta",
-			callbacks: [callback],
-			name: name,
-			selectKey: selectKey
-		});
-	},
-
-	_getPkgMeta: function(/*Object*/ input){
-		dojo.debug("_getPkgMeta(" + input.name + ")");
-		input.type = "pkgmeta";
-		dojo.doc._buildCache(input);
-	},
-
-	_onDocSearch: function(/*Object*/ input){
-		dojo.debug("_onDocSearch(" + input.name + ")");
-		if(!input.name){
-			return;
-		}
-		if(!input.selectKey){
-			input.selectKey = ++dojo.doc._count;
-		}
-		input.callbacks = [dojo.doc._onDocSearchFn];
-		input.name = input.name.toLowerCase();
-		input.type = "function_names";
-
-		dojo.doc._buildCache(input);
-	},
-
-	_onDocSearchFn: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){
-		dojo.debug("_onDocSearchFn(" + evt.name + ")");
-		var packages = [];
-		var size = 0;
-		pkgLoop:
-		for(var pkg in data){
-			for(var i = 0, fn; fn = data[pkg][i]; i++){
-				if(fn.toLowerCase().indexOf(evt.name) != -1){
-					// Build a list of all packages that need to be loaded and their loaded state.
-					++size;
-					packages.push(pkg);
-					continue pkgLoop;
-				}
-			}
-		}
-		dojo.doc._keys[evt.selectKey] = {};
-		dojo.doc._keys[evt.selectKey].pkgs = packages;
-		dojo.doc._keys[evt.selectKey].pkg = evt.name; // Remember what we were searching for
-		dojo.doc._keys[evt.selectKey].loaded = 0;
-		for(var i = 0, pkg; pkg = packages[i]; i++){
-			setTimeout("dojo.doc.getPkgMeta(\"" + evt.selectKey + "\", dojo.doc._onDocResults, \"" + pkg + "\");", i*10);
-		}
-	},
-
-	_onDocResults: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){
-		dojo.debug("_onDocResults(" + evt.name + "/" + dojo.doc._keys[evt.selectKey].pkg + ") " + type);
-		++dojo.doc._keys[evt.selectKey].loaded;
-
-		if(dojo.doc._keys[evt.selectKey].loaded == dojo.doc._keys[evt.selectKey].pkgs.length){
-			var info = dojo.doc._keys[evt.selectKey];
-			var pkgs = info.pkgs;
-			var name = info.pkg;
-			delete dojo.doc._keys[evt.selectKey];
-			var results = {selectKey: evt.selectKey, docResults: []};
-			data = dojo.doc._cache;
-
-			for(var i = 0, pkg; pkg = pkgs[i]; i++){
-				if(!data[pkg]){
-					continue;
-				}
-				for(var fn in data[pkg]["meta"]){
-					if(fn.toLowerCase().indexOf(name) == -1){
-						continue;
-					}
-					if(fn != "requires"){
-						for(var pId in data[pkg]["meta"][fn]){
-							var result = {
-								pkg: pkg,
-								name: fn,
-								summary: ""
-							}
-							if(data[pkg]["meta"][fn][pId].summary){
-								result.summary = data[pkg]["meta"][fn][pId].summary;
-							}
-							results.docResults.push(result);
-						}
-					}
-				}
-			}
-
-			dojo.debug("Publishing docResults");
-			dojo.doc._printResults(results);
-		}
-	},
-	
-	_printResults: function(results){
-		dojo.debug("_printResults(): called");
-		// summary: Call this function to send the /doc/results topic
-	},
-
-	_onDocSelectFunction: function(/*Object*/ input){
-		// summary: Get doc, meta, and src
-		var name = input.name;
-		var selectKey = selectKey;
-		dojo.debug("_onDocSelectFunction(" + name + ")");
-		if(!name){
-			return false;
-		}
-		if(!selectKey){
-			selectKey = ++dojo.doc._count;
-		}
-
-		dojo.doc._keys[selectKey] = {size: 0};
-		dojo.doc._myKeys[++dojo.doc._count] = {selectKey: selectKey, type: "meta"}
-		dojo.doc.getMeta(dojo.doc._count, dojo.doc._onDocSelectResults, name);
-		dojo.doc._myKeys[++dojo.doc._count] = {selectKey: selectKey, type: "src"}
-		dojo.doc.getSrc(dojo.doc._count, dojo.doc._onDocSelectResults, name);
-		dojo.doc._myKeys[++dojo.doc._count] = {selectKey: selectKey, type: "doc"}
-		dojo.doc.getDoc(dojo.doc._count, dojo.doc._onDocSelectResults, name);
-	},
-
-	_onDocSelectResults: function(/*String*/ type, /*Object*/ data, /*Object*/ evt){
-		dojo.debug("dojo.doc._onDocSelectResults(" + evt.type + ", " + evt.name + ")");
-		var myKey = dojo.doc._myKeys[evt.selectKey];
-		dojo.doc._keys[myKey.selectKey][myKey.type] = data;
-		dojo.doc._keys[myKey.selectKey].size;
-		if(++dojo.doc._keys[myKey.selectKey].size == 3){
-			var key = dojo.lang.mixin(evt, dojo.doc._keys[myKey.selectKey]);
-			delete key.size;
-			dojo.debug("Publishing docFunctionDetail");
-			dojo.doc._printFunctionDetail(key);
-			delete dojo.doc._keys[myKey.selectKey];
-			delete dojo.doc._myKeys[evt.selectKey];
-		}
-	},
-	
-	_printFunctionDetail: function(results) {
-		// summary: Call this function to send the /doc/functionDetail topic event
-	},
-
-	_buildCache: function(/*Object*/ input){
-		var type = input.type;
-		var pkg = input.pkg;
-		var callbacks = input.callbacks;
-		var id = input.id;
-		if(!id){
-			id = "_";
-		}
-		var name = input.name;
-	
-		dojo.debug("_buildCache() type: " + type);
-		if(type == "function_names"){
-			if(!dojo.doc._cache["function_names"]){
-				dojo.debug("_buildCache() new cache");
-				if(callbacks && callbacks.length){
-					dojo.doc._callbacks.function_names.push([input, callbacks.shift()]);
-				}
-				dojo.doc._cache["function_names"] = {loading: true};
-				dojo.io.bind({
-					url: "json/function_names",
-					mimetype: "text/json",
-					error: function(type, data, evt){
-						dojo.debug("Unable to load function names");
-						for(var i = 0, callback; callback = dojo.doc._callbacks.function_names[i]; i++){
-							callback[1].call(null, "error", {}, callback[0]);
-						}
-					},
-					load: function(type, data, evt){
-						dojo.doc._cache['function_names'] = data;
-						for(var i = 0, callback; callback = dojo.doc._callbacks.function_names[i]; i++){
-							callback[1].call(null, "load", data, callback[0]);
-						}
-					}
-				});
-			}else if(dojo.doc._cache["function_names"].loading){
-				dojo.debug("_buildCache() loading cache");
-				if(callbacks && callbacks.length){
-					dojo.doc._callbacks.function_names.push([input, callbacks.shift()]);
-				}
-			}else{
-				dojo.debug("_buildCache() from cache");
-				if(callbacks && callbacks.length){
-					var callback = callbacks.shift();
-					callback.call(null, "load", dojo.doc._cache["function_names"], input);
-				}
-			}
-		}else if(type == "meta" || type == "src"){
-			if(!pkg){
-				if(type == "meta"){
-					dojo.doc.functionPackage(dojo.doc._getMeta, input);
-				}else{
-					dojo.doc.functionPackage(dojo.doc._getSrc, input);
-				}
-			}else{
-				try{
-					var cached = dojo.doc._cache[pkg][name][id][type];
-				}catch(e){}
-
-				if(cached){
-					if(callbacks && callbacks.length){
-						var callback = callbacks.shift();
-						callback.call(null, "load", cached, input);
-						return;
-					}
-				}
-
-				dojo.debug("Finding " + type + " for: " + pkg + ", function: " + name + ", id: " + id);
-
-				var mimetype = "text/json";
-				if(type == "src"){
-					mimetype = "text/plain"
-				}
-
-				var url = "json/" + pkg + "/" + name + "/" + id + "/" + type;
-
-				dojo.io.bind({
-					url: url,
-					input: input,
-					mimetype: mimetype,
-					error: function(type, data, evt, args){
-						var input = args.input;
-						var pkg = input.pkg;
-						var type = input.type;
-						var callbacks = input.callbacks;
-						var id = input.id;
-						var name = input.name;
-
-						if(callbacks && callbacks.length){
-							if(!data){
-								data = {};
-							}
-							if(!dojo.doc._cache[pkg]){
-								dojo.doc._cache[pkg] = {};
-							}
-							if(!dojo.doc._cache[pkg][name]){
-								dojo.doc._cache[pkg][name] = {};
-							}
-							if(type == "meta"){
-								data.sig = dojo.doc._cache[pkg][name][id].sig;
-								data.params = dojo.doc._cache[pkg][name][id].params;
-							}
-							var callback = callbacks.shift();
-							callback.call(null, "error", data, args.input);
-						}
-					},
-					load: function(type, data, evt, args){
-						var input = args.input;
-						var pkg = input.pkg;
-						var type = input.type;
-						var id = input.id;
-						var name = input.name;
-						var cache = dojo.doc._cache;
-						dojo.debug("_buildCache() loaded " + type);
-
-						if(!data){
-							data = {};
-						}
-						if(!cache[pkg]){
-							dojo.doc._cache[pkg] = {};
-						}
-						if(!cache[pkg][name]){
-							dojo.doc._cache[pkg][name] = {};
-						}
-						if(!cache[pkg][name][id]){
-							dojo.doc._cache[pkg][name][id] = {};
-						}
-						if(!cache[pkg][name][id].meta){
-							dojo.doc._cache[pkg][name][id].meta = {};
-						}
-						dojo.doc._cache[pkg][name][id][type] = data;
-						if(callbacks && callbacks.length){
-							var callback = callbacks.shift();
-							callback.call(null, "load", data, args.input);
-						}
-					}
-				});
-			}
-		}else if(type == "pkgmeta"){
-			try{
-				var cached = dojo.doc._cache[name]["meta"];
-			}catch(e){}
-
-			if(cached){
-				if(callbacks && callbacks.length){
-					var callback = callbacks.shift();
-					callback.call(null, "load", cached, input);
-					return;
-				}
-			}
-
-			dojo.debug("Finding package meta for: " + name);
-
-			dojo.io.bind({
-				url: "json/" + name + "/meta",
-				input: input,
-				mimetype: "text/json",
-				error: function(type, data, evt, args){
-					var callbacks = args.input.callbacks;
-					if(callbacks && callbacks.length){
-						var callback = callbacks.shift();
-						callback.call(null, "error", {}, args.input);
-					}
-				},
-				load: function(type, data, evt, args){
-					var pkg = args.input.name;
-					var cache = dojo.doc._cache;
-
-					dojo.debug("_buildCache() loaded for: " + pkg);
-					if(!cache[pkg]){
-						dojo.doc._cache[pkg] = {};
-					}
-				
-					if(!cache[pkg]["meta"]){
-						dojo.doc._cache[pkg]["meta"] = {};
-					}
-				
-					var methods = data.methods;
-					if(methods){
-						for(var method in methods){
-							if (method == "is") {
-								continue;
-							}
-							for(var pId in methods[method]){
-								if(!cache[pkg]["meta"][method]){
-									dojo.doc._cache[pkg]["meta"][method] = {};
-								}
-								if(!cache[pkg]["meta"][method][pId]){
-									dojo.doc._cache[pkg]["meta"][method][pId] = {};
-								}
-								dojo.doc._cache[pkg]["meta"][method][pId].summary = methods[method][pId];
-							}
-						}
-					}
-
-					dojo.doc._cache[pkg]["meta"].methods = methods;
-					var requires = data.requires;
-					if(requires){
-						dojo.doc._cache[pkg]["meta"].requires = requires;
-					}
-					if(callbacks && callbacks.length){
-						var callback = callbacks.shift();
-						callback.call(null, "load", methods, input);
-					}
-				}
-			});
-		}
-	},
-
-	selectFunction: function(/*String*/ name, /*String?*/ id){
-		// summary: The combined information
-	},
-
-	savePackage: function(/*String*/ name, /*String*/ description){
-		dojo.doc._rpc.callRemote(
-			"saveForm",
-			{
-				form: "DocPkgForm",
-				path: "/WikiHome/DojoDotDoc/id",
-				pname1: "main/text",
-				pvalue1: "Test"
-			}
-		).addCallbacks(dojo.doc._results, dojo.doc._results);
-	},
-
-	functionPackage: function(/*Function*/ callback, /*Object*/ input){
-		dojo.debug("functionPackage() name: " + input.name + " for type: " + input.type);
-		input.type = "function_names";
-		input.callbacks.unshift(callback);
-		input.callbacks.unshift(dojo.doc._functionPackage);
-		dojo.doc._buildCache(input);
-	},
-
-	_functionPackage: function(/*String*/ type, /*Array*/ data, /*Object*/ evt){
-		dojo.debug("_functionPackage() name: " + evt.name + " for: " + evt.type + " with: " + type);
-		evt.pkg = '';
-
-		var data = dojo.doc._cache['function_names'];
-		for(var key in data){
-			if(dojo.lang.inArray(data[key], evt.name)){
-				evt.pkg = key;
-				break;
-			}
-		}
-
-		if(evt.callbacks && evt.callbacks.length){
-			var callback = evt.callbacks.shift();
-			callback.call(null, type, data[key], evt);
-		}
-	},
-
-	_sort: function(a, b){
-		if(a[0] < b[0]){
-			return -1;
-		}
-		if(a[0] > b[0]){
-			return 1;
-		}
-	  return 0;
-	}
-});
-
-dojo.event.topic.subscribe("/doc/search", dojo.doc, "_onDocSearch");
-dojo.event.topic.subscribe("/doc/selectFunction", dojo.doc, "_onDocSelectFunction");
-
-dojo.event.topic.registerPublisher("/doc/results", dojo.doc, "_printResults");
-dojo.event.topic.registerPublisher("/doc/functionDetail", dojo.doc, "_printFunctionDetail");

+ 0 - 485
main/inc/lib/javascript/dojo/src/dom.js

@@ -1,485 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.dom");
-dojo.require("dojo.lang.array");
-
-dojo.dom.ELEMENT_NODE                  = 1;
-dojo.dom.ATTRIBUTE_NODE                = 2;
-dojo.dom.TEXT_NODE                     = 3;
-dojo.dom.CDATA_SECTION_NODE            = 4;
-dojo.dom.ENTITY_REFERENCE_NODE         = 5;
-dojo.dom.ENTITY_NODE                   = 6;
-dojo.dom.PROCESSING_INSTRUCTION_NODE   = 7;
-dojo.dom.COMMENT_NODE                  = 8;
-dojo.dom.DOCUMENT_NODE                 = 9;
-dojo.dom.DOCUMENT_TYPE_NODE            = 10;
-dojo.dom.DOCUMENT_FRAGMENT_NODE        = 11;
-dojo.dom.NOTATION_NODE                 = 12;
-	
-dojo.dom.dojoml = "http://www.dojotoolkit.org/2004/dojoml";
-
-/**
- *	comprehensive list of XML namespaces
-**/
-dojo.dom.xmlns = {
-	svg : "http://www.w3.org/2000/svg",
-	smil : "http://www.w3.org/2001/SMIL20/",
-	mml : "http://www.w3.org/1998/Math/MathML",
-	cml : "http://www.xml-cml.org",
-	xlink : "http://www.w3.org/1999/xlink",
-	xhtml : "http://www.w3.org/1999/xhtml",
-	xul : "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
-	xbl : "http://www.mozilla.org/xbl",
-	fo : "http://www.w3.org/1999/XSL/Format",
-	xsl : "http://www.w3.org/1999/XSL/Transform",
-	xslt : "http://www.w3.org/1999/XSL/Transform",
-	xi : "http://www.w3.org/2001/XInclude",
-	xforms : "http://www.w3.org/2002/01/xforms",
-	saxon : "http://icl.com/saxon",
-	xalan : "http://xml.apache.org/xslt",
-	xsd : "http://www.w3.org/2001/XMLSchema",
-	dt: "http://www.w3.org/2001/XMLSchema-datatypes",
-	xsi : "http://www.w3.org/2001/XMLSchema-instance",
-	rdf : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
-	rdfs : "http://www.w3.org/2000/01/rdf-schema#",
-	dc : "http://purl.org/dc/elements/1.1/",
-	dcq: "http://purl.org/dc/qualifiers/1.0",
-	"soap-env" : "http://schemas.xmlsoap.org/soap/envelope/",
-	wsdl : "http://schemas.xmlsoap.org/wsdl/",
-	AdobeExtensions : "http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
-};
-
-dojo.dom.isNode = function(wh){
-	if(typeof Element == "object") {
-		try {
-			return wh instanceof Element;
-		} catch(E) {}
-	} else {
-		// best-guess
-		return wh && !isNaN(wh.nodeType);
-	}
-}
-
-dojo.dom.getTagName = function(node){
-	dojo.deprecated("dojo.dom.getTagName", "use node.tagName instead", "0.4");
-
-	var tagName = node.tagName;
-	if(tagName.substr(0,5).toLowerCase()!="dojo:"){
-		
-		if(tagName.substr(0,4).toLowerCase()=="dojo"){
-			// FIXME: this assuumes tag names are always lower case
-			return "dojo:" + tagName.substring(4).toLowerCase();
-		}
-
-		// allow lower-casing
-		var djt = node.getAttribute("dojoType")||node.getAttribute("dojotype");
-		if(djt){
-			return "dojo:"+djt.toLowerCase();
-		}
-		
-		if((node.getAttributeNS)&&(node.getAttributeNS(this.dojoml,"type"))){
-			return "dojo:" + node.getAttributeNS(this.dojoml,"type").toLowerCase();
-		}
-		try{
-			// FIXME: IE really really doesn't like this, so we squelch
-			// errors for it
-			djt = node.getAttribute("dojo:type");
-		}catch(e){ /* FIXME: log? */ }
-		if(djt){
-			return "dojo:"+djt.toLowerCase();
-		}
-
-		if((!dj_global["djConfig"])||(!djConfig["ignoreClassNames"])){
-			// FIXME: should we make this optionally enabled via djConfig?
-			var classes = node.className||node.getAttribute("class");
-			// FIXME: following line, without check for existence of classes.indexOf
-			// breaks firefox 1.5's svg widgets
-			if((classes)&&(classes.indexOf)&&(classes.indexOf("dojo-") != -1)){
-				var aclasses = classes.split(" ");
-				for(var x=0; x<aclasses.length; x++){
-					if((aclasses[x].length>5)&&(aclasses[x].indexOf("dojo-")>=0)){
-						return "dojo:"+aclasses[x].substr(5).toLowerCase();
-					}
-				}
-			}
-		}
-
-	}
-	return tagName.toLowerCase();
-}
-
-dojo.dom.getUniqueId = function(){
-	do {
-		var id = "dj_unique_" + (++arguments.callee._idIncrement);
-	}while(document.getElementById(id));
-	return id;
-}
-dojo.dom.getUniqueId._idIncrement = 0;
-
-dojo.dom.firstElement = dojo.dom.getFirstChildElement = function(parentNode, tagName){
-	var node = parentNode.firstChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE){
-		node = node.nextSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.nextElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.lastElement = dojo.dom.getLastChildElement = function(parentNode, tagName){
-	var node = parentNode.lastChild;
-	while(node && node.nodeType != dojo.dom.ELEMENT_NODE) {
-		node = node.previousSibling;
-	}
-	if(tagName && node && node.tagName && node.tagName.toLowerCase() != tagName.toLowerCase()) {
-		node = dojo.dom.prevElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.nextElement = dojo.dom.getNextSiblingElement = function(node, tagName){
-	if(!node) { return null; }
-	do {
-		node = node.nextSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.nextElement(node, tagName);
-	}
-	return node;
-}
-
-dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement = function(node, tagName){
-	if(!node) { return null; }
-	if(tagName) { tagName = tagName.toLowerCase(); }
-	do {
-		node = node.previousSibling;
-	} while(node && node.nodeType != dojo.dom.ELEMENT_NODE);
-
-	if(node && tagName && tagName.toLowerCase() != node.tagName.toLowerCase()) {
-		return dojo.dom.prevElement(node, tagName);
-	}
-	return node;
-}
-
-// TODO: hmph
-/*this.forEachChildTag = function(node, unaryFunc) {
-	var child = this.getFirstChildTag(node);
-	while(child) {
-		if(unaryFunc(child) == "break") { break; }
-		child = this.getNextSiblingTag(child);
-	}
-}*/
-
-dojo.dom.moveChildren = function(srcNode, destNode, trim){
-	var count = 0;
-	if(trim) {
-		while(srcNode.hasChildNodes() &&
-			srcNode.firstChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.firstChild);
-		}
-		while(srcNode.hasChildNodes() &&
-			srcNode.lastChild.nodeType == dojo.dom.TEXT_NODE) {
-			srcNode.removeChild(srcNode.lastChild);
-		}
-	}
-	while(srcNode.hasChildNodes()){
-		destNode.appendChild(srcNode.firstChild);
-		count++;
-	}
-	return count;
-}
-
-dojo.dom.copyChildren = function(srcNode, destNode, trim){
-	var clonedNode = srcNode.cloneNode(true);
-	return this.moveChildren(clonedNode, destNode, trim);
-}
-
-dojo.dom.removeChildren = function(node){
-	var count = node.childNodes.length;
-	while(node.hasChildNodes()){ node.removeChild(node.firstChild); }
-	return count;
-}
-
-dojo.dom.replaceChildren = function(node, newChild){
-	// FIXME: what if newChild is an array-like object?
-	dojo.dom.removeChildren(node);
-	node.appendChild(newChild);
-}
-
-dojo.dom.removeNode = function(node){
-	if(node && node.parentNode){
-		// return a ref to the removed child
-		return node.parentNode.removeChild(node);
-	}
-}
-
-dojo.dom.getAncestors = function(node, filterFunction, returnFirstHit) {
-	var ancestors = [];
-	var isFunction = dojo.lang.isFunction(filterFunction);
-	while(node) {
-		if (!isFunction || filterFunction(node)) {
-			ancestors.push(node);
-		}
-		if (returnFirstHit && ancestors.length > 0) { return ancestors[0]; }
-		
-		node = node.parentNode;
-	}
-	if (returnFirstHit) { return null; }
-	return ancestors;
-}
-
-dojo.dom.getAncestorsByTag = function(node, tag, returnFirstHit) {
-	tag = tag.toLowerCase();
-	return dojo.dom.getAncestors(node, function(el){
-		return ((el.tagName)&&(el.tagName.toLowerCase() == tag));
-	}, returnFirstHit);
-}
-
-dojo.dom.getFirstAncestorByTag = function(node, tag) {
-	return dojo.dom.getAncestorsByTag(node, tag, true);
-}
-
-dojo.dom.isDescendantOf = function(node, ancestor, guaranteeDescendant){
-	// guaranteeDescendant allows us to be a "true" isDescendantOf function
-	if(guaranteeDescendant && node) { node = node.parentNode; }
-	while(node) {
-		if(node == ancestor){ return true; }
-		node = node.parentNode;
-	}
-	return false;
-}
-
-dojo.dom.innerXML = function(node){
-	if(node.innerXML){
-		return node.innerXML;
-	}else if (node.xml){
-		return node.xml;
-	}else if(typeof XMLSerializer != "undefined"){
-		return (new XMLSerializer()).serializeToString(node);
-	}
-}
-
-dojo.dom.createDocument = function(){
-	var doc = null;
-
-	if(!dj_undef("ActiveXObject")){
-		var prefixes = [ "MSXML2", "Microsoft", "MSXML", "MSXML3" ];
-		for(var i = 0; i<prefixes.length; i++){
-			try{
-				doc = new ActiveXObject(prefixes[i]+".XMLDOM");
-			}catch(e){ /* squelch */ };
-
-			if(doc){ break; }
-		}
-	}else if((document.implementation)&&
-		(document.implementation.createDocument)){
-		doc = document.implementation.createDocument("", "", null);
-	}
-	
-	return doc;
-}
-
-dojo.dom.createDocumentFromText = function(str, mimetype){
-	if(!mimetype){ mimetype = "text/xml"; }
-	if(!dj_undef("DOMParser")){
-		var parser = new DOMParser();
-		return parser.parseFromString(str, mimetype);
-	}else if(!dj_undef("ActiveXObject")){
-		var domDoc = dojo.dom.createDocument();
-		if(domDoc){
-			domDoc.async = false;
-			domDoc.loadXML(str);
-			return domDoc;
-		}else{
-			dojo.debug("toXml didn't work?");
-		}
-	/*
-	}else if((dojo.render.html.capable)&&(dojo.render.html.safari)){
-		// FIXME: this doesn't appear to work!
-		// from: http://web-graphics.com/mtarchive/001606.php
-		// var xml = '<?xml version="1.0"?>'+str;
-		var mtype = "text/xml";
-		var xml = '<?xml version="1.0"?>'+str;
-		var url = "data:"+mtype+";charset=utf-8,"+encodeURIComponent(xml);
-		var req = new XMLHttpRequest();
-		req.open("GET", url, false);
-		req.overrideMimeType(mtype);
-		req.send(null);
-		return req.responseXML;
-	*/
-	}else if(document.createElement){
-		// FIXME: this may change all tags to uppercase!
-		var tmp = document.createElement("xml");
-		tmp.innerHTML = str;
-		if(document.implementation && document.implementation.createDocument) {
-			var xmlDoc = document.implementation.createDocument("foo", "", null);
-			for(var i = 0; i < tmp.childNodes.length; i++) {
-				xmlDoc.importNode(tmp.childNodes.item(i), true);
-			}
-			return xmlDoc;
-		}
-		// FIXME: probably not a good idea to have to return an HTML fragment
-		// FIXME: the tmp.doc.firstChild is as tested from IE, so it may not
-		// work that way across the board
-		return ((tmp.document)&&
-			(tmp.document.firstChild ?  tmp.document.firstChild : tmp));
-	}
-	return null;
-}
-
-dojo.dom.prependChild = function(node, parent) {
-	if(parent.firstChild) {
-		parent.insertBefore(node, parent.firstChild);
-	} else {
-		parent.appendChild(node);
-	}
-	return true;
-}
-
-dojo.dom.insertBefore = function(node, ref, force){
-	if (force != true &&
-		(node === ref || node.nextSibling === ref)){ return false; }
-	var parent = ref.parentNode;
-	parent.insertBefore(node, ref);
-	return true;
-}
-
-dojo.dom.insertAfter = function(node, ref, force){
-	var pn = ref.parentNode;
-	if(ref == pn.lastChild){
-		if((force != true)&&(node === ref)){
-			return false;
-		}
-		pn.appendChild(node);
-	}else{
-		return this.insertBefore(node, ref.nextSibling, force);
-	}
-	return true;
-}
-
-dojo.dom.insertAtPosition = function(node, ref, position){
-	if((!node)||(!ref)||(!position)){ return false; }
-	switch(position.toLowerCase()){
-		case "before":
-			return dojo.dom.insertBefore(node, ref);
-		case "after":
-			return dojo.dom.insertAfter(node, ref);
-		case "first":
-			if(ref.firstChild){
-				return dojo.dom.insertBefore(node, ref.firstChild);
-			}else{
-				ref.appendChild(node);
-				return true;
-			}
-			break;
-		default: // aka: last
-			ref.appendChild(node);
-			return true;
-	}
-}
-
-dojo.dom.insertAtIndex = function(node, containingNode, insertionIndex){
-	var siblingNodes = containingNode.childNodes;
-
-	// if there aren't any kids yet, just add it to the beginning
-
-	if (!siblingNodes.length){
-		containingNode.appendChild(node);
-		return true;
-	}
-
-	// otherwise we need to walk the childNodes
-	// and find our spot
-
-	var after = null;
-
-	for(var i=0; i<siblingNodes.length; i++){
-
-		var sibling_index = siblingNodes.item(i)["getAttribute"] ? parseInt(siblingNodes.item(i).getAttribute("dojoinsertionindex")) : -1;
-
-		if (sibling_index < insertionIndex){
-			after = siblingNodes.item(i);
-		}
-	}
-
-	if (after){
-		// add it after the node in {after}
-
-		return dojo.dom.insertAfter(node, after);
-	}else{
-		// add it to the start
-
-		return dojo.dom.insertBefore(node, siblingNodes.item(0));
-	}
-}
-	
-/**
- * implementation of the DOM Level 3 attribute.
- * 
- * @param node The node to scan for text
- * @param text Optional, set the text to this value.
- */
-dojo.dom.textContent = function(node, text){
-	if (text) {
-		dojo.dom.replaceChildren(node, document.createTextNode(text));
-		return text;
-	} else {
-		var _result = "";
-		if (node == null) { return _result; }
-		for (var i = 0; i < node.childNodes.length; i++) {
-			switch (node.childNodes[i].nodeType) {
-				case 1: // ELEMENT_NODE
-				case 5: // ENTITY_REFERENCE_NODE
-					_result += dojo.dom.textContent(node.childNodes[i]);
-					break;
-				case 3: // TEXT_NODE
-				case 2: // ATTRIBUTE_NODE
-				case 4: // CDATA_SECTION_NODE
-					_result += node.childNodes[i].nodeValue;
-					break;
-				default:
-					break;
-			}
-		}
-		return _result;
-	}
-}
-
-dojo.dom.collectionToArray = function(collection){
-	dojo.deprecated("dojo.dom.collectionToArray", "use dojo.lang.toArray instead", "0.4");
-	return dojo.lang.toArray(collection);
-}
-
-dojo.dom.hasParent = function (node) {
-	return node && node.parentNode && dojo.dom.isNode(node.parentNode);
-}
-
-/**
- * Determines if node has any of the provided tag names and
- * returns the tag name that matches, empty string otherwise.
- *
- * Examples:
- *
- * myFooNode = <foo />
- * isTag(myFooNode, "foo"); // returns "foo"
- * isTag(myFooNode, "bar"); // returns ""
- * isTag(myFooNode, "FOO"); // returns ""
- * isTag(myFooNode, "hey", "foo", "bar"); // returns "foo"
-**/
-dojo.dom.isTag = function(node /* ... */) {
-	if(node && node.tagName) {
-		var arr = dojo.lang.toArray(arguments, 1);
-		return arr[ dojo.lang.find(node.tagName, arr) ] || "";
-	}
-	return "";
-}

+ 0 - 575
main/inc/lib/javascript/dojo/src/event.js

@@ -1,575 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.event");
-
-dojo.require("dojo.lang.array");
-dojo.require("dojo.lang.extras");
-dojo.require("dojo.lang.func");
-
-dojo.event = new function(){
-	this.canTimeout = dojo.lang.isFunction(dj_global["setTimeout"])||dojo.lang.isAlien(dj_global["setTimeout"]);
-
-	// FIXME: where should we put this method (not here!)?
-	function interpolateArgs(args, searchForNames){
-		var dl = dojo.lang;
-		var ao = {
-			srcObj: dj_global,
-			srcFunc: null,
-			adviceObj: dj_global,
-			adviceFunc: null,
-			aroundObj: null,
-			aroundFunc: null,
-			adviceType: (args.length>2) ? args[0] : "after",
-			precedence: "last",
-			once: false,
-			delay: null,
-			rate: 0,
-			adviceMsg: false
-		};
-
-		switch(args.length){
-			case 0: return;
-			case 1: return;
-			case 2:
-				ao.srcFunc = args[0];
-				ao.adviceFunc = args[1];
-				break;
-			case 3:
-				if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isString(args[1]))&&(dl.isString(args[2]))){
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-				}else if((dl.isObject(args[0]))&&(dl.isString(args[1]))&&(dl.isFunction(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					var tmpName  = dl.nameAnonFunc(args[2], ao.adviceObj, searchForNames);
-					ao.adviceFunc = tmpName;
-				}else if((dl.isFunction(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))){
-					ao.adviceType = "after";
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[0], ao.srcObj, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[1];
-					ao.adviceFunc = args[2];
-				}
-				break;
-			case 4:
-				if((dl.isObject(args[0]))&&(dl.isObject(args[2]))){
-					// we can assume that we've got an old-style "connect" from
-					// the sigslot school of event attachment. We therefore
-					// assume after-advice.
-					ao.adviceType = "after";
-					ao.srcObj = args[0];
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isString(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isFunction(args[1]))&&(dl.isObject(args[2]))){
-					ao.adviceType = args[0];
-					ao.srcObj = dj_global;
-					var tmpName  = dl.nameAnonFunc(args[1], dj_global, searchForNames);
-					ao.srcFunc = tmpName;
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else if((dl.isString(args[0]))&&(dl.isObject(args[1]))&&(dl.isString(args[2]))&&(dl.isFunction(args[3]))){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					var tmpName  = dl.nameAnonFunc(args[3], dj_global, searchForNames);
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = tmpName;
-				}else if(dl.isObject(args[1])){
-					ao.srcObj = args[1];
-					ao.srcFunc = args[2];
-					ao.adviceObj = dj_global;
-					ao.adviceFunc = args[3];
-				}else if(dl.isObject(args[2])){
-					ao.srcObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceObj = args[2];
-					ao.adviceFunc = args[3];
-				}else{
-					ao.srcObj = ao.adviceObj = ao.aroundObj = dj_global;
-					ao.srcFunc = args[1];
-					ao.adviceFunc = args[2];
-					ao.aroundFunc = args[3];
-				}
-				break;
-			case 6:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundFunc = args[5];
-				ao.aroundObj = dj_global;
-				break;
-			default:
-				ao.srcObj = args[1];
-				ao.srcFunc = args[2];
-				ao.adviceObj = args[3]
-				ao.adviceFunc = args[4];
-				ao.aroundObj = args[5];
-				ao.aroundFunc = args[6];
-				ao.once = args[7];
-				ao.delay = args[8];
-				ao.rate = args[9];
-				ao.adviceMsg = args[10];
-				break;
-		}
-
-		if(dl.isFunction(ao.aroundFunc)){
-			var tmpName  = dl.nameAnonFunc(ao.aroundFunc, ao.aroundObj, searchForNames);
-			ao.aroundFunc = tmpName;
-		}
-
-		if(dl.isFunction(ao.srcFunc)){
-			ao.srcFunc = dl.getNameInObj(ao.srcObj, ao.srcFunc);
-		}
-
-		if(dl.isFunction(ao.adviceFunc)){
-			ao.adviceFunc = dl.getNameInObj(ao.adviceObj, ao.adviceFunc);
-		}
-
-		if((ao.aroundObj)&&(dl.isFunction(ao.aroundFunc))){
-			ao.aroundFunc = dl.getNameInObj(ao.aroundObj, ao.aroundFunc);
-		}
-
-		if(!ao.srcObj){
-			dojo.raise("bad srcObj for srcFunc: "+ao.srcFunc);
-		}
-		if(!ao.adviceObj){
-			dojo.raise("bad adviceObj for adviceFunc: "+ao.adviceFunc);
-		}
-		return ao;
-	}
-
-	this.connect = function(){
-		if(arguments.length == 1){
-			var ao = arguments[0];
-		}else{
-			var ao = interpolateArgs(arguments, true);
-		}
-
-		if(dojo.lang.isArray(ao.srcObj) && ao.srcObj!=""){
-			var tmpAO = {};
-			for(var x in ao){
-				tmpAO[x] = ao[x];
-			}
-			var mjps = [];
-			dojo.lang.forEach(ao.srcObj, function(src){
-				if((dojo.render.html.capable)&&(dojo.lang.isString(src))){
-					src = dojo.byId(src);
-					// dojo.debug(src);
-				}
-				tmpAO.srcObj = src;
-				// dojo.debug(tmpAO.srcObj, tmpAO.srcFunc);
-				// dojo.debug(tmpAO.adviceObj, tmpAO.adviceFunc);
-				mjps.push(dojo.event.connect.call(dojo.event, tmpAO));
-			});
-			return mjps;
-		}
-
-		// FIXME: just doing a "getForMethod()" seems to be enough to put this into infinite recursion!!
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		if(ao.adviceFunc){
-			var mjp2 = dojo.event.MethodJoinPoint.getForMethod(ao.adviceObj, ao.adviceFunc);
-		}
-
-		mjp.kwAddAdvice(ao);
-
-		return mjp;	// advanced users might want to fsck w/ the join point
-					// manually
-	}
-
-	this.log = function(a1, a2){
-		var kwArgs;
-		if((arguments.length == 1)&&(typeof a1 == "object")){
-			kwArgs = a1;
-		}else{
-			kwArgs = {
-				srcObj: a1,
-				srcFunc: a2
-			};
-		}
-		kwArgs.adviceFunc = function(){
-			var argsStr = [];
-			for(var x=0; x<arguments.length; x++){
-				argsStr.push(arguments[x]);
-			}
-			dojo.debug("("+kwArgs.srcObj+")."+kwArgs.srcFunc, ":", argsStr.join(", "));
-		}
-		this.kwConnect(kwArgs);
-	}
-
-	this.connectBefore = function(){
-		var args = ["before"];
-		for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }
-		return this.connect.apply(this, args);
-	}
-
-	this.connectAround = function(){
-		var args = ["around"];
-		for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }
-		return this.connect.apply(this, args);
-	}
-
-	this.connectOnce = function(){
-		var ao = interpolateArgs(arguments, true);
-		ao.once = true;
-		return this.connect(ao);
-	}
-
-	this._kwConnectImpl = function(kwArgs, disconnect){
-		var fn = (disconnect) ? "disconnect" : "connect";
-		if(typeof kwArgs["srcFunc"] == "function"){
-			kwArgs.srcObj = kwArgs["srcObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.srcFunc, kwArgs.srcObj, true);
-			kwArgs.srcFunc = tmpName;
-		}
-		if(typeof kwArgs["adviceFunc"] == "function"){
-			kwArgs.adviceObj = kwArgs["adviceObj"]||dj_global;
-			var tmpName  = dojo.lang.nameAnonFunc(kwArgs.adviceFunc, kwArgs.adviceObj, true);
-			kwArgs.adviceFunc = tmpName;
-		}
-		return dojo.event[fn](	(kwArgs["type"]||kwArgs["adviceType"]||"after"),
-									kwArgs["srcObj"]||dj_global,
-									kwArgs["srcFunc"],
-									kwArgs["adviceObj"]||kwArgs["targetObj"]||dj_global,
-									kwArgs["adviceFunc"]||kwArgs["targetFunc"],
-									kwArgs["aroundObj"],
-									kwArgs["aroundFunc"],
-									kwArgs["once"],
-									kwArgs["delay"],
-									kwArgs["rate"],
-									kwArgs["adviceMsg"]||false );
-	}
-
-	this.kwConnect = function(kwArgs){
-		return this._kwConnectImpl(kwArgs, false);
-
-	}
-
-	this.disconnect = function(){
-		var ao = interpolateArgs(arguments, true);
-		if(!ao.adviceFunc){ return; } // nothing to disconnect
-		var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc);
-		return mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once);
-	}
-
-	this.kwDisconnect = function(kwArgs){
-		return this._kwConnectImpl(kwArgs, true);
-	}
-}
-
-// exactly one of these is created whenever a method with a joint point is run,
-// if there is at least one 'around' advice.
-dojo.event.MethodInvocation = function(join_point, obj, args) {
-	this.jp_ = join_point;
-	this.object = obj;
-	this.args = [];
-	for(var x=0; x<args.length; x++){
-		this.args[x] = args[x];
-	}
-	// the index of the 'around' that is currently being executed.
-	this.around_index = -1;
-}
-
-dojo.event.MethodInvocation.prototype.proceed = function() {
-	this.around_index++;
-	if(this.around_index >= this.jp_.around.length){
-		return this.jp_.object[this.jp_.methodname].apply(this.jp_.object, this.args);
-		// return this.jp_.run_before_after(this.object, this.args);
-	}else{
-		var ti = this.jp_.around[this.around_index];
-		var mobj = ti[0]||dj_global;
-		var meth = ti[1];
-		return mobj[meth].call(mobj, this);
-	}
-} 
-
-
-dojo.event.MethodJoinPoint = function(obj, methname){
-	this.object = obj||dj_global;
-	this.methodname = methname;
-	this.methodfunc = this.object[methname];
-	this.before = [];
-	this.after = [];
-	this.around = [];
-}
-
-dojo.event.MethodJoinPoint.getForMethod = function(obj, methname) {
-	// if(!(methname in obj)){
-	if(!obj){ obj = dj_global; }
-	if(!obj[methname]){
-		// supply a do-nothing method implementation
-		obj[methname] = function(){};
-		if(!obj[methname]){
-			// e.g. cannot add to inbuilt objects in IE6
-			dojo.raise("Cannot set do-nothing method on that object "+methname);
-		}
-	}else if((!dojo.lang.isFunction(obj[methname]))&&(!dojo.lang.isAlien(obj[methname]))){
-		return null; // FIXME: should we throw an exception here instead?
-	}
-	// we hide our joinpoint instance in obj[methname + '$joinpoint']
-	var jpname = methname + "$joinpoint";
-	var jpfuncname = methname + "$joinpoint$method";
-	var joinpoint = obj[jpname];
-	if(!joinpoint){
-		var isNode = false;
-		if(dojo.event["browser"]){
-			if( (obj["attachEvent"])||
-				(obj["nodeType"])||
-				(obj["addEventListener"]) ){
-				isNode = true;
-				dojo.event.browser.addClobberNodeAttrs(obj, [jpname, jpfuncname, methname]);
-			}
-		}
-		var origArity = obj[methname].length;
-		obj[jpfuncname] = obj[methname];
-		// joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, methname);
-		joinpoint = obj[jpname] = new dojo.event.MethodJoinPoint(obj, jpfuncname);
-		obj[methname] = function(){ 
-			var args = [];
-
-			if((isNode)&&(!arguments.length)){
-				var evt = null;
-				try{
-					if(obj.ownerDocument){
-						evt = obj.ownerDocument.parentWindow.event;
-					}else if(obj.documentElement){
-						evt = obj.documentElement.ownerDocument.parentWindow.event;
-					}else{
-						evt = window.event;
-					}
-				}catch(e){
-					evt = window.event;
-				}
-
-				if(evt){
-					args.push(dojo.event.browser.fixEvent(evt, this));
-				}
-			}else{
-				for(var x=0; x<arguments.length; x++){
-					if((x==0)&&(isNode)&&(dojo.event.browser.isEvent(arguments[x]))){
-						args.push(dojo.event.browser.fixEvent(arguments[x], this));
-					}else{
-						args.push(arguments[x]);
-					}
-				}
-			}
-			// return joinpoint.run.apply(joinpoint, arguments); 
-			return joinpoint.run.apply(joinpoint, args); 
-		}
-		obj[methname].__preJoinArity = origArity;
-	}
-	return joinpoint;
-}
-
-dojo.lang.extend(dojo.event.MethodJoinPoint, {
-	unintercept: function(){
-		this.object[this.methodname] = this.methodfunc;
-		this.before = [];
-		this.after = [];
-		this.around = [];
-	},
-
-	disconnect: dojo.lang.forward("unintercept"),
-
-	run: function() {
-		var obj = this.object||dj_global;
-		var args = arguments;
-
-		// optimization. We only compute once the array version of the arguments
-		// pseudo-arr in order to prevent building it each time advice is unrolled.
-		var aargs = [];
-		for(var x=0; x<args.length; x++){
-			aargs[x] = args[x];
-		}
-
-		var unrollAdvice  = function(marr){ 
-			if(!marr){
-				dojo.debug("Null argument to unrollAdvice()");
-				return;
-			}
-		  
-			var callObj = marr[0]||dj_global;
-			var callFunc = marr[1];
-			
-			if(!callObj[callFunc]){
-				dojo.raise("function \"" + callFunc + "\" does not exist on \"" + callObj + "\"");
-			}
-			
-			var aroundObj = marr[2]||dj_global;
-			var aroundFunc = marr[3];
-			var msg = marr[6];
-			var undef;
-
-			var to = {
-				args: [],
-				jp_: this,
-				object: obj,
-				proceed: function(){
-					return callObj[callFunc].apply(callObj, to.args);
-				}
-			};
-			to.args = aargs;
-
-			var delay = parseInt(marr[4]);
-			var hasDelay = ((!isNaN(delay))&&(marr[4]!==null)&&(typeof marr[4] != "undefined"));
-			if(marr[5]){
-				var rate = parseInt(marr[5]);
-				var cur = new Date();
-				var timerSet = false;
-				if((marr["last"])&&((cur-marr.last)<=rate)){
-					if(dojo.event.canTimeout){
-						if(marr["delayTimer"]){
-							clearTimeout(marr.delayTimer);
-						}
-						var tod = parseInt(rate*2); // is rate*2 naive?
-						var mcpy = dojo.lang.shallowCopy(marr);
-						marr.delayTimer = setTimeout(function(){
-							// FIXME: on IE at least, event objects from the
-							// browser can go out of scope. How (or should?) we
-							// deal with it?
-							mcpy[5] = 0;
-							unrollAdvice(mcpy);
-						}, tod);
-					}
-					return;
-				}else{
-					marr.last = cur;
-				}
-			}
-
-			// FIXME: need to enforce rates for a connection here!
-
-			if(aroundFunc){
-				// NOTE: around advice can't delay since we might otherwise depend
-				// on execution order!
-				aroundObj[aroundFunc].call(aroundObj, to);
-			}else{
-				// var tmjp = dojo.event.MethodJoinPoint.getForMethod(obj, methname);
-				if((hasDelay)&&((dojo.render.html)||(dojo.render.svg))){  // FIXME: the render checks are grotty!
-					dj_global["setTimeout"](function(){
-						if(msg){
-							callObj[callFunc].call(callObj, to); 
-						}else{
-							callObj[callFunc].apply(callObj, args); 
-						}
-					}, delay);
-				}else{ // many environments can't support delay!
-					if(msg){
-						callObj[callFunc].call(callObj, to); 
-					}else{
-						callObj[callFunc].apply(callObj, args); 
-					}
-				}
-			}
-		}
-
-		if(this.before.length>0){
-			dojo.lang.forEach(this.before, unrollAdvice);
-		}
-
-		var result;
-		if(this.around.length>0){
-			var mi = new dojo.event.MethodInvocation(this, obj, args);
-			result = mi.proceed();
-		}else if(this.methodfunc){
-			result = this.object[this.methodname].apply(this.object, args);
-		}
-
-		if(this.after.length>0){
-			dojo.lang.forEach(this.after, unrollAdvice);
-		}
-
-		return (this.methodfunc) ? result : null;
-	},
-
-	getArr: function(kind){
-		var arr = this.after;
-		// FIXME: we should be able to do this through props or Array.in()
-		if((typeof kind == "string")&&(kind.indexOf("before")!=-1)){
-			arr = this.before;
-		}else if(kind=="around"){
-			arr = this.around;
-		}
-		return arr;
-	},
-
-	kwAddAdvice: function(args){
-		this.addAdvice(	args["adviceObj"], args["adviceFunc"], 
-						args["aroundObj"], args["aroundFunc"], 
-						args["adviceType"], args["precedence"], 
-						args["once"], args["delay"], args["rate"], 
-						args["adviceMsg"]);
-	},
-
-	addAdvice: function(	thisAdviceObj, thisAdvice, 
-							thisAroundObj, thisAround, 
-							advice_kind, precedence, 
-							once, delay, rate, asMessage){
-		var arr = this.getArr(advice_kind);
-		if(!arr){
-			dojo.raise("bad this: " + this);
-		}
-
-		var ao = [thisAdviceObj, thisAdvice, thisAroundObj, thisAround, delay, rate, asMessage];
-		
-		if(once){
-			if(this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr) >= 0){
-				return;
-			}
-		}
-
-		if(precedence == "first"){
-			arr.unshift(ao);
-		}else{
-			arr.push(ao);
-		}
-	},
-
-	hasAdvice: function(thisAdviceObj, thisAdvice, advice_kind, arr){
-		if(!arr){ arr = this.getArr(advice_kind); }
-		var ind = -1;
-		for(var x=0; x<arr.length; x++){
-			var aao = (typeof thisAdvice == "object") ? (new String(thisAdvice)).toString() : thisAdvice;
-			var a1o = (typeof arr[x][1] == "object") ? (new String(arr[x][1])).toString() : arr[x][1];
-			if((arr[x][0] == thisAdviceObj)&&(a1o == aao)){
-				ind = x;
-			}
-		}
-		return ind;
-	},
-
-	removeAdvice: function(thisAdviceObj, thisAdvice, advice_kind, once){
-		var arr = this.getArr(advice_kind);
-		var ind = this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr);
-		if(ind == -1){
-			return false;
-		}
-		while(ind != -1){
-			arr.splice(ind, 1);
-			if(once){ break; }
-			ind = this.hasAdvice(thisAdviceObj, thisAdvice, advice_kind, arr);
-		}
-		return true;
-	}
-});

+ 0 - 16
main/inc/lib/javascript/dojo/src/event/__package__.js

@@ -1,16 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.kwCompoundRequire({
-	common: ["dojo.event", "dojo.event.topic"],
-	browser: ["dojo.event.browser"],
-	dashboard: ["dojo.event.browser"]
-});
-dojo.provide("dojo.event.*");

+ 0 - 273
main/inc/lib/javascript/dojo/src/event/browser.js

@@ -1,273 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.event.browser");
-dojo.require("dojo.event");
-
-// FIXME: any particular reason this is in the global scope?
-dojo._ie_clobber = new function(){
-	this.clobberNodes = [];
-
-	function nukeProp(node, prop){
-		// try{ node.removeAttribute(prop); 	}catch(e){ /* squelch */ }
-		try{ node[prop] = null; 			}catch(e){ /* squelch */ }
-		try{ delete node[prop]; 			}catch(e){ /* squelch */ }
-		// FIXME: JotLive needs this, but I'm not sure if it's too slow or not
-		try{ node.removeAttribute(prop);	}catch(e){ /* squelch */ }
-	}
-
-	this.clobber = function(nodeRef){
-		var na;
-		var tna;
-		if(nodeRef){
-			tna = nodeRef.all || nodeRef.getElementsByTagName("*");
-			na = [nodeRef];
-			for(var x=0; x<tna.length; x++){
-				// if we're gonna be clobbering the thing, at least make sure
-				// we aren't trying to do it twice
-				if(tna[x]["__doClobber__"]){
-					na.push(tna[x]);
-				}
-			}
-		}else{
-			try{ window.onload = null; }catch(e){}
-			na = (this.clobberNodes.length) ? this.clobberNodes : document.all;
-		}
-		tna = null;
-		var basis = {};
-		for(var i = na.length-1; i>=0; i=i-1){
-			var el = na[i];
-			if(el["__clobberAttrs__"]){
-				for(var j=0; j<el.__clobberAttrs__.length; j++){
-					nukeProp(el, el.__clobberAttrs__[j]);
-				}
-				nukeProp(el, "__clobberAttrs__");
-				nukeProp(el, "__doClobber__");
-			}
-		}
-		na = null;
-	}
-}
-
-if(dojo.render.html.ie){
-	dojo.addOnUnload(function(){
-		dojo._ie_clobber.clobber();
-		try{
-			if((dojo["widget"])&&(dojo.widget["manager"])){
-				dojo.widget.manager.destroyAll();
-			}
-		}catch(e){}
-		try{ window.onload = null; }catch(e){}
-		try{ window.onunload = null; }catch(e){}
-		dojo._ie_clobber.clobberNodes = [];
-		// CollectGarbage();
-	});
-}
-
-dojo.event.browser = new function(){
-
-	var clobberIdx = 0;
-
-	this.clean = function(node){
-		if(dojo.render.html.ie){ 
-			dojo._ie_clobber.clobber(node);
-		}
-	}
-
-	this.addClobberNode = function(node){
-		if(!dojo.render.html.ie){ return; }
-		if(!node["__doClobber__"]){
-			node.__doClobber__ = true;
-			dojo._ie_clobber.clobberNodes.push(node);
-			// this might not be the most efficient thing to do, but it's
-			// much less error prone than other approaches which were
-			// previously tried and failed
-			node.__clobberAttrs__ = [];
-		}
-	}
-
-	this.addClobberNodeAttrs = function(node, props){
-		if(!dojo.render.html.ie){ return; }
-		this.addClobberNode(node);
-		for(var x=0; x<props.length; x++){
-			node.__clobberAttrs__.push(props[x]);
-		}
-	}
-
-	this.removeListener = function(node, evtName, fp, capture){
-		if(!capture){ var capture = false; }
-		evtName = evtName.toLowerCase();
-		if(evtName.substr(0,2)=="on"){ evtName = evtName.substr(2); }
-		// FIXME: this is mostly a punt, we aren't actually doing anything on IE
-		if(node.removeEventListener){
-			node.removeEventListener(evtName, fp, capture);
-		}
-	}
-
-	this.addListener = function(node, evtName, fp, capture, dontFix){
-		if(!node){ return; } // FIXME: log and/or bail?
-		if(!capture){ var capture = false; }
-		evtName = evtName.toLowerCase();
-		if(evtName.substr(0,2)!="on"){ evtName = "on"+evtName; }
-
-		if(!dontFix){
-			// build yet another closure around fp in order to inject fixEvent
-			// around the resulting event
-			var newfp = function(evt){
-				if(!evt){ evt = window.event; }
-				var ret = fp(dojo.event.browser.fixEvent(evt, this));
-				if(capture){
-					dojo.event.browser.stopEvent(evt);
-				}
-				return ret;
-			}
-		}else{
-			newfp = fp;
-		}
-
-		if(node.addEventListener){ 
-			node.addEventListener(evtName.substr(2), newfp, capture);
-			return newfp;
-		}else{
-			if(typeof node[evtName] == "function" ){
-				var oldEvt = node[evtName];
-				node[evtName] = function(e){
-					oldEvt(e);
-					return newfp(e);
-				}
-			}else{
-				node[evtName]=newfp;
-			}
-			if(dojo.render.html.ie){
-				this.addClobberNodeAttrs(node, [evtName]);
-			}
-			return newfp;
-		}
-	}
-
-	this.isEvent = function(obj){
-		// FIXME: event detection hack ... could test for additional attributes
-		// if necessary
-		return (typeof obj != "undefined")&&(typeof Event != "undefined")&&(obj.eventPhase);
-		// Event does not support instanceof in Opera, otherwise:
-		//return (typeof Event != "undefined")&&(obj instanceof Event);
-	}
-
-	this.currentEvent = null;
-	
-	this.callListener = function(listener, curTarget){
-		if(typeof listener != 'function'){
-			dojo.raise("listener not a function: " + listener);
-		}
-		dojo.event.browser.currentEvent.currentTarget = curTarget;
-		return listener.call(curTarget, dojo.event.browser.currentEvent);
-	}
-
-	this.stopPropagation = function(){
-		dojo.event.browser.currentEvent.cancelBubble = true;
-	}
-
-	this.preventDefault = function(){
-	  dojo.event.browser.currentEvent.returnValue = false;
-	}
-
-	this.keys = {
-		KEY_BACKSPACE: 8,
-		KEY_TAB: 9,
-		KEY_ENTER: 13,
-		KEY_SHIFT: 16,
-		KEY_CTRL: 17,
-		KEY_ALT: 18,
-		KEY_PAUSE: 19,
-		KEY_CAPS_LOCK: 20,
-		KEY_ESCAPE: 27,
-		KEY_SPACE: 32,
-		KEY_PAGE_UP: 33,
-		KEY_PAGE_DOWN: 34,
-		KEY_END: 35,
-		KEY_HOME: 36,
-		KEY_LEFT_ARROW: 37,
-		KEY_UP_ARROW: 38,
-		KEY_RIGHT_ARROW: 39,
-		KEY_DOWN_ARROW: 40,
-		KEY_INSERT: 45,
-		KEY_DELETE: 46,
-		KEY_LEFT_WINDOW: 91,
-		KEY_RIGHT_WINDOW: 92,
-		KEY_SELECT: 93,
-		KEY_F1: 112,
-		KEY_F2: 113,
-		KEY_F3: 114,
-		KEY_F4: 115,
-		KEY_F5: 116,
-		KEY_F6: 117,
-		KEY_F7: 118,
-		KEY_F8: 119,
-		KEY_F9: 120,
-		KEY_F10: 121,
-		KEY_F11: 122,
-		KEY_F12: 123,
-		KEY_NUM_LOCK: 144,
-		KEY_SCROLL_LOCK: 145
-	};
-
-	// reverse lookup
-	this.revKeys = [];
-	for(var key in this.keys){
-		this.revKeys[this.keys[key]] = key;
-	}
-
-	this.fixEvent = function(evt, sender){
-		if((!evt)&&(window["event"])){
-			var evt = window.event;
-		}
-		
-		if((evt["type"])&&(evt["type"].indexOf("key") == 0)){ // key events
-			evt.keys = this.revKeys;
-			// FIXME: how can we eliminate this iteration?
-			for(var key in this.keys) {
-				evt[key] = this.keys[key];
-			}
-			if((dojo.render.html.ie)&&(evt["type"] == "keypress")){
-				evt.charCode = evt.keyCode;
-			}
-		}
-	
-		if(dojo.render.html.ie){
-			if(!evt.target){ evt.target = evt.srcElement; }
-			if(!evt.currentTarget){ evt.currentTarget = (sender ? sender : evt.srcElement); }
-			if(!evt.layerX){ evt.layerX = evt.offsetX; }
-			if(!evt.layerY){ evt.layerY = evt.offsetY; }
-			// FIXME: scroll position query is duped from dojo.html to avoid dependency on that entire module
-			var docBody = ((dojo.render.html.ie55)||(document["compatMode"] == "BackCompat")) ? document.body : document.documentElement;
-			if(!evt.pageX){ evt.pageX = evt.clientX + (docBody.scrollLeft || 0) }
-			if(!evt.pageY){ evt.pageY = evt.clientY + (docBody.scrollTop || 0) }
-			// mouseover
-			if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; }
-			// mouseout
-			if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; }
-			this.currentEvent = evt;
-			evt.callListener = this.callListener;
-			evt.stopPropagation = this.stopPropagation;
-			evt.preventDefault = this.preventDefault;
-		}
-		return evt;
-	}
-
-	this.stopEvent = function(ev) {
-		if(window.event){
-			ev.returnValue = false;
-			ev.cancelBubble = true;
-		}else{
-			ev.preventDefault();
-			ev.stopPropagation();
-		}
-	}
-}

+ 0 - 99
main/inc/lib/javascript/dojo/src/event/topic.js

@@ -1,99 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.require("dojo.event");
-dojo.provide("dojo.event.topic");
-
-dojo.event.topic = new function(){
-	this.topics = {};
-
-	this.getTopic = function(topicName){
-		if(!this.topics[topicName]){
-			this.topics[topicName] = new this.TopicImpl(topicName);
-		}
-		return this.topics[topicName];
-	}
-
-	this.registerPublisher = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.registerPublisher(obj, funcName);
-	}
-
-	this.subscribe = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.subscribe(obj, funcName);
-	}
-
-	this.unsubscribe = function(topic, obj, funcName){
-		var topic = this.getTopic(topic);
-		topic.unsubscribe(obj, funcName);
-	}
-
-	this.destroy = function(topic){
-		this.getTopic(topic).destroy();
-		delete this.topics[topic];
-	}
-
-	this.publishApply = function(topic, args){
-		var topic = this.getTopic(topic);
-		topic.sendMessage.apply(topic, args);
-	}
-
-	this.publish = function(topic, message){
-		var topic = this.getTopic(topic);
-		// if message is an array, we treat it as a set of arguments,
-		// otherwise, we just pass on the arguments passed in as-is
-		var args = [];
-		// could we use concat instead here?
-		for(var x=1; x<arguments.length; x++){
-			args.push(arguments[x]);
-		}
-		topic.sendMessage.apply(topic, args);
-	}
-}
-
-dojo.event.topic.TopicImpl = function(topicName){
-	this.topicName = topicName;
-
-	this.subscribe = function(listenerObject, listenerMethod){
-		var tf = listenerMethod||listenerObject;
-		var to = (!listenerMethod) ? dj_global : listenerObject;
-		dojo.event.kwConnect({
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this.unsubscribe = function(listenerObject, listenerMethod){
-		var tf = (!listenerMethod) ? listenerObject : listenerMethod;
-		var to = (!listenerMethod) ? null : listenerObject;
-		dojo.event.kwDisconnect({
-			srcObj:		this, 
-			srcFunc:	"sendMessage", 
-			adviceObj:	to,
-			adviceFunc: tf
-		});
-	}
-
-	this.destroy = function(){
-		dojo.event.MethodJoinPoint.getForMethod(this, "sendMessage").disconnect();
-	}
-
-	this.registerPublisher = function(publisherObject, publisherMethod){
-		dojo.event.connect(publisherObject, publisherMethod, this, "sendMessage");
-	}
-
-	this.sendMessage = function(message){
-		// The message has been propagated
-	}
-}
-

+ 0 - 21
main/inc/lib/javascript/dojo/src/experimental.js

@@ -1,21 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.experimental");
-
-/**
- * Convenience for informing of experimental code.
- */
-dojo.experimental = function(packageName, extra){
-	var mess = "EXPERIMENTAL: " + packageName;
-	mess += " -- Not yet ready for use.  APIs subject to change without notice.";
-	if(extra){ mess += " " + extra; }
-	dojo.debug(mess);
-}

+ 0 - 1244
main/inc/lib/javascript/dojo/src/flash.js

@@ -1,1244 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.flash");
-
-dojo.require("dojo.string.*");
-dojo.require("dojo.uri.*");
-
-
-/** 
-		The goal of dojo.flash is to make it easy to extend Flash's capabilities
-		into an AJAX/DHTML environment. Robust, performant, reliable 
-		JavaScript/Flash communication is harder than most realize when they
-		delve into the topic, especially if you want it
-		to work on Internet Explorer, Firefox, and Safari, and to be able to
-		push around hundreds of K of information quickly. Dojo.flash makes it
-		possible to support these platforms; you have to jump through a few
-		hoops to get its capabilites, but if you are a library writer 
-		who wants to bring Flash's storage or streaming sockets ability into
-		DHTML, for example, then dojo.flash is perfect for you.
-  
-		Dojo.flash provides an easy object for interacting with the Flash plugin. 
-		This object provides methods to determine the current version of the Flash
-		plugin (dojo.flash.info); execute Flash instance methods 
-		independent of the Flash version
-		being used (dojo.flash.comm); write out the necessary markup to 
-		dynamically insert a Flash object into the page (dojo.flash.Embed; and 
-		do dynamic installation and upgrading of the current Flash plugin in 
-		use (dojo.flash.Install).
-		
-		To use dojo.flash, you must first wait until Flash is finished loading 
-		and initializing before you attempt communication or interaction. 
-		To know when Flash is finished use dojo.event.connect:
-		
-		dojo.event.connect(dojo.flash, "loaded", myInstance, "myCallback");
-		
-		Then, while the page is still loading provide the file name
-		and the major version of Flash that will be used for Flash/JavaScript
-		communication (see "Flash Communication" below for information on the 
-		different kinds of Flash/JavaScript communication supported and how they 
-		depend on the version of Flash installed):
-		
-		dojo.flash.setSwf({flash6: "src/storage/storage_flash6.swf",
-											 flash8: "src/storage/storage_flash8.swf"});
-		
-		This will cause dojo.flash to pick the best way of communicating
-		between Flash and JavaScript based on the platform.
-		
-		If no SWF files are specified, then Flash is not initialized.
-		
-		Your Flash must use DojoExternalInterface to expose Flash methods and
-		to call JavaScript; see "Flash Communication" below for details.
-		
-		setSwf can take an optional 'visible' attribute to control whether
-		the Flash object is visible or not on the page; the default is visible:
-		
-		dojo.flash.setSwf({flash6: "src/storage/storage_flash6.swf",
-											 flash8: "src/storage/storage_flash8.swf",
-											 visible: false});
-		
-		Once finished, you can query Flash version information:
-		
-		dojo.flash.info.version
-		
-		Or can communicate with Flash methods that were exposed:
-		
-		var results = dojo.flash.comm.sayHello("Some Message");
-		
-		Only string values are currently supported for both arguments and
-		for return results. Everything will be cast to a string on both
-		the JavaScript and Flash sides.
-		
-		-------------------
-		Flash Communication
-		-------------------
-		
-		dojo.flash allows Flash/JavaScript communication in 
-		a way that can pass large amounts of data back and forth reliably and
-		very fast. The dojo.flash
-		framework encapsulates the specific way in which this communication occurs,
-		presenting a common interface to JavaScript irrespective of the underlying
-		Flash version.
-		
-		There are currently three major ways to do Flash/JavaScript communication
-		in the Flash community:
-		
-		1) Flash 6+ - Uses Flash methods, such as SetVariable and TCallLabel,
-		and the fscommand handler to do communication. Strengths: Very fast,
-		mature, and can send extremely large amounts of data; can do
-		synchronous method calls. Problems: Does not work on Safari; works on 
-		Firefox/Mac OS X only if Flash 8 plugin is installed; cryptic to work with.
-		
-		2) Flash 8+ - Uses ExternalInterface, which provides a way for Flash
-		methods to register themselves for callbacks from JavaScript, and a way
-		for Flash to call JavaScript. Strengths: Works on Safari; elegant to
-		work with; can do synchronous method calls. Problems: Extremely buggy 
-		(fails if there are new lines in the data, for example); performance
-		degrades drastically in O(n^2) time as data grows; locks up the browser while
-		it is communicating; does not work in Internet Explorer if Flash
-		object is dynamically added to page with document.writeln, DOM methods,
-		or innerHTML.
-		
-		3) Flash 6+ - Uses two seperate Flash applets, one that we 
-		create over and over, passing input data into it using the PARAM tag, 
-		which then uses a Flash LocalConnection to pass the data to the main Flash
-		applet; communication back to Flash is accomplished using a getURL
-		call with a javascript protocol handler, such as "javascript:myMethod()".
-		Strengths: the most cross browser, cross platform pre-Flash 8 method
-		of Flash communication known; works on Safari. Problems: Timing issues;
-		clunky and complicated; slow; can only send very small amounts of
-		data (several K); all method calls are asynchronous.
-		
-		dojo.flash.comm uses only the first two methods. This framework
-		was created primarily for dojo.storage, which needs to pass very large
-		amounts of data synchronously and reliably across the Flash/JavaScript
-		boundary. We use the first method, the Flash 6 method, on all platforms
-		that support it, while using the Flash 8 ExternalInterface method
-		only on Safari with some special code to help correct ExternalInterface's
-		bugs.
-		
-		Since dojo.flash needs to have two versions of the Flash
-		file it wants to generate, a Flash 6 and a Flash 8 version to gain
-		true cross-browser compatibility, several tools are provided to ease
-		development on the Flash side.
-		
-		In your Flash file, if you want to expose Flash methods that can be
-		called, use the DojoExternalInterface class to register methods. This
-		class is an exact API clone of the standard ExternalInterface class, but
-		can work in Flash 6+ browsers. Under the covers it uses the best
-		mechanism to do communication:
-		
-		class HelloWorld{
-			function HelloWorld(){
-				// Initialize the DojoExternalInterface class
-				DojoExternalInterface.initialize();
-				
-				// Expose your methods
-				DojoExternalInterface.addCallback("sayHello", this, this.sayHello);
-				
-				// Tell JavaScript that you are ready to have method calls
-				DojoExternalInterface.loaded();
-				
-				// Call some JavaScript
-				var resultsReady = function(results){
-					trace("Received the following results from JavaScript: " + results);
-				}
-				DojoExternalInterface.call("someJavaScriptMethod", resultsReady, 
-																	 someParameter);
-			}
-			
-			function sayHello(){ ... }
-			
-			static main(){ ... }
-		}
-		
-		DojoExternalInterface adds two new functions to the ExternalInterface
-		API: initialize() and loaded(). initialize() must be called before
-		any addCallback() or call() methods are run, and loaded() must be
-		called after you are finished adding your callbacks. Calling loaded()
-		will fire the dojo.flash.loaded() event, so that JavaScript can know that
-		Flash has finished loading and adding its callbacks, and can begin to
-		interact with the Flash file.
-		
-		To generate your SWF files, use the ant task
-		"buildFlash". You must have the open source Motion Twin ActionScript 
-		compiler (mtasc) installed and in your path to use the "buildFlash"
-		ant task; download and install mtasc from http://www.mtasc.org/.
-		
-		
-		
-		buildFlash usage:
-		
-		ant buildFlash -Ddojo.flash.file=../tests/flash/HelloWorld.as
-		
-		where "dojo.flash.file" is the relative path to your Flash 
-		ActionScript file.
-		
-		This will generate two SWF files, one ending in _flash6.swf and the other
-		ending in _flash8.swf in the same directory as your ActionScript method:
-		
-		HelloWorld_flash6.swf
-		HelloWorld_flash8.swf
-		
-		Initialize dojo.flash with the filename and Flash communication version to
-		use during page load; see the documentation for dojo.flash for details:
-		
-		dojo.flash.setSwf({flash6: "tests/flash/HelloWorld_flash6.swf",
-											 flash8: "tests/flash/HelloWorld_flash8.swf"});
-		
-		Now, your Flash methods can be called from JavaScript as if they are native
-		Flash methods, mirrored exactly on the JavaScript side:
-		
-		dojo.flash.comm.sayHello();
-		
-		Only Strings are supported being passed back and forth currently.
-		
-		JavaScript to Flash communication is synchronous; i.e., results are returned
-		directly from the method call:
-		
-		var results = dojo.flash.comm.sayHello();
-		
-		Flash to JavaScript communication is asynchronous due to limitations in
-		the underlying technologies; you must use a results callback to handle
-		results returned by JavaScript in your Flash AS files:
-		
-		var resultsReady = function(results){
-			trace("Received the following results from JavaScript: " + results);
-		}
-		DojoExternalInterface.call("someJavaScriptMethod", resultsReady);
-		
-		
-		
-		-------------------
-		Notes
-		-------------------
-		
-		If you have both Flash 6 and Flash 8 versions of your file:
-		
-		dojo.flash.setSwf({flash6: "tests/flash/HelloWorld_flash6.swf",
-											 flash8: "tests/flash/HelloWorld_flash8.swf"});
-											 
-		but want to force the browser to use a certain version of Flash for
-		all platforms (for testing, for example), use the djConfig
-		variable 'forceFlashComm' with the version number to force:
-		
-		var djConfig = { forceFlashComm: 6 };
-		
-		Two values are currently supported, 6 and 8, for the two styles of
-		communication described above. Just because you force dojo.flash
-		to use a particular communication style is no guarantee that it will
-		work; for example, Flash 8 communication doesn't work in Internet
-		Explorer due to bugs in Flash, and Flash 6 communication does not work
-		in Safari. It is best to let dojo.flash determine the best communication
-		mechanism, and to use the value above only for debugging the dojo.flash
-		framework itself.
-		
-		Also note that dojo.flash can currently only work with one Flash object
-		on the page; it and the API do not yet support multiple Flash objects on
-		the same page.
-		
-		We use some special tricks to get decent, linear performance
-		out of Flash 8's ExternalInterface on Safari; see the blog
-		post 
-		http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html
-		for details.
-		
-		Your code can detect whether the Flash player is installing or having
-		its version revved in two ways. First, if dojo.flash detects that
-		Flash installation needs to occur, it sets dojo.flash.info.installing
-		to true. Second, you can detect if installation is necessary with the
-		following callback:
-		
-		dojo.event.connect(dojo.flash, "installing", myInstance, "myCallback");
-		
-		You can use this callback to delay further actions that might need Flash;
-		when installation is finished the full page will be refreshed and the
-		user will be placed back on your page with Flash installed.
-		
-		Two utility methods exist if you want to add loading and installing
-		listeners without creating dependencies on dojo.event; these are
-		'addLoadingListener' and 'addInstallingListener'.
-		
-		-------------------
-		Todo/Known Issues
-		-------------------
-
-		There are several tasks I was not able to do, or did not need to fix
-		to get dojo.storage out:		
-		
-		* When using Flash 8 communication, Flash method calls to JavaScript
-		are not working properly; serialization might also be broken for certain
-		invalid characters when it is Flash invoking JavaScript methods.
-		The Flash side needs to have more sophisticated serialization/
-		deserialization mechanisms like JavaScript currently has. The
-		test_flash2.html unit tests should also be updated to have much more
-		sophisticated Flash to JavaScript unit tests, including large
-		amounts of data.
-		
-		* On Internet Explorer, after doing a basic install, the page is
-		not refreshed or does not detect that Flash is now available. The way
-		to fix this is to create a custom small Flash file that is pointed to
-		during installation; when it is finished loading, it does a callback
-		that says that Flash installation is complete on IE, and we can proceed
-		to initialize the dojo.flash subsystem.
-		
-		@author Brad Neuberg, bkn3@columbia.edu
-*/
-
-dojo.flash = {
-	flash6_version: null,
-	flash8_version: null,
-	ready: false,
-	_visible: true,
-	_loadedListeners: new Array(),
-	_installingListeners: new Array(),
-	
-	/** Sets the SWF files and versions we are using. */
-	setSwf: function(fileInfo){
-		//dojo.debug("setSwf");
-		if(fileInfo == null || dojo.lang.isUndefined(fileInfo)){
-			return;
-		}
-		
-		if(fileInfo.flash6 != null && !dojo.lang.isUndefined(fileInfo.flash6)){
-			this.flash6_version = fileInfo.flash6;
-		}
-		
-		if(fileInfo.flash8 != null && !dojo.lang.isUndefined(fileInfo.flash8)){
-			this.flash8_version = fileInfo.flash8;
-		}
-		
-		if(!dojo.lang.isUndefined(fileInfo.visible)){
-			this._visible = fileInfo.visible;
-		}
-		
-		// initialize ourselves		
-		this._initialize();
-	},
-	
-	/** Returns whether we are using Flash 6 for communication on this platform. */
-	useFlash6: function(){
-		if(this.flash6_version == null){
-			return false;
-		}else if (this.flash6_version != null && dojo.flash.info.commVersion == 6){
-			// if we have a flash 6 version of this SWF, and this browser supports 
-			// communicating using Flash 6 features...
-			return true;
-		}else{
-			return false;
-		}
-	},
-	
-	/** Returns whether we are using Flash 8 for communication on this platform. */
-	useFlash8: function(){
-		if(this.flash8_version == null){
-			return false;
-		}else if (this.flash8_version != null && dojo.flash.info.commVersion == 8){
-			// if we have a flash 8 version of this SWF, and this browser supports
-			// communicating using Flash 8 features...
-			return true;
-		}else{
-			return false;
-		}
-	},
-	
-	/** Adds a listener to know when Flash is finished loading. 
-			Useful if you don't want a dependency on dojo.event. */
-	addLoadedListener: function(listener){
-		this._loadedListeners.push(listener);
-	},
-
-	/** Adds a listener to know if Flash is being installed. 
-			Useful if you don't want a dependency on dojo.event. */
-	addInstallingListener: function(listener){
-		this._installingListeners.push(listener);
-	},	
-	
-	/** 
-			A callback when the Flash subsystem is finished loading and can be
-			worked with. To be notified when Flash is finished loading, connect
-			your callback to this method using the following:
-			
-			dojo.event.connect(dojo.flash, "loaded", myInstance, "myCallback");
-	*/
-	loaded: function(){
-		//dojo.debug("dojo.flash.loaded");
-		dojo.flash.ready = true;
-		if(dojo.flash._loadedListeners.length > 0){
-			for(var i = 0;i < dojo.flash._loadedListeners.length; i++){
-				dojo.flash._loadedListeners[i].call(null);
-			}
-		}
-	},
-	
-	/** 
-			A callback to know if Flash is currently being installed or
-			having its version revved. To be notified if Flash is installing, connect
-			your callback to this method using the following:
-			
-			dojo.event.connect(dojo.flash, "installing", myInstance, "myCallback");
-	*/
-	installing: function(){
-	 //dojo.debug("installing");
-	 if(dojo.flash._installingListeners.length > 0){
-			for(var i = 0; i < dojo.flash._installingListeners.length; i++){
-				dojo.flash._installingListeners[i].call(null);
-			}
-		}
-	},
-	
-	/** Initializes dojo.flash. */
-	_initialize: function(){
-		//dojo.debug("dojo.flash._initialize");
-		// see if we need to rev or install Flash on this platform
-		var installer = new dojo.flash.Install();
-		dojo.flash.installer = installer;
-
-		if(installer.needed() == true){		
-			installer.install();
-		}else{
-			//dojo.debug("Writing object out");
-			// write the flash object into the page
-			dojo.flash.obj = new dojo.flash.Embed(this._visible);
-			dojo.flash.obj.write(dojo.flash.info.commVersion);
-			
-			// initialize the way we do Flash/JavaScript communication
-			dojo.flash.comm = new dojo.flash.Communicator();
-		}
-	}
-};
-
-
-/** 
-		A class that helps us determine whether Flash is available,
-		it's major and minor versions, and what Flash version features should
-		be used for Flash/JavaScript communication. Parts of this code
-		are adapted from the automatic Flash plugin detection code autogenerated 
-		by the Macromedia Flash 8 authoring environment. 
-		
-		An instance of this class can be accessed on dojo.flash.info after
-		the page is finished loading.
-		
-		This constructor must be called before the page is finished loading. 
-*/
-dojo.flash.Info = function(){
-	// Visual basic helper required to detect Flash Player ActiveX control 
-	// version information on Internet Explorer
-	if(dojo.render.html.ie){
-		document.writeln('<script language="VBScript" type="text/vbscript"\>');
-		document.writeln('Function VBGetSwfVer(i)');
-		document.writeln('  on error resume next');
-		document.writeln('  Dim swControl, swVersion');
-		document.writeln('  swVersion = 0');
-		document.writeln('  set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i))');
-		document.writeln('  if (IsObject(swControl)) then');
-		document.writeln('    swVersion = swControl.GetVariable("$version")');
-		document.writeln('  end if');
-		document.writeln('  VBGetSwfVer = swVersion');
-		document.writeln('End Function');
-		document.writeln('</script\>');
-	}
-	
-	this._detectVersion();
-	this._detectCommunicationVersion();
-}
-
-dojo.flash.Info.prototype = {
-	/** The full version string, such as "8r22". */
-	version: -1,
-	
-	/** 
-			The major, minor, and revisions of the plugin. For example, if the
-			plugin is 8r22, then the major version is 8, the minor version is 0,
-			and the revision is 22. 
-	*/
-	versionMajor: -1,
-	versionMinor: -1,
-	versionRevision: -1,
-	
-	/** Whether this platform has Flash already installed. */
-	capable: false,
-	
-	/** 
-			The major version number for how our Flash and JavaScript communicate.
-			This can currently be the following values:
-			6 - We use a combination of the Flash plugin methods, such as SetVariable
-			and TCallLabel, along with fscommands, to do communication.
-			8 - We use the ExternalInterface API. 
-			-1 - For some reason neither method is supported, and no communication
-			is possible. 
-	*/
-	commVersion: 6,
-	
-	/** Set if we are in the middle of a Flash installation session. */
-	installing: false,
-	
-	/** 
-			Asserts that this environment has the given major, minor, and revision
-			numbers for the Flash player. Returns true if the player is equal
-			or above the given version, false otherwise.
-			
-			Example: To test for Flash Player 7r14:
-			
-			dojo.flash.info.isVersionOrAbove(7, 0, 14)
-	*/
-	isVersionOrAbove: function(reqMajorVer, reqMinorVer, reqVer){
-		// make the revision a decimal (i.e. transform revision 14 into
-		// 0.14
-		reqVer = parseFloat("." + reqVer);
-		
-		if(this.versionMajor >= reqMajorVer && this.versionMinor >= reqMinorVer
-			 && this.versionRevision >= reqVer){
-			return true;
-		}else{
-			return false;
-		}
-	},
-	
-	_detectVersion: function(){
-		var versionStr;
-		
-		// loop backwards through the versions until we find the newest version	
-		for(var testVersion = 25; testVersion > 0; testVersion--){
-			if(dojo.render.html.ie){
-				versionStr = VBGetSwfVer(testVersion);
-			}else{
-				versionStr = this._JSFlashInfo(testVersion);		
-			}
-				
-			if(versionStr == -1 ){
-				this.capable = false; 
-				return;
-			}else if(versionStr != 0){
-				var versionArray;
-				if(dojo.render.html.ie){
-					var tempArray = versionStr.split(" ");
-					var tempString = tempArray[1];
-					versionArray = tempString.split(",");
-				}else{
-					versionArray = versionStr.split(".");
-				}
-					
-				this.versionMajor = versionArray[0];
-				this.versionMinor = versionArray[1];
-				this.versionRevision = versionArray[2];
-				
-				// 7.0r24 == 7.24
-				var versionString = this.versionMajor + "." + this.versionRevision;
-				this.version = parseFloat(versionString);
-				
-				this.capable = true;
-				
-				break;
-			}
-		}
-	},
-	
-	/** 
-			JavaScript helper required to detect Flash Player PlugIn version 
-			information. Internet Explorer uses a corresponding Visual Basic
-			version to interact with the Flash ActiveX control. 
-	*/
-	_JSFlashInfo: function(testVersion){
-		// NS/Opera version >= 3 check for Flash plugin in plugin array
-		if(navigator.plugins != null && navigator.plugins.length > 0){
-			if(navigator.plugins["Shockwave Flash 2.0"] || 
-				 navigator.plugins["Shockwave Flash"]){
-				var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
-				var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
-				var descArray = flashDescription.split(" ");
-				var tempArrayMajor = descArray[2].split(".");
-				var versionMajor = tempArrayMajor[0];
-				var versionMinor = tempArrayMajor[1];
-				if(descArray[3] != ""){
-					var tempArrayMinor = descArray[3].split("r");
-				}else{
-					var tempArrayMinor = descArray[4].split("r");
-				}
-				var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
-				var version = versionMajor + "." + versionMinor + "." 
-											+ versionRevision;
-											
-				return version;
-			}
-		}
-		
-		return -1;
-	},
-	
-	/** 
-			Detects the mechanisms that should be used for Flash/JavaScript 
-			communication, setting 'commVersion' to either 6 or 8. If the value is
-			6, we use Flash Plugin 6+ features, such as GetVariable, TCallLabel,
-			and fscommand, to do Flash/JavaScript communication; if the value is
-			8, we use the ExternalInterface API for communication. 
-	*/
-	_detectCommunicationVersion: function(){
-		if(this.capable == false){
-			this.commVersion = null;
-			return;
-		}
-		
-		// detect if the user has over-ridden the default flash version
-		if (typeof djConfig["forceFlashComm"] != "undefined" &&
-				typeof djConfig["forceFlashComm"] != null){
-			this.commVersion = djConfig["forceFlashComm"];
-			return;
-		}
-		
-		// we prefer Flash 6 features over Flash 8, because they are much faster
-		// and much less buggy
-		
-		// at this point, we don't have a flash file to detect features on,
-		// so we need to instead look at the browser environment we are in
-		if(dojo.render.html.safari == true || dojo.render.html.opera == true){
-			this.commVersion = 8;
-		}else{
-			this.commVersion = 6;
-		}
-	}
-};
-
-/** A class that is used to write out the Flash object into the page. */
-dojo.flash.Embed = function(visible){
-	this._visible = visible;
-}
-
-dojo.flash.Embed.prototype = {
-	/** 
-			The width of this Flash applet. The default is the minimal width
-			necessary to show the Flash settings dialog. 
-	*/
-	width: 215,
-	
-	/** 
-			The height of this Flash applet. The default is the minimal height
-			necessary to show the Flash settings dialog. 
-	*/
-	height: 138,
-	
-	/** The id of the Flash object. */
-	id: "flashObject",
-	
-	/** Controls whether this is a visible Flash applet or not. */
-	_visible: true,
-			
-	/** 
-			Writes the Flash into the page. This must be called before the page
-			is finished loading. 
-			@param flashVer The Flash version to write.
-			@param doExpressInstall Whether to write out Express Install
-			information. Optional value; defaults to false.
-	*/
-	write: function(flashVer, doExpressInstall){
-		//dojo.debug("write");
-		if(dojo.lang.isUndefined(doExpressInstall)){
-			doExpressInstall = false;
-		}
-		
-		// determine our container div's styling
-		var containerStyle = new dojo.string.Builder();
-		containerStyle.append("width: " + this.width + "px; ");
-		containerStyle.append("height: " + this.height + "px; ");
-		if(this._visible == false){
-			containerStyle.append("position: absolute; ");
-			containerStyle.append("z-index: 10000; ");
-			containerStyle.append("top: -1000px; ");
-			containerStyle.append("left: -1000px; ");
-		}
-		containerStyle = containerStyle.toString();
-
-		// figure out the SWF file to get and how to write out the correct HTML
-		// for this Flash version
-		var objectHTML;
-		var swfloc;
-		// Flash 6
-		if(flashVer == 6){
-			swfloc = dojo.flash.flash6_version;
-			var dojoPath = djConfig.baseRelativePath;
-			swfloc = swfloc + "?baseRelativePath=" + escape(dojoPath);
-			
-			objectHTML = 
-						  '<embed id="' + this.id + '" src="' + swfloc + '" '
-						+ '    quality="high" bgcolor="#ffffff" '
-						+ '    width="' + this.width + '" height="' + this.height + '" '
-						+ '    name="' + this.id + '" '
-						+ '    align="middle" allowScriptAccess="sameDomain" '
-						+ '    type="application/x-shockwave-flash" swLiveConnect="true" '
-						+ '    pluginspage="http://www.macromedia.com/go/getflashplayer">';
-		}else{ // Flash 8
-			swfloc = dojo.flash.flash8_version;
-			var swflocObject = swfloc;
-			var swflocEmbed = swfloc;
-			var dojoPath = djConfig.baseRelativePath;
-			if(doExpressInstall){
-				// the location to redirect to after installing
-				var redirectURL = escape(window.location);
-				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
-				var docTitle = escape(document.title);
-				swflocObject += "?MMredirectURL=" + redirectURL
-				                + "&MMplayerType=ActiveX"
-				                + "&MMdoctitle=" + docTitle
-								+ "&baseRelativePath=" + escape(dojoPath);
-				swflocEmbed += "?MMredirectURL=" + redirectURL 
-								+ "&MMplayerType=PlugIn"
-								+ "&baseRelativePath=" + escape(dojoPath);
-			}
-			
-			objectHTML =
-				'<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
-				  + 'codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" '
-				  + 'width="' + this.width + '" '
-				  + 'height="' + this.height + '" '
-				  + 'id="' + this.id + '" '
-				  + 'align="middle"> '
-				  + '<param name="allowScriptAccess" value="sameDomain" /> '
-				  + '<param name="movie" value="' + swflocObject + '" /> '
-				  + '<param name="quality" value="high" /> '
-				  + '<param name="bgcolor" value="#ffffff" /> '
-				  + '<embed src="' + swflocEmbed + '" '
-				  + 'quality="high" '
-				  + 'bgcolor="#ffffff" '
-				  + 'width="' + this.width + '" '
-				  + 'height="' + this.height + '" '
-				  + 'id="' + this.id + '" '
-				  + 'name="' + this.id + '" '
-				  + 'swLiveConnect="true" '
-				  + 'align="middle" '
-				  + 'allowScriptAccess="sameDomain" '
-				  + 'type="application/x-shockwave-flash" '+ "&baseRelativePath=" + escape(dojoPath);
-				  + 'pluginspage="http://www.macromedia.com/go/getflashplayer" />'
-				+ '</object>';
-		}
-
-		// now write everything out
-		objectHTML = '<div id="' + this.id + 'Container" style="' + containerStyle + '"> '
-						+ objectHTML
-					 + '</div>';
-		document.writeln(objectHTML);
-	},  
-	
-	/** Gets the Flash object DOM node. */
-	get: function(){
-		//return (dojo.render.html.ie) ? window[this.id] : document[this.id];
-		
-		// more robust way to get Flash object; version above can break
-		// communication on IE sometimes
-		return document.getElementById(this.id);
-	},
-	
-	/** Sets the visibility of this Flash object. */
-	setVisible: function(visible){
-		var container = dojo.byId(this.id + "Container");
-		if(visible == true){
-			container.style.visibility = "visible";
-		}else{
-			container.style.position = "absolute";
-			container.style.x = "-1000px";
-			container.style.y = "-1000px";
-			container.style.visibility = "hidden";
-		}
-	},
-	
-	/** Centers the flash applet on the page. */
-	center: function(){
-		// FIXME: replace this with Dojo's centering code rather than our own
-		// We want to center the Flash applet vertically and horizontally
-		var elementWidth = this.width;
-		var elementHeight = this.height;
-    
-		// get the browser width and height; the code below
-		// works in IE and Firefox in compatibility, non-strict
-		// mode
-		var browserWidth = document.body.clientWidth;
-		var browserHeight = document.body.clientHeight;
-    
-		// in Firefox if we are in standards compliant mode
-		// (with a strict doctype), then the browser width
-		// and height have to be computed from the root level
-		// HTML element not the BODY element
-		if(!dojo.render.html.ie && document.compatMode == "CSS1Compat"){
-			browserWidth = document.body.parentNode.clientWidth;
-			browserHeight = document.body.parentNode.clientHeight;
-		}else if(dojo.render.html.ie && document.compatMode == "CSS1Compat"){
-			// IE 6 in standards compliant mode has to be calculated
-			// differently
-			browserWidth = document.documentElement.clientWidth;
-			browserHeight = document.documentElement.clientHeight;
-		}else if(dojo.render.html.safari){ // Safari works different
-			browserHeight = self.innerHeight;
-		}
-    
-		// get where we are scrolled to in the document
-		// the code below works in FireFox
-		var scrolledByWidth = window.scrollX;
-		var scrolledByHeight = window.scrollY;
-		// compute these values differently for IE;
-		// IE has two possibilities; it is either in standards
-		// compatibility mode or it is not
-		if(typeof scrolledByWidth == "undefined"){
-			if(document.compatMode == "CSS1Compat"){ // standards mode
-				scrolledByWidth = document.documentElement.scrollLeft;
-				scrolledByHeight = document.documentElement.scrollTop;
-			}else{ // Pre IE6 non-standards mode
-				scrolledByWidth = document.body.scrollLeft;
-				scrolledByHeight = document.body.scrollTop;
-			}
-		}
-
-		// compute the centered position    
-		var x = scrolledByWidth + (browserWidth - elementWidth) / 2;
-		var y = scrolledByHeight + (browserHeight - elementHeight) / 2; 
-
-		// set the centered position
-		var container = dojo.byId(this.id + "Container");
-		container.style.top = y + "px";
-		container.style.left = x + "px";
-	}
-};
-
-
-/** 
-		A class that is used to communicate between Flash and JavaScript in 
-		a way that can pass large amounts of data back and forth reliably,
-		very fast, and with synchronous method calls. This class encapsulates the 
-		specific way in which this communication occurs,
-		presenting a common interface to JavaScript irrespective of the underlying
-		Flash version.
-*/
-dojo.flash.Communicator = function(){
-	if(dojo.flash.useFlash6()){
-		this._writeFlash6();
-	}else if (dojo.flash.useFlash8()){
-		this._writeFlash8();
-	}
-}
-
-dojo.flash.Communicator.prototype = {
-	_writeFlash6: function(){
-		var id = dojo.flash.obj.id;
-		
-		// global function needed for Flash 6 callback;
-		// we write it out as a script tag because the VBScript hook for IE
-		// callbacks does not work properly if this function is evalled() from
-		// within the Dojo system
-		document.writeln('<script language="JavaScript">');
-		document.writeln('  function ' + id + '_DoFSCommand(command, args){ ');
-		document.writeln('    dojo.flash.comm._handleFSCommand(command, args); ');
-		document.writeln('}');
-		document.writeln('</script>');
-		
-		// hook for Internet Explorer to receive FSCommands from Flash
-		if(dojo.render.html.ie){
-			document.writeln('<SCRIPT LANGUAGE=VBScript\> ');
-			document.writeln('on error resume next ');
-			document.writeln('Sub ' + id + '_FSCommand(ByVal command, ByVal args)');
-			document.writeln(' call ' + id + '_DoFSCommand(command, args)');
-			document.writeln('end sub');
-			document.writeln('</SCRIPT\> ');
-		}
-	},
-	
-	_writeFlash8: function(){
-		// nothing needs to be written out for Flash 8 communication; 
-		// happens automatically
-	},
-	
-	/** Flash 6 communication. */
-	
-	/** Handles fscommand's from Flash to JavaScript. Flash 6 communication. */
-	_handleFSCommand: function(command, args){
-		//dojo.debug("fscommand, command="+command+", args="+args);
-		// Flash 8 on Mac/Firefox precedes all commands with the string "FSCommand:";
-		// strip it off if it is present
-		if(command != null && !dojo.lang.isUndefined(command)
-			&& /^FSCommand:(.*)/.test(command) == true){
-			command = command.match(/^FSCommand:(.*)/)[1];
-		}
-		 
-		if(command == "addCallback"){ // add Flash method for JavaScript callback
-			this._fscommandAddCallback(command, args);
-		}else if(command == "call"){ // Flash to JavaScript method call
-			this._fscommandCall(command, args);
-		}else if(command == "fscommandReady"){ // see if fscommands are ready
-			this._fscommandReady();
-		}
-	},
-	
-	/** Handles registering a callable Flash function. Flash 6 communication. */
-	_fscommandAddCallback: function(command, args){
-		var functionName = args;
-			
-		// do a trick, where we link this function name to our wrapper
-		// function, _call, that does the actual JavaScript to Flash call
-		var callFunc = function(){
-			return dojo.flash.comm._call(functionName, arguments);
-		};			
-		dojo.flash.comm[functionName] = callFunc;
-		
-		// indicate that the call was successful
-		dojo.flash.obj.get().SetVariable("_succeeded", true);
-	},
-	
-	/** Handles Flash calling a JavaScript function. Flash 6 communication. */
-	_fscommandCall: function(command, args){
-		var plugin = dojo.flash.obj.get();
-		var functionName = args;
-		
-		// get the number of arguments to this method call and build them up
-		var numArgs = parseInt(plugin.GetVariable("_numArgs"));
-		var flashArgs = new Array();
-		for(var i = 0; i < numArgs; i++){
-			var currentArg = plugin.GetVariable("_" + i);
-			flashArgs.push(currentArg);
-		}
-		
-		// get the function instance; we technically support more capabilities
-		// than ExternalInterface, which can only call global functions; if
-		// the method name has a dot in it, such as "dojo.flash.loaded", we
-		// eval it so that the method gets run against an instance
-		var runMe;
-		if(functionName.indexOf(".") == -1){ // global function
-			runMe = window[functionName];
-		}else{
-			// instance function
-			runMe = eval(functionName);
-		}
-		
-		// make the call and get the results
-		var results = null;
-		if(!dojo.lang.isUndefined(runMe) && runMe != null){
-			results = runMe.apply(null, flashArgs);
-		}
-		
-		// return the results to flash
-		plugin.SetVariable("_returnResult", results);
-	},
-	
-	/** Reports that fscommands are ready to run if executed from Flash. */
-	_fscommandReady: function(){
-		var plugin = dojo.flash.obj.get();
-		plugin.SetVariable("fscommandReady", "true");
-	},
-	
-	/** 
-			The actual function that will execute a JavaScript to Flash call; used
-			by the Flash 6 communication method. 
-	*/
-	_call: function(functionName, args){
-		// we do JavaScript to Flash method calls by setting a Flash variable
-		// "_functionName" with the function name; "_numArgs" with the number
-		// of arguments; and "_0", "_1", etc for each numbered argument. Flash
-		// reads these, executes the function call, and returns the result
-		// in "_returnResult"
-		var plugin = dojo.flash.obj.get();
-		plugin.SetVariable("_functionName", functionName);
-		plugin.SetVariable("_numArgs", args.length);
-		for(var i = 0; i < args.length; i++){
-			// unlike Flash 8's ExternalInterface, Flash 6 has no problem with
-			// any special characters _except_ for the null character \0; double
-			// encode this so the Flash side never sees it, but we can get it 
-			// back if the value comes back to JavaScript
-			var value = args[i];
-			value = value.replace(/\0/g, "\\0");
-			
-			plugin.SetVariable("_" + i, value);
-		}
-		
-		// now tell Flash to execute this method using the Flash Runner
-		plugin.TCallLabel("/_flashRunner", "execute");
-		
-		// get the results
-		var results = plugin.GetVariable("_returnResult");
-		
-		// we double encoded all null characters as //0 because Flash breaks
-		// if they are present; turn the //0 back into /0
-		results = results.replace(/\\0/g, "\0");
-		
-		return results;
-	},
-	
-	/** Flash 8 communication. */
-	
-	/** 
-			Registers the existence of a Flash method that we can call with
-			JavaScript, using Flash 8's ExternalInterface. 
-	*/
-	_addExternalInterfaceCallback: function(methodName){
-		var wrapperCall = function(){
-			// some browsers don't like us changing values in the 'arguments' array, so
-			// make a fresh copy of it
-			var methodArgs = new Array(arguments.length);
-			for(var i = 0; i < arguments.length; i++){
-				methodArgs[i] = arguments[i];
-			}
-			return dojo.flash.comm._execFlash(methodName, methodArgs);
-		};
-		
-		dojo.flash.comm[methodName] = wrapperCall;
-	},
-	
-	/** 
-			Encodes our data to get around ExternalInterface bugs.
-			Flash 8 communication.
-	*/
-	_encodeData: function(data){
-		// double encode all entity values, or they will be mis-decoded
-		// by Flash when returned
-		var entityRE = /\&([^;]*)\;/g;
-		data = data.replace(entityRE, "&amp;$1;");
-		
-		// entity encode XML-ish characters, or Flash's broken XML serializer
-		// breaks
-		data = data.replace(/</g, "&lt;");
-		data = data.replace(/>/g, "&gt;");
-		
-		// transforming \ into \\ doesn't work; just use a custom encoding
-		data = data.replace("\\", "&custom_backslash;&custom_backslash;");
-		
-		data = data.replace(/\n/g, "\\n");
-		data = data.replace(/\r/g, "\\r");
-		data = data.replace(/\f/g, "\\f");
-		data = data.replace(/\0/g, "\\0"); // null character
-		data = data.replace(/\'/g, "\\\'");
-		data = data.replace(/\"/g, '\\\"');
-		
-		return data;
-	},
-	
-	/** 
-			Decodes our data to get around ExternalInterface bugs.
-			Flash 8 communication.
-	*/
-	_decodeData: function(data){
-		if(data == null || typeof data == "undefined"){
-			return data;
-		}
-		
-		// certain XMLish characters break Flash's wire serialization for
-		// ExternalInterface; these are encoded on the 
-		// DojoExternalInterface side into a custom encoding, rather than
-		// the standard entity encoding, because otherwise we won't be able to
-		// differentiate between our own encoding and any entity characters
-		// that are being used in the string itself
-		data = data.replace(/\&custom_lt\;/g, "<");
-		data = data.replace(/\&custom_gt\;/g, ">");
-		
-		// Unfortunately, Flash returns us our String with special characters
-		// like newlines broken into seperate characters. So if \n represents
-		// a new line, Flash returns it as "\" and "n". This means the character
-		// is _not_ a newline. This forces us to eval() the string to cause
-		// escaped characters to turn into their real special character values.
-		data = eval('"' + data + '"');
-		
-		return data;
-	},
-	
-	/** 
-			Sends our method arguments over to Flash in chunks in order to
-			have ExternalInterface's performance not be O(n^2).
-			Flash 8 communication.
-	*/
-	_chunkArgumentData: function(value, argIndex){
-		var plugin = dojo.flash.obj.get();
-		
-		// cut up the string into pieces, and push over each piece one
-		// at a time
-		var numSegments = Math.ceil(value.length / 1024);
-		for(var i = 0; i < numSegments; i++){
-			var startCut = i * 1024;
-			var endCut = i * 1024 + 1024;
-			if(i == (numSegments - 1)){
-				endCut = i * 1024 + value.length;
-			}
-			
-			var piece = value.substring(startCut, endCut);
-			
-			// encode each piece seperately, rather than the entire
-			// argument data, because ocassionally a special 
-			// character, such as an entity like &foobar;, will fall between
-			// piece boundaries, and we _don't_ want to encode that value if
-			// it falls between boundaries, or else we will end up with incorrect
-			// data when we patch the pieces back together on the other side
-			piece = this._encodeData(piece);
-			
-			// directly use the underlying CallFunction method used by
-			// ExternalInterface, which is vastly faster for large strings
-			// and lets us bypass some Flash serialization bugs
-			plugin.CallFunction('<invoke name="chunkArgumentData" '
-														+ 'returntype="javascript">'
-														+ '<arguments>'
-														+ '<string>' + piece + '</string>'
-														+ '<number>' + argIndex + '</number>'
-														+ '</arguments>'
-														+ '</invoke>');
-		}
-	},
-	
-	/** 
-			Gets our method return data in chunks for better performance.
-			Flash 8 communication.
-	*/
-	_chunkReturnData: function(){
-		var plugin = dojo.flash.obj.get();
-		
-		var numSegments = plugin.getReturnLength();
-		var resultsArray = new Array();
-		for(var i = 0; i < numSegments; i++){
-			// directly use the underlying CallFunction method used by
-			// ExternalInterface, which is vastly faster for large strings
-			var piece = 
-					plugin.CallFunction('<invoke name="chunkReturnData" '
-															+ 'returntype="javascript">'
-															+ '<arguments>'
-															+ '<number>' + i + '</number>'
-															+ '</arguments>'
-															+ '</invoke>');
-															
-			// remove any leading or trailing JavaScript delimiters, which surround
-			// our String when it comes back from Flash since we bypass Flash's
-			// deserialization routines by directly calling CallFunction on the
-			// plugin
-			if(piece == '""' || piece == "''"){
-				piece = "";
-			}else{
-				piece = piece.substring(1, piece.length-1);
-			}
-		
-			resultsArray.push(piece);
-		}
-		var results = resultsArray.join("");
-		
-		return results;
-	},
-	
-	/** 
-			Executes a Flash method; called from the JavaScript wrapper proxy we
-			create on dojo.flash.comm.
-			Flash 8 communication.
-	*/
-	_execFlash: function(methodName, methodArgs){
-		var plugin = dojo.flash.obj.get();
-				
-		// begin Flash method execution
-		plugin.startExec();
-		
-		// set the number of arguments
-		plugin.setNumberArguments(methodArgs.length);
-		
-		// chunk and send over each argument
-		for(var i = 0; i < methodArgs.length; i++){
-			this._chunkArgumentData(methodArgs[i], i);
-		}
-		
-		// execute the method
-		plugin.exec(methodName);
-														
-		// get the return result
-		var results = this._chunkReturnData();
-		
-		// decode the results
-		results = this._decodeData(results);
-		
-		// reset everything
-		plugin.endExec();
-		
-		return results;
-
-	}
-}
-
-/** 
-		Figures out the best way to automatically install the Flash plugin
-		for this browser and platform. Also determines if installation or
-		revving of the current plugin is needed on this platform.
-*/
-dojo.flash.Install = function(){
-}
-
-dojo.flash.Install.prototype = {
-	/** 
-			Determines if installation or revving of the current plugin is 
-			needed. 
-	*/
-	needed: function(){
-		// do we even have flash?
-		if(dojo.flash.info.capable == false){
-			return true;
-		}
-
-		// are we on the Mac? Safari needs Flash version 8 to do Flash 8
-		// communication, while Firefox/Mac needs Flash 8 to fix bugs it has
-		// with Flash 6 communication
-		if(dojo.render.os.mac == true && !dojo.flash.info.isVersionOrAbove(8, 0, 0)){
-			return true;
-		}
-
-		// other platforms need at least Flash 6 or above
-		if(!dojo.flash.info.isVersionOrAbove(6, 0, 0)){
-			return true;
-		}
-
-		// otherwise we don't need installation
-		return false;
-	},
-
-	/** Performs installation or revving of the Flash plugin. */
-	install: function(){
-		//dojo.debug("install");
-		// indicate that we are installing
-		dojo.flash.info.installing = true;
-		dojo.flash.installing();
-		
-		if(dojo.flash.info.capable == false){ // we have no Flash at all
-			//dojo.debug("Completely new install");
-			// write out a simple Flash object to force the browser to prompt
-			// the user to install things
-			var installObj = new dojo.flash.Embed(false);
-			installObj.write(8); // write out HTML for Flash 8 version+
-		}else if(dojo.flash.info.isVersionOrAbove(6, 0, 65)){ // Express Install
-			//dojo.debug("Express install");
-			var installObj = new dojo.flash.Embed(false);
-			installObj.write(8, true); // write out HTML for Flash 8 version+
-			installObj.setVisible(true);
-			installObj.center();
-		}else{ // older Flash install than version 6r65
-			alert("This content requires a more recent version of the Macromedia "
-						+" Flash Player.");
-			window.location.href = "http://www.macromedia.com/go/getflashplayer";
-		}
-	},
-	
-	/** 
-			Called when the Express Install is either finished, failed, or was
-			rejected by the user.
-	*/
-	_onInstallStatus: function(msg){
-		if (msg == "Download.Complete"){
-			// Installation is complete.
-			dojo.flash._initialize();
-		}else if(msg == "Download.Cancelled"){
-			alert("This content requires a more recent version of the Macromedia "
-						+" Flash Player.");
-			window.location.href = "http://www.macromedia.com/go/getflashplayer";
-		}else if (msg == "Download.Failed"){
-			// The end user failed to download the installer due to a network failure
-			alert("There was an error downloading the Flash Player update. "
-						+ "Please try again later, or visit macromedia.com to download "
-						+ "the latest version of the Flash plugin.");
-		}	
-	}
-}
-
-// find out if Flash is installed
-dojo.flash.info = new dojo.flash.Info();
-
-// vim:ts=4:noet:tw=0:

+ 0 - 214
main/inc/lib/javascript/dojo/src/flash/flash6/DojoExternalInterface.as

@@ -1,214 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/** 
-		An implementation of Flash 8's ExternalInterface that works with Flash 6
-		and which is source-compatible with Flash 8. 
-		
-		@author Brad Neuberg, bkn3@columbia.edu 
-*/
-
-class DojoExternalInterface{
-	public static var available:Boolean;
-	public static var dojoPath = "";
-	
-	public static var _fscommandReady = false;
-	public static var _callbacks = new Array();
-
-	public static function initialize(){ 
-		//getURL("javascript:dojo.debug('FLASH:DojoExternalInterface initialize')");
-		// FIXME: Set available variable by testing for capabilities
-		DojoExternalInterface.available = true;
-		
-		// extract the dojo base path
-		DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath();
-		//getURL("javascript:dojo.debug('FLASH:dojoPath="+DojoExternalInterface.dojoPath+"')");
-		
-		// Sometimes, on IE, the fscommand infrastructure can take a few hundred
-		// milliseconds the first time a page loads. Set a timer to keep checking
-		// to make sure we can issue fscommands; otherwise, our calls to fscommand
-		// for setCallback() and loaded() will just "disappear"
-		_root.fscommandReady = false;
-		var fsChecker = function(){
-			// issue a test fscommand
-			fscommand("fscommandReady");
-			
-			// JavaScript should set _root.fscommandReady if it got the call
-			if(_root.fscommandReady == "true"){
-				DojoExternalInterface._fscommandReady = true;
-				clearInterval(_root.fsTimer);
-			}
-		};
-		_root.fsTimer = setInterval(fsChecker, 100);
-	}
-	
-	public static function addCallback(methodName:String, instance:Object, 
-											method:Function) : Boolean{
-		// A variable that indicates whether the call below succeeded
-		_root._succeeded = null;
-		
-		// Callbacks are registered with the JavaScript side as follows.
-		// On the Flash side, we maintain a lookup table that associates
-		// the methodName with the actual instance and method that are
-		// associated with this method.
-		// Using fscommand, we send over the action "addCallback", with the
-		// argument being the methodName to add, such as "foobar".
-		// The JavaScript takes these values and registers the existence of
-		// this callback point.
-		
-		// precede the method name with a _ character in case it starts
-		// with a number
-		_callbacks["_" + methodName] = {_instance: instance, _method: method};
-		_callbacks[_callbacks.length] = methodName;
-		
-		// The API for ExternalInterface says we have to make sure the call
-		// succeeded; check to see if there is a value 
-		// for _succeeded, which is set by the JavaScript side
-		if(_root._succeeded == null){
-			return false;
-		}else{
-			return true;
-		}
-	}
-	
-	public static function call(methodName:String, 
-								resultsCallback:Function) : Void{
-		// FIXME: support full JSON serialization
-		
-		// First, we pack up all of the arguments to this call and set them
-		// as Flash variables, which the JavaScript side will unpack using
-		// plugin.GetVariable(). We set the number of arguments as "_numArgs",
-		// and add each argument as a variable, such as "_1", "_2", etc., starting
-		// from 0.
-		// We then execute an fscommand with the action "call" and the
-		// argument being the method name. JavaScript takes the method name,
-		// retrieves the arguments using GetVariable, executes the method,
-		// and then places the return result in a Flash variable
-		// named "_returnResult".
-		_root._numArgs = arguments.length - 2;
-		for(var i = 2; i < arguments.length; i++){
-			var argIndex = i - 2;
-			_root["_" + argIndex] = arguments[i];
-		}
-		
-		_root._returnResult = undefined;
-		fscommand("call", methodName);
-		
-		// immediately return if the caller is not waiting for return results
-		if(resultsCallback == undefined || resultsCallback == null){
-			return;
-		}
-		
-		// check at regular intervals for return results	
-		var resultsChecker = function(){
-			if(_root._returnResult != undefined){
-				clearInterval(_root._callbackID);
-				resultsCallback.call(null, _root._returnResult);
-			}
-		};	
-		_root._callbackID = setInterval(resultsChecker, 100);
-	}
-	
-	/** 
-			Called by Flash to indicate to JavaScript that we are ready to have
-			our Flash functions called. Calling loaded()
-			will fire the dojo.flash.loaded() event, so that JavaScript can know that
-			Flash has finished loading and adding its callbacks, and can begin to
-			interact with the Flash file.
-	*/
-	public static function loaded(){
-		//getURL("javascript:dojo.debug('FLASH:loaded')");
-		
-		// one more step: see if fscommands are ready to be executed; if not,
-		// set an interval that will keep running until fscommands are ready;
-		// make sure the gateway is loaded as well
-		var execLoaded = function(){
-			if(DojoExternalInterface._fscommandReady == true){
-				clearInterval(_root.loadedInterval);
-				
-				// initialize the small Flash file that helps gateway JS to Flash
-				// calls
-				DojoExternalInterface._initializeFlashRunner();
-			}	
-		};
-		
-		if(_fscommandReady == true){
-			execLoaded();
-		}else{
-			_root.loadedInterval = setInterval(execLoaded, 50);
-		}
-	}
-	
-	/** 
-			Handles and executes a JavaScript to Flash method call. Used by
-			initializeFlashRunner. 
-	*/
-	public static function _handleJSCall(){
-		// get our parameters
-		var numArgs = parseInt(_root._numArgs);
-		var jsArgs = new Array();
-		for(var i = 0; i < numArgs; i++){
-			var currentValue = _root["_" + i];
-			jsArgs.push(currentValue);
-		}
-		
-		// get our function name
-		var functionName = _root._functionName;
-		
-		// now get the actual instance and method object to execute on,
-		// using our lookup table that was constructed by calls to
-		// addCallback on initialization
-		var instance = _callbacks["_" + functionName]._instance;
-		var method = _callbacks["_" + functionName]._method;
-		
-		// execute it
-		var results = method.apply(instance, jsArgs);
-		
-		// return the results
-		_root._returnResult = results;
-	}
-	
-	/** Called by the flash6_gateway.swf to indicate that it is loaded. */
-	public static function _gatewayReady(){
-		for(var i = 0; i < _callbacks.length; i++){
-			fscommand("addCallback", _callbacks[i]);
-		}
-		call("dojo.flash.loaded");
-	}
-	
-	/** 
-			When JavaScript wants to communicate with Flash it simply sets
-			the Flash variable "_execute" to true; this method creates the
-			internal Movie Clip, called the Flash Runner, that makes this
-			magic happen.
-	*/
-	public static function _initializeFlashRunner(){
-		// figure out where our Flash movie is
-		var swfLoc = DojoExternalInterface.dojoPath + "flash6_gateway.swf";
-		
-		// load our gateway helper file
-		_root.createEmptyMovieClip("_flashRunner", 5000);
-		_root._flashRunner._lockroot = true;
-		_root._flashRunner.loadMovie(swfLoc);
-	}
-	
-	private static function getDojoPath(){
-		var url = _root._url;
-		var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length;
-		var path = url.substring(start);
-		var end = path.indexOf("&");
-		if(end != -1){
-			path = path.substring(0, end);
-		}
-		return path;
-	}
-}
-
-// vim:ts=4:noet:tw=0:

BIN
main/inc/lib/javascript/dojo/src/flash/flash6/flash6_gateway.fla


+ 0 - 234
main/inc/lib/javascript/dojo/src/flash/flash8/DojoExternalInterface.as

@@ -1,234 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
-	A wrapper around Flash 8's ExternalInterface; DojoExternalInterface is needed so that we
-	can do a Flash 6 implementation of ExternalInterface, and be able
-	to support having a single codebase that uses DojoExternalInterface
-	across Flash versions rather than having two seperate source bases,
-	where one uses ExternalInterface and the other uses DojoExternalInterface.
-	
-	DojoExternalInterface class does a variety of optimizations to bypass ExternalInterface's
-	unbelievably bad performance so that we can have good performance
-	on Safari; see the blog post
-	http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html
-	for details.
-	
-	@author Brad Neuberg, bkn3@columbia.edu
-*/
-import flash.external.ExternalInterface;
-
-class DojoExternalInterface{
-	public static var available:Boolean;
-	public static var dojoPath = "";
-	
-	private static var flashMethods:Array = new Array();
-	private static var numArgs:Number;
-	private static var argData:Array;
-	private static var resultData = null;
-	
-	public static function initialize(){
-		// extract the dojo base path
-		DojoExternalInterface.dojoPath = DojoExternalInterface.getDojoPath();
-		
-		// see if we need to do an express install
-		var install:ExpressInstall = new ExpressInstall();
-		if(install.needsUpdate){
-			install.init();
-		}
-		
-		// register our callback functions
-		ExternalInterface.addCallback("startExec", DojoExternalInterface, startExec);
-		ExternalInterface.addCallback("setNumberArguments", DojoExternalInterface,
-																	setNumberArguments);
-		ExternalInterface.addCallback("chunkArgumentData", DojoExternalInterface,
-																	chunkArgumentData);
-		ExternalInterface.addCallback("exec", DojoExternalInterface, exec);
-		ExternalInterface.addCallback("getReturnLength", DojoExternalInterface,
-																	getReturnLength);
-		ExternalInterface.addCallback("chunkReturnData", DojoExternalInterface,
-																	chunkReturnData);
-		ExternalInterface.addCallback("endExec", DojoExternalInterface, endExec);
-		
-		// set whether communication is available
-		DojoExternalInterface.available = ExternalInterface.available;
-		DojoExternalInterface.call("loaded");
-	}
-	
-	public static function addCallback(methodName:String, instance:Object, 
-										 								 method:Function) : Boolean{
-		// register DojoExternalInterface methodName with it's instance
-		DojoExternalInterface.flashMethods[methodName] = instance;
-		
-		// tell JavaScript about DojoExternalInterface new method so we can create a proxy
-		ExternalInterface.call("dojo.flash.comm._addExternalInterfaceCallback", 
-													 methodName);
-													 
-		return true;
-	}
-	
-	public static function call(methodName:String,
-								resultsCallback:Function) : Void{
-		// we might have any number of optional arguments, so we have to 
-		// pass them in dynamically; strip out the results callback
-		var parameters = new Array();
-		for(var i = 0; i < arguments.length; i++){
-			if(i != 1){ // skip the callback
-				parameters.push(arguments[i]);
-			}
-		}
-		
-		var results = ExternalInterface.call.apply(ExternalInterface, parameters);
-		
-		// immediately give the results back, since ExternalInterface is
-		// synchronous
-		if(resultsCallback != null && typeof resultsCallback != "undefined"){
-			resultsCallback.call(null, results);
-		}
-	}
-	
-	/** 
-			Called by Flash to indicate to JavaScript that we are ready to have
-			our Flash functions called. Calling loaded()
-			will fire the dojo.flash.loaded() event, so that JavaScript can know that
-			Flash has finished loading and adding its callbacks, and can begin to
-			interact with the Flash file.
-	*/
-	public static function loaded(){
-		DojoExternalInterface.call("dojo.flash.loaded");
-	}
-	
-	public static function startExec():Void{
-		DojoExternalInterface.numArgs = null;
-		DojoExternalInterface.argData = null;
-		DojoExternalInterface.resultData = null;
-	}
-	
-	public static function setNumberArguments(numArgs):Void{
-		DojoExternalInterface.numArgs = numArgs;
-		DojoExternalInterface.argData = new Array(DojoExternalInterface.numArgs);
-	}
-	
-	public static function chunkArgumentData(value, argIndex:Number):Void{
-		//getURL("javascript:dojo.debug('FLASH: chunkArgumentData, value="+value+", argIndex="+argIndex+"')");
-		var currentValue = DojoExternalInterface.argData[argIndex];
-		if(currentValue == null || typeof currentValue == "undefined"){
-			DojoExternalInterface.argData[argIndex] = value;
-		}else{
-			DojoExternalInterface.argData[argIndex] += value;
-		}
-	}
-	
-	public static function exec(methodName):Void{
-		// decode all of the arguments that were passed in
-		for(var i = 0; i < DojoExternalInterface.argData.length; i++){
-			DojoExternalInterface.argData[i] = 
-				DojoExternalInterface.decodeData(DojoExternalInterface.argData[i]);
-		}
-		
-		var instance = DojoExternalInterface.flashMethods[methodName];
-		DojoExternalInterface.resultData = instance[methodName].apply(
-																			instance, DojoExternalInterface.argData);
-		// encode the result data
-		DojoExternalInterface.resultData = 
-			DojoExternalInterface.encodeData(DojoExternalInterface.resultData);
-			
-		//getURL("javascript:dojo.debug('FLASH: encoded result data="+DojoExternalInterface.resultData+"')");
-	}
-	
-	public static function getReturnLength():Number{
-	 if(DojoExternalInterface.resultData == null || 
-	 					typeof DojoExternalInterface.resultData == "undefined"){
-	 	return 0;
-	 }
-	 var segments = Math.ceil(DojoExternalInterface.resultData.length / 1024);
-	 return segments;
-	}
-	
-	public static function chunkReturnData(segment:Number):String{
-		var numSegments = DojoExternalInterface.getReturnLength();
-		var startCut = segment * 1024;
-		var endCut = segment * 1024 + 1024;
-		if(segment == (numSegments - 1)){
-			endCut = segment * 1024 + DojoExternalInterface.resultData.length;
-		}
-			
-		var piece = DojoExternalInterface.resultData.substring(startCut, endCut);
-		
-		//getURL("javascript:dojo.debug('FLASH: chunking return piece="+piece+"')");
-		
-		return piece;
-	}
-	
-	public static function endExec():Void{
-	}
-	
-	private static function decodeData(data):String{
-		// we have to use custom encodings for certain characters when passing
-		// them over; for example, passing a backslash over as //// from JavaScript
-		// to Flash doesn't work
-		data = DojoExternalInterface.replaceStr(data, "&custom_backslash;", "\\");
-		
-		data = DojoExternalInterface.replaceStr(data, "\\\'", "\'");
-		data = DojoExternalInterface.replaceStr(data, "\\\"", "\"");
-		
-		return data;
-	}
-	
-	private static function encodeData(data){
-		//getURL("javascript:dojo.debug('inside flash, data before="+data+"')");
-
-		// double encode all entity values, or they will be mis-decoded
-		// by Flash when returned
-		data = DojoExternalInterface.replaceStr(data, "&", "&amp;");
-		
-		// certain XMLish characters break Flash's wire serialization for
-		// ExternalInterface; encode these into a custom encoding, rather than
-		// the standard entity encoding, because otherwise we won't be able to
-		// differentiate between our own encoding and any entity characters
-		// that are being used in the string itself
-		data = DojoExternalInterface.replaceStr(data, '<', '&custom_lt;');
-		data = DojoExternalInterface.replaceStr(data, '>', '&custom_gt;');
-		
-		// encode control characters and JavaScript delimiters
-		data = DojoExternalInterface.replaceStr(data, "\n", "\\n");
-		data = DojoExternalInterface.replaceStr(data, "\r", "\\r");
-		data = DojoExternalInterface.replaceStr(data, "\f", "\\f");
-		data = DojoExternalInterface.replaceStr(data, "'", "\\'");
-		data = DojoExternalInterface.replaceStr(data, '"', '\"');
-		
-		//getURL("javascript:dojo.debug('inside flash, data after="+data+"')");
-		return data;
-	}
-	
-	/** 
-			Flash ActionScript has no String.replace method or support for
-			Regular Expressions! We roll our own very simple one.
-	*/
-	private static function replaceStr(inputStr:String, replaceThis:String, 
-																		 withThis:String):String {
-		var splitStr = inputStr.split(replaceThis)
-		inputStr = splitStr.join(withThis)
-		return inputStr;
-	}
-	
-	private static function getDojoPath(){
-		var url = _root._url;
-		var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length;
-		var path = url.substring(start);
-		var end = path.indexOf("&");
-		if(end != -1){
-			path = path.substring(0, end);
-		}
-		return path;
-	}
-}
-
-// vim:ts=4:noet:tw=0:

+ 0 - 81
main/inc/lib/javascript/dojo/src/flash/flash8/ExpressInstall.as

@@ -1,81 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/**
- * Based on the expressinstall.as class created by Geoff Stearns as part
- * of the FlashObject library.
- *
- * Use this file to invoke the Macromedia Flash Player Express Install functionality
- * This file is intended for use with the FlashObject embed script. You can download FlashObject 
- * and this file at the following URL: http://blog.deconcept.com/flashobject/
- *
- * Usage: 
- *          var ExpressInstall = new ExpressInstall();
- *          
- *          // test to see if install is needed:
- *          if (ExpressInstall.needsUpdate) { // returns true if update is needed
- *              ExpressInstall.init(); // starts the update
- *          }
- *
- *	NOTE: Your Flash movie must be at least 214px by 137px in order to use ExpressInstall.
- *
- */
-
-class ExpressInstall {
-	public var needsUpdate:Boolean;
-	private var updater:MovieClip;
-	private var hold:MovieClip;
-	
-	public function ExpressInstall(){
-		// does the user need to update?
-		this.needsUpdate = (_root.MMplayerType == undefined) ? false : true;	
-	}
-
-	public function init():Void{
-		this.loadUpdater();
-	}
-
-	public function loadUpdater():Void {
-		System.security.allowDomain("fpdownload.macromedia.com");
-
-		// hope that nothing is at a depth of 10000000, you can change this depth if needed, but you want
-		// it to be on top of your content if you have any stuff on the first frame
-		this.updater = _root.createEmptyMovieClip("expressInstallHolder", 10000000);
-
-		// register the callback so we know if they cancel or there is an error
-		var _self = this;
-		this.updater.installStatus = _self.onInstallStatus;
-		this.hold = this.updater.createEmptyMovieClip("hold", 1);
-
-		// can't use movieClipLoader because it has to work in 6.0.65
-		this.updater.onEnterFrame = function():Void {
-			if(typeof this.hold.startUpdate == 'function'){
-				_self.initUpdater();
-				this.onEnterFrame = null;
-			}
-		}
-
-		var cacheBuster:Number = Math.random();
-
-		this.hold.loadMovie("http://fpdownload.macromedia.com/pub/flashplayer/"
-												+"update/current/swf/autoUpdater.swf?"+ cacheBuster);
-	}
-
-	private function initUpdater():Void{
-		this.hold.redirectURL = _root.MMredirectURL;
-		this.hold.MMplayerType = _root.MMplayerType;
-		this.hold.MMdoctitle = _root.MMdoctitle;
-		this.hold.startUpdate();
-	}
-
-	public function onInstallStatus(msg):Void{
-		getURL("javascript:dojo.flash.install._onInstallStatus('"+msg+"')");
-	}
-}

+ 0 - 15
main/inc/lib/javascript/dojo/src/fx/__package__.js

@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.kwCompoundRequire({
-	browser: ["dojo.fx.html"],
-	dashboard: ["dojo.fx.html"]
-});
-dojo.provide("dojo.fx.*");

+ 0 - 573
main/inc/lib/javascript/dojo/src/fx/html.js

@@ -1,573 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.fx.html");
-
-dojo.require("dojo.style");
-dojo.require("dojo.math.curves");
-dojo.require("dojo.lang.func");
-dojo.require("dojo.animation");
-dojo.require("dojo.event.*");
-dojo.require("dojo.graphics.color");
-
-dojo.deprecated("dojo.fx.html", "use dojo.lfx.html instead", "0.4");
-
-dojo.fx.duration = 300;
-
-dojo.fx.html._makeFadeable = function(node){
-	if(dojo.render.html.ie){
-		// only set the zoom if the "tickle" value would be the same as the
-		// default
-		if( (node.style.zoom.length == 0) &&
-			(dojo.style.getStyle(node, "zoom") == "normal") ){
-			// make sure the node "hasLayout"
-			// NOTE: this has been tested with larger and smaller user-set text
-			// sizes and works fine
-			node.style.zoom = "1";
-			// node.style.zoom = "normal";
-		}
-		// don't set the width to auto if it didn't already cascade that way.
-		// We don't want to f anyones designs
-		if(	(node.style.width.length == 0) &&
-			(dojo.style.getStyle(node, "width") == "auto") ){
-			node.style.width = "auto";
-		}
-	}
-}
-
-dojo.fx.html.fadeOut = function(node, duration, callback, dontPlay) {
-	return dojo.fx.html.fade(node, duration, dojo.style.getOpacity(node), 0, callback, dontPlay);
-};
-
-dojo.fx.html.fadeIn = function(node, duration, callback, dontPlay) {
-	return dojo.fx.html.fade(node, duration, dojo.style.getOpacity(node), 1, callback, dontPlay);
-};
-
-dojo.fx.html.fadeHide = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	if(!duration) { duration = 150; } // why not have a default?
-	return dojo.fx.html.fadeOut(node, duration, function(node) {
-		node.style.display = "none";
-		if(typeof callback == "function") { callback(node); }
-	});
-};
-
-dojo.fx.html.fadeShow = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	if(!duration) { duration = 150; } // why not have a default?
-	node.style.display = "block";
-	return dojo.fx.html.fade(node, duration, 0, 1, callback, dontPlay);
-};
-
-dojo.fx.html.fade = function(node, duration, startOpac, endOpac, callback, dontPlay) {
-	node = dojo.byId(node);
-	dojo.fx.html._makeFadeable(node);
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([startOpac],[endOpac]),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		dojo.style.setOpacity(node, e.x);
-	});
-	if(callback) {
-		dojo.event.connect(anim, "onEnd", function(e) {
-			callback(node, anim);
-		});
-	}
-	if(!dontPlay) { anim.play(true); }
-	return anim;
-};
-
-dojo.fx.html.slideTo = function(node, duration, endCoords, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endCoords;
-		endCoords = tmp;
-	}
-	node = dojo.byId(node);
-
-	var top = node.offsetTop;
-	var left = node.offsetLeft;
-	var pos = dojo.style.getComputedStyle(node, 'position');
-
-	if (pos == 'relative' || pos == 'static') {
-		top = parseInt(dojo.style.getComputedStyle(node, 'top')) || 0;
-		left = parseInt(dojo.style.getComputedStyle(node, 'left')) || 0;
-	}
-
-	return dojo.fx.html.slide(node, duration, [left, top],
-		endCoords, callback, dontPlay);
-};
-
-dojo.fx.html.slideBy = function(node, duration, coords, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = coords;
-		coords = tmp;
-	}
-	node = dojo.byId(node);
-
-	var top = node.offsetTop;
-	var left = node.offsetLeft;
-	var pos = dojo.style.getComputedStyle(node, 'position');
-
-	if (pos == 'relative' || pos == 'static') {
-		top = parseInt(dojo.style.getComputedStyle(node, 'top')) || 0;
-		left = parseInt(dojo.style.getComputedStyle(node, 'left')) || 0;
-	}
-
-	return dojo.fx.html.slideTo(node, duration, [left+coords[0], top+coords[1]],
-		callback, dontPlay);
-};
-
-dojo.fx.html.slide = function(node, duration, startCoords, endCoords, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endCoords;
-		endCoords = startCoords;
-		startCoords = tmp;
-	}
-	node = dojo.byId(node);
-
-	if (dojo.style.getComputedStyle(node, 'position') == 'static') {
-		node.style.position = 'relative';
-	}
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startCoords, endCoords),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		with( node.style ) {
-			left = e.x + "px";
-			top = e.y + "px";
-		}
-	});
-	if(callback) {
-		dojo.event.connect(anim, "onEnd", function(e) {
-			callback(node, anim);
-		});
-	}
-	if(!dontPlay) { anim.play(true); }
-	return anim;
-};
-
-// Fade from startColor to the node's background color
-dojo.fx.html.colorFadeIn = function(node, duration, startColor, delay, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = startColor;
-		startColor = tmp;
-	}
-	node = dojo.byId(node);
-	var color = dojo.style.getBackgroundColor(node);
-	var bg = dojo.style.getStyle(node, "background-color").toLowerCase();
-	var wasTransparent = bg == "transparent" || bg == "rgba(0, 0, 0, 0)";
-	while(color.length > 3) { color.pop(); }
-
-	var rgb = new dojo.graphics.color.Color(startColor).toRgb();
-	var anim = dojo.fx.html.colorFade(node, duration||dojo.fx.duration, startColor, color, callback, true);
-	dojo.event.connect(anim, "onEnd", function(e) {
-		if( wasTransparent ) {
-			node.style.backgroundColor = "transparent";
-		}
-	});
-	if( delay > 0 ) {
-		node.style.backgroundColor = "rgb(" + rgb.join(",") + ")";
-		if(!dontPlay) { setTimeout(function(){anim.play(true)}, delay); }
-	} else {
-		if(!dontPlay) { anim.play(true); }
-	}
-	return anim;
-};
-// alias for (probably?) common use/terminology
-dojo.fx.html.highlight = dojo.fx.html.colorFadeIn;
-dojo.fx.html.colorFadeFrom = dojo.fx.html.colorFadeIn;
-
-// Fade from node's background color to endColor
-dojo.fx.html.colorFadeOut = function(node, duration, endColor, delay, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endColor;
-		endColor = tmp;
-	}
-	node = dojo.byId(node);
-	var color = new dojo.graphics.color.Color(dojo.style.getBackgroundColor(node)).toRgb();
-
-	var rgb = new dojo.graphics.color.Color(endColor).toRgb();
-	var anim = dojo.fx.html.colorFade(node, duration||dojo.fx.duration, color, rgb, callback, delay > 0 || dontPlay);
-	if( delay > 0 ) {
-		node.style.backgroundColor = "rgb(" + color.join(",") + ")";
-		if(!dontPlay) { setTimeout(function(){anim.play(true)}, delay); }
-	}
-	return anim;
-};
-// FIXME: not sure which name is better. an alias here may be bad.
-dojo.fx.html.unhighlight = dojo.fx.html.colorFadeOut;
-dojo.fx.html.colorFadeTo = dojo.fx.html.colorFadeOut;
-
-// Fade node background from startColor to endColor
-dojo.fx.html.colorFade = function(node, duration, startColor, endColor, callback, dontPlay) {
-	if(!dojo.lang.isNumber(duration)) {
-		var tmp = duration;
-		duration = endColor;
-		endColor = startColor;
-		startColor = tmp;
-	}
-	node = dojo.byId(node);
-	var startRgb = new dojo.graphics.color.Color(startColor).toRgb();
-	var endRgb = new dojo.graphics.color.Color(endColor).toRgb();
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startRgb, endRgb),
-		duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		node.style.backgroundColor = "rgb(" + e.coordsAsInts().join(",") + ")";
-	});
-	if(callback) {
-		dojo.event.connect(anim, "onEnd", function(e) {
-			callback(node, anim);
-		});
-	}
-	if( !dontPlay ) { anim.play(true); }
-	return anim;
-};
-
-dojo.fx.html.wipeIn = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	var overflow = dojo.style.getStyle(node, "overflow");
-	if(overflow == "visible") {
-		node.style.overflow = "hidden";
-	}
-	node.style.height = 0;
-	dojo.style.show(node);
-	var anim = dojo.fx.html.wipe(node, duration, 0, node.scrollHeight, null, true);
-	dojo.event.connect(anim, "onEnd", function() {
-		node.style.overflow = overflow;
-		node.style.visibility = "";
-		node.style.height = "auto";
-		if(callback) { callback(node, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-}
-
-dojo.fx.html.wipeOut = function(node, duration, callback, dontPlay) {
-	node = dojo.byId(node);
-	var overflow = dojo.style.getStyle(node, "overflow");
-	if(overflow == "visible") {
-		node.style.overflow = "hidden";
-	}
-	var anim = dojo.fx.html.wipe(node, duration, node.offsetHeight, 0, null, true);
-	dojo.event.connect(anim, "onEnd", function() {
-		dojo.style.hide(node);
-		node.style.visibility = "hidden";
-		node.style.overflow = overflow;
-		if(callback) { callback(node, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-}
-
-dojo.fx.html.wipe = function(node, duration, startHeight, endHeight, callback, dontPlay) {
-	node = dojo.byId(node);
-	var anim = new dojo.animation.Animation([[startHeight], [endHeight]], duration||dojo.fx.duration, 0);
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		node.style.height = e.x + "px";
-	});
-	dojo.event.connect(anim, "onEnd", function() {
-		if(callback) { callback(node, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-}
-
-dojo.fx.html.wiper = function(node, controlNode) {
-	this.node = dojo.byId(node);
-	if(controlNode) {
-		dojo.event.connect(dojo.byId(controlNode), "onclick", this, "toggle");
-	}
-}
-dojo.lang.extend(dojo.fx.html.wiper, {
-	duration: dojo.fx.duration,
-	_anim: null,
-
-	toggle: function() {
-		if(!this._anim) {
-			var type = "wipe" + (dojo.style.isVisible(this.node) ? "Out" : "In");
-			this._anim = dojo.fx[type](this.node, this.duration, dojo.lang.hitch(this, "_callback"));
-		}
-	},
-
-	_callback: function() {
-		this._anim = null;
-	}
-});
-
-dojo.fx.html.explode = function(start, endNode, duration, callback, dontPlay) {
-	var startCoords = dojo.style.toCoordinateArray(start);
-
-	var outline = document.createElement("div");
-	with(outline.style) {
-		position = "absolute";
-		border = "1px solid black";
-		display = "none";
-	}
-	document.body.appendChild(outline);
-
-	endNode = dojo.byId(endNode);
-	with(endNode.style) {
-		visibility = "hidden";
-		display = "block";
-	}
-	var endCoords = dojo.style.toCoordinateArray(endNode);
-
-	with(endNode.style) {
-		display = "none";
-		visibility = "visible";
-	}
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startCoords, endCoords),
-		duration||dojo.fx.duration, 0
-	);
-	dojo.event.connect(anim, "onBegin", function(e) {
-		outline.style.display = "block";
-	});
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		with(outline.style) {
-			left = e.x + "px";
-			top = e.y + "px";
-			width = e.coords[2] + "px";
-			height = e.coords[3] + "px";
-		}
-	});
-
-	dojo.event.connect(anim, "onEnd", function() {
-		endNode.style.display = "block";
-		outline.parentNode.removeChild(outline);
-		if(callback) { callback(endNode, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-};
-
-dojo.fx.html.implode = function(startNode, end, duration, callback, dontPlay) {
-	var startCoords = dojo.style.toCoordinateArray(startNode);
-	var endCoords = dojo.style.toCoordinateArray(end);
-
-	startNode = dojo.byId(startNode);
-	var outline = document.createElement("div");
-	with(outline.style) {
-		position = "absolute";
-		border = "1px solid black";
-		display = "none";
-	}
-	document.body.appendChild(outline);
-
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line(startCoords, endCoords),
-		duration||dojo.fx.duration, 0
-	);
-	dojo.event.connect(anim, "onBegin", function(e) {
-		startNode.style.display = "none";
-		outline.style.display = "block";
-	});
-	dojo.event.connect(anim, "onAnimate", function(e) {
-		with(outline.style) {
-			left = e.x + "px";
-			top = e.y + "px";
-			width = e.coords[2] + "px";
-			height = e.coords[3] + "px";
-		}
-	});
-
-	dojo.event.connect(anim, "onEnd", function() {
-		outline.parentNode.removeChild(outline);
-		if(callback) { callback(startNode, anim); }
-	});
-	if(!dontPlay) { anim.play(); }
-	return anim;
-};
-
-dojo.fx.html.Exploder = function(triggerNode, boxNode) {
-	triggerNode = dojo.byId(triggerNode);
-	boxNode = dojo.byId(boxNode);
-	var _this = this;
-
-	// custom options
-	this.waitToHide = 500;
-	this.timeToShow = 100;
-	this.waitToShow = 200;
-	this.timeToHide = 70;
-	this.autoShow = false;
-	this.autoHide = false;
-
-	var animShow = null;
-	var animHide = null;
-
-	var showTimer = null;
-	var hideTimer = null;
-
-	var startCoords = null;
-	var endCoords = null;
-
-	this.showing = false;
-
-	this.onBeforeExplode = null;
-	this.onAfterExplode = null;
-	this.onBeforeImplode = null;
-	this.onAfterImplode = null;
-	this.onExploding = null;
-	this.onImploding = null;
-
-	this.timeShow = function() {
-		clearTimeout(showTimer);
-		showTimer = setTimeout(_this.show, _this.waitToShow);
-	}
-
-	this.show = function() {
-		clearTimeout(showTimer);
-		clearTimeout(hideTimer);
-		//triggerNode.blur();
-
-		if( (animHide && animHide.status() == "playing")
-			|| (animShow && animShow.status() == "playing")
-			|| _this.showing ) { return; }
-
-		if(typeof _this.onBeforeExplode == "function") { _this.onBeforeExplode(triggerNode, boxNode); }
-		animShow = dojo.fx.html.explode(triggerNode, boxNode, _this.timeToShow, function(e) {
-			_this.showing = true;
-			if(typeof _this.onAfterExplode == "function") { _this.onAfterExplode(triggerNode, boxNode); }
-		});
-		if(typeof _this.onExploding == "function") {
-			dojo.event.connect(animShow, "onAnimate", this, "onExploding");
-		}
-	}
-
-	this.timeHide = function() {
-		clearTimeout(showTimer);
-		clearTimeout(hideTimer);
-		if(_this.showing) {
-			hideTimer = setTimeout(_this.hide, _this.waitToHide);
-		}
-	}
-
-	this.hide = function() {
-		clearTimeout(showTimer);
-		clearTimeout(hideTimer);
-		if( animShow && animShow.status() == "playing" ) {
-			return;
-		}
-
-		_this.showing = false;
-		if(typeof _this.onBeforeImplode == "function") { _this.onBeforeImplode(triggerNode, boxNode); }
-		animHide = dojo.fx.html.implode(boxNode, triggerNode, _this.timeToHide, function(e){
-			if(typeof _this.onAfterImplode == "function") { _this.onAfterImplode(triggerNode, boxNode); }
-		});
-		if(typeof _this.onImploding == "function") {
-			dojo.event.connect(animHide, "onAnimate", this, "onImploding");
-		}
-	}
-
-	// trigger events
-	dojo.event.connect(triggerNode, "onclick", function(e) {
-		if(_this.showing) {
-			_this.hide();
-		} else {
-			_this.show();
-		}
-	});
-	dojo.event.connect(triggerNode, "onmouseover", function(e) {
-		if(_this.autoShow) {
-			_this.timeShow();
-		}
-	});
-	dojo.event.connect(triggerNode, "onmouseout", function(e) {
-		if(_this.autoHide) {
-			_this.timeHide();
-		}
-	});
-
-	// box events
-	dojo.event.connect(boxNode, "onmouseover", function(e) {
-		clearTimeout(hideTimer);
-	});
-	dojo.event.connect(boxNode, "onmouseout", function(e) {
-		if(_this.autoHide) {
-			_this.timeHide();
-		}
-	});
-
-	// document events
-	dojo.event.connect(document.documentElement || document.body, "onclick", function(e) {
-		function isDesc(node, ancestor) {
-			while(node) {
-				if(node == ancestor){ return true; }
-				node = node.parentNode;
-			}
-			return false;
-		}
-		if(_this.autoHide && _this.showing
-			&& !isDesc(e.target, boxNode)
-			&& !isDesc(e.target, triggerNode) ) {
-			_this.hide();
-		}
-	});
-
-	return this;
-};
-
-/**** 
-	Strategies for displaying/hiding objects
-	This presents a standard interface for each of the effects
-*****/
-dojo.fx.html.toggle={}
-
-dojo.fx.html.toggle.plain = {
-	show: function(node, duration, explodeSrc, callback){
-		dojo.style.show(node);
-		if(dojo.lang.isFunction(callback)){ callback(); }
-	},
-
-	hide: function(node, duration, explodeSrc, callback){
-		dojo.style.hide(node);
-		if(dojo.lang.isFunction(callback)){ callback(); }
-	}
-}
-
-dojo.fx.html.toggle.fade = {
-	show: function(node, duration, explodeSrc, callback){
-		dojo.fx.html.fadeShow(node, duration, callback);
-	},
-
-	hide: function(node, duration, explodeSrc, callback){
-		dojo.fx.html.fadeHide(node, duration, callback);
-	}
-}
-
-dojo.fx.html.toggle.wipe = {
-	show: function(node, duration, explodeSrc, callback){
-		dojo.fx.html.wipeIn(node, duration, callback);
-	},
-
-	hide: function(node, duration, explodeSrc, callback){
-		dojo.fx.html.wipeOut(node, duration, callback);
-	}
-}
-
-dojo.fx.html.toggle.explode = {
-	show: function(node, duration, explodeSrc, callback){
-		dojo.fx.html.explode(explodeSrc||[0,0,0,0], node, duration, callback);
-	},
-
-	hide: function(node, duration, explodeSrc, callback){
-		dojo.fx.html.implode(node, explodeSrc||[0,0,0,0], duration, callback);
-	}
-}
-
-dojo.lang.mixin(dojo.fx, dojo.fx.html);

+ 0 - 99
main/inc/lib/javascript/dojo/src/fx/svg.js

@@ -1,99 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.fx.svg");
-
-dojo.require("dojo.svg");
-dojo.require("dojo.animation.*");
-dojo.require("dojo.event.*");
-
-dojo.fx.svg.fadeOut = function(node, duration, callback){
-	return dojo.fx.svg.fade(node, duration, dojo.svg.getOpacity(node), 0, callback);
-};
-dojo.fx.svg.fadeIn = function(node, duration, callback){
-	return dojo.fx.svg.fade(node, duration, dojo.svg.getOpacity(node), 1, callback);
-};
-dojo.fx.svg.fadeHide = function(node, duration, callback){
-	if(!duration) { duration = 150; } // why not have a default?
-	return dojo.fx.svg.fadeOut(node, duration, function(node) {
-		if(typeof callback == "function") { callback(node); }
-	});
-};
-dojo.fx.svg.fadeShow = function(node, duration, callback){
-	if(!duration) { duration = 150; } // why not have a default?
-	return dojo.fx.svg.fade(node, duration, 0, 1, callback);
-};
-dojo.fx.svg.fade = function(node, duration, startOpac, endOpac, callback){
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([startOpac],[endOpac]),
-		duration,
-		0
-	);
-	dojo.event.connect(anim, "onAnimate", function(e){
-		dojo.svg.setOpacity(node, e.x);
-	});
-	if (callback) {
-		dojo.event.connect(anim, "onEnd", function(e){
-			callback(node, anim);
-		});
-	};
-	anim.play(true);
-	return anim;
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////
-//	TODO
-/////////////////////////////////////////////////////////////////////////////////////////
-
-//	SLIDES
-dojo.fx.svg.slideTo = function(node, endCoords, duration, callback) { };
-dojo.fx.svg.slideBy = function(node, coords, duration, callback) { };
-dojo.fx.svg.slide = function(node, startCoords, endCoords, duration, callback) { 
-	var anim = new dojo.animation.Animation(
-		new dojo.math.curves.Line([startCoords],[endCoords]),
-		duration,
-		0
-	);
-	dojo.event.connect(anim, "onAnimate", function(e){
-		dojo.svg.setCoords(node, {x: e.x, y: e.y });
-	});
-	if (callback) {
-		dojo.event.connect(anim, "onEnd", function(e){
-			callback(node, anim);
-		});
-	};
-	anim.play(true);
-	return anim;
-};
-
-//	COLORS
-dojo.fx.svg.colorFadeIn = function(node, startRGB, duration, delay, callback) { };
-dojo.fx.svg.highlight = dojo.fx.svg.colorFadeIn;
-dojo.fx.svg.colorFadeFrom = dojo.fx.svg.colorFadeIn;
-
-dojo.fx.svg.colorFadeOut = function(node, endRGB, duration, delay, callback) { };
-dojo.fx.svg.unhighlight = dojo.fx.svg.colorFadeOut;
-dojo.fx.svg.colorFadeTo = dojo.fx.svg.colorFadeOut;
-
-dojo.fx.svg.colorFade = function(node, startRGB, endRGB, duration, callback, dontPlay) { };
-
-//	WIPES
-dojo.fx.svg.wipeIn = function(node, duration, callback, dontPlay) { };
-dojo.fx.svg.wipeInToHeight = function(node, duration, height, callback, dontPlay) { }
-dojo.fx.svg.wipeOut = function(node, duration, callback, dontPlay) { };
-
-//	Explode and Implode
-dojo.fx.svg.explode = function(startNode, endNode, duration, callback) { };
-dojo.fx.svg.explodeFromBox = function(startCoords, endNode, duration, callback) { };
-dojo.fx.svg.implode = function(startNode, endNode, duration, callback) { };
-dojo.fx.svg.implodeToBox = function(startNode, endCoords, duration, callback) { };
-dojo.fx.svg.Exploder = function(triggerNode, boxNode) { };
-
-//	html mixes in, we want SVG to remain separate

+ 0 - 944
main/inc/lib/javascript/dojo/src/graphics/Colorspace.js

@@ -1,944 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.graphics.Colorspace");
-
-dojo.require("dojo.lang");
-dojo.require("dojo.math.matrix");
-
-//
-// to convert to YUV:
-//   c.whitePoint = 'D65';
-//   c.RGBWorkingSpace = 'pal_secam_rgb';
-//   var out = c.convert([r,g,b], 'RGB', 'XYZ');
-//
-// to convert to YIQ:
-//   c.whitePoint = 'D65';
-//   c.RGBWorkingSpace = 'ntsc_rgb';
-//   var out = c.convert([r,g,b], 'RGB', 'XYZ');
-//
-
-dojo.graphics.Colorspace =function(){
-
-	this.whitePoint = 'D65';
-	this.stdObserver = '10';
-	this.chromaticAdaptationAlg = 'bradford';
-	this.RGBWorkingSpace = 's_rgb';
-	this.useApproxCIELabMapping = 1; // see http://www.brucelindbloom.com/LContinuity.html
-
-	this.chainMaps = {
-		'RGB_to_xyY'  : ['XYZ'],
-		'xyY_to_RGB'  : ['XYZ'],
-		'RGB_to_Lab'  : ['XYZ'],
-		'Lab_to_RGB'  : ['XYZ'],
-		'RGB_to_LCHab': ['XYZ', 'Lab'],
-		'LCHab_to_RGB': ['Lab'],
-		'xyY_to_Lab'  : ['XYZ'],
-		'Lab_to_xyY'  : ['XYZ'],
-		'XYZ_to_LCHab': ['Lab'],
-		'LCHab_to_XYZ': ['Lab'],
-		'xyY_to_LCHab': ['XYZ', 'Lab'],
-		'LCHab_to_xyY': ['Lab', 'XYZ'],
-		'RGB_to_Luv'  : ['XYZ'],
-		'Luv_to_RGB'  : ['XYZ'],
-		'xyY_to_Luv'  : ['XYZ'],
-		'Luv_to_xyY'  : ['XYZ'],
-		'Lab_to_Luv'  : ['XYZ'],
-		'Luv_to_Lab'  : ['XYZ'],
-		'LCHab_to_Luv': ['Lab', 'XYZ'],
-		'Luv_to_LCHab': ['XYZ', 'Lab'],
-		'RGB_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_RGB'  : ['Luv', 'XYZ'],
-		'XYZ_to_LCHuv'  : ['Luv'],
-		'LCHuv_to_XYZ'  : ['Luv'],
-		'xyY_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_xyY'  : ['Luv', 'XYZ'],
-		'Lab_to_LCHuv'  : ['XYZ', 'Luv'],
-		'LCHuv_to_Lab'  : ['Luv', 'XYZ'],
-		'LCHab_to_LCHuv': ['Lab', 'XYZ', 'Luv'],
-		'LCHuv_to_LCHab': ['Luv', 'XYZ', 'Lab'],
-		'XYZ_to_CMY'    : ['RGB'],
-		'CMY_to_XYZ'    : ['RGB'],
-		'xyY_to_CMY'    : ['RGB'],
-		'CMY_to_xyY'    : ['RGB'],
-		'Lab_to_CMY'    : ['RGB'],
-		'CMY_to_Lab'    : ['RGB'],
-		'LCHab_to_CMY'  : ['RGB'],
-		'CMY_to_LCHab'  : ['RGB'],
-		'Luv_to_CMY'    : ['RGB'],
-		'CMY_to_Luv'    : ['RGB'],
-		'LCHuv_to_CMY'  : ['RGB'],
-		'CMY_to_LCHuv'  : ['RGB'],
-		'XYZ_to_HSL'    : ['RGB'],
-		'HSL_to_XYZ'    : ['RGB'],
-		'xyY_to_HSL'    : ['RGB'],
-		'HSL_to_xyY'    : ['RGB'],
-		'Lab_to_HSL'    : ['RGB'],
-		'HSL_to_Lab'    : ['RGB'],
-		'LCHab_to_HSL'  : ['RGB'],
-		'HSL_to_LCHab'  : ['RGB'],
-		'Luv_to_HSL'    : ['RGB'],
-		'HSL_to_Luv'    : ['RGB'],
-		'LCHuv_to_HSL'  : ['RGB'],
-		'HSL_to_LCHuv'  : ['RGB'],
-		'CMY_to_HSL'    : ['RGB'],
-		'HSL_to_CMY'    : ['RGB'],
-		'CMYK_to_HSL'   : ['RGB'],
-		'HSL_to_CMYK'   : ['RGB'],
-		'XYZ_to_HSV'    : ['RGB'],
-		'HSV_to_XYZ'    : ['RGB'],
-		'xyY_to_HSV'    : ['RGB'],
-		'HSV_to_xyY'    : ['RGB'],
-		'Lab_to_HSV'    : ['RGB'],
-		'HSV_to_Lab'    : ['RGB'],
-		'LCHab_to_HSV'  : ['RGB'],
-		'HSV_to_LCHab'  : ['RGB'],
-		'Luv_to_HSV'    : ['RGB'],
-		'HSV_to_Luv'    : ['RGB'],
-		'LCHuv_to_HSV'  : ['RGB'],
-		'HSV_to_LCHuv'  : ['RGB'],
-		'CMY_to_HSV'    : ['RGB'],
-		'HSV_to_CMY'    : ['RGB'],
-		'CMYK_to_HSV'   : ['RGB'],
-		'HSV_to_CMYK'   : ['RGB'],
-		'HSL_to_HSV'    : ['RGB'],
-		'HSV_to_HSL'    : ['RGB'],
-		'XYZ_to_CMYK'   : ['RGB'],
-		'CMYK_to_XYZ'   : ['RGB'],
-		'xyY_to_CMYK'   : ['RGB'],
-		'CMYK_to_xyY'   : ['RGB'],
-		'Lab_to_CMYK'   : ['RGB'],
-		'CMYK_to_Lab'   : ['RGB'],
-		'LCHab_to_CMYK' : ['RGB'],
-		'CMYK_to_LCHab' : ['RGB'],
-		'Luv_to_CMYK'   : ['RGB'],
-		'CMYK_to_Luv'   : ['RGB'],
-		'LCHuv_to_CMYK' : ['RGB'],
-		'CMYK_to_LCHuv' : ['RGB']
-	};
-
-
-	return this;
-}
-
-dojo.graphics.Colorspace.prototype.convert = function(col, model_from, model_to){
-
-	var k = model_from+'_to_'+model_to;
-
-	if (this[k]){
-		return this[k](col);
-	}else{
-		if (this.chainMaps[k]){
-
-			var cur = model_from;
-			var models = this.chainMaps[k].concat();
-			models.push(model_to);
-
-			for(var i=0; i<models.length; i++){
-
-				col = this.convert(col, cur, models[i]);
-				cur = models[i];
-			}
-
-			return col;
-
-		}else{
-
-			dojo.debug("Can't convert from "+model_from+' to '+model_to);
-		}
-	}
-}
-
-dojo.graphics.Colorspace.prototype.munge = function(keys, args){
-
-	if (dojo.lang.isArray(args[0])){
-		args = args[0];
-	}
-
-	var out = new Array();
-
-	for (var i=0; i<keys.length; i++){
-		out[keys.charAt(i)] = args[i];
-	}
-
-	return out;
-}
-
-dojo.graphics.Colorspace.prototype.getWhitePoint = function(){
-
-	var x = 0;
-	var y = 0;
-	var t = 0;
-
-	// ref: http://en.wikipedia.org/wiki/White_point
-	// TODO: i need some good/better white point values
-
-	switch(this.stdObserver){
-		case '2' :
-			switch(this.whitePoint){
-				case 'E'   : x=1/3    ; y=1/3    ; t=5400; break; //Equal energy
-				case 'D50' : x=0.34567; y=0.35850; t=5000; break;
-				case 'D55' : x=0.33242; y=0.34743; t=5500; break;
-				case 'D65' : x=0.31271; y=0.32902; t=6500; break;
-				case 'D75' : x=0.29902; y=0.31485; t=7500; break;
-				case 'A'   : x=0.44757; y=0.40745; t=2856; break; //Incandescent tungsten
-				case 'B'   : x=0.34842; y=0.35161; t=4874; break;
-				case 'C'   : x=0.31006; y=0.31616; t=6774; break;
-				case '9300': x=0.28480; y=0.29320; t=9300; break; //Blue phosphor monitors
-				case 'F2'  : x=0.37207; y=0.37512; t=4200; break; //Cool White Fluorescent
-				case 'F7'  : x=0.31285; y=0.32918; t=6500; break; //Narrow Band Daylight Fluorescent
-				case 'F11' : x=0.38054; y=0.37691; t=4000; break; //Narrow Band White Fluorescent
-				default: dojo.debug('White point '+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-			};
-			break;
-		case '10' :
-			switch(this.whitePoint){
-				case 'E'   : x=1/3    ; y=1/3    ; t=5400; break; //Equal energy
-				case 'D50' : x=0.34773; y=0.35952; t=5000; break;
-				case 'D55' : x=0.33411; y=0.34877; t=5500; break;
-				case 'D65' : x=0.31382; y=0.33100; t=6500; break;
-				case 'D75' : x=0.29968; y=0.31740; t=7500; break;
-				case 'A'   : x=0.45117; y=0.40594; t=2856; break; //Incandescent tungsten
-				case 'B'   : x=0.3498 ; y=0.3527 ; t=4874; break;
-				case 'C'   : x=0.31039; y=0.31905; t=6774; break;
-				case 'F2'  : x=0.37928; y=0.36723; t=4200; break; //Cool White Fluorescent
-				case 'F7'  : x=0.31565; y=0.32951; t=6500; break; //Narrow Band Daylight Fluorescent
-				case 'F11' : x=0.38543; y=0.37110; t=4000; break; //Narrow Band White Fluorescent
-				default: dojo.debug('White point '+this.whitePoint+" isn't defined for Std. Observer "+this.strObserver);
-			};
-			break;
-		default:
-			dojo.debug("Std. Observer "+this.strObserver+" isn't defined");
-	}
-
-	var z = 1 - x - y;
-
-	var wp = {'x':x, 'y':y, 'z':z, 't':t};
-
-	wp.Y = 1;
-
-	var XYZ = this.xyY_to_XYZ([wp.x, wp.y, wp.Y]);
-
-	wp.X = XYZ[0];
-	wp.Y = XYZ[1];
-	wp.Z = XYZ[2];
-
-	return wp
-}
-
-dojo.graphics.Colorspace.prototype.getPrimaries = function(){
-
-	// ref: http://www.fho-emden.de/~hoffmann/ciexyz29082000.pdf
-	// ref: http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html
-
-	var m = [];
-
-	switch(this.RGBWorkingSpace){
-
-		case 'adobe_rgb_1998'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.297361, 0.2100, 0.7100, 0.627355, 0.1500, 0.0600, 0.075285]; break;
-		case 'apple_rgb'	: m = [1.8, 'D65', 0.6250, 0.3400, 0.244634, 0.2800, 0.5950, 0.672034, 0.1550, 0.0700, 0.083332]; break;
-		case 'best_rgb'		: m = [2.2, 'D50', 0.7347, 0.2653, 0.228457, 0.2150, 0.7750, 0.737352, 0.1300, 0.0350, 0.034191]; break;
-		case 'beta_rgb'		: m = [2.2, 'D50', 0.6888, 0.3112, 0.303273, 0.1986, 0.7551, 0.663786, 0.1265, 0.0352, 0.032941]; break;
-		case 'bruce_rgb'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.240995, 0.2800, 0.6500, 0.683554, 0.1500, 0.0600, 0.075452]; break;
-		case 'cie_rgb'		: m = [2.2, 'E'  , 0.7350, 0.2650, 0.176204, 0.2740, 0.7170, 0.812985, 0.1670, 0.0090, 0.010811]; break;
-		case 'color_match_rgb'	: m = [1.8, 'D50', 0.6300, 0.3400, 0.274884, 0.2950, 0.6050, 0.658132, 0.1500, 0.0750, 0.066985]; break;
-		case 'don_rgb_4'	: m = [2.2, 'D50', 0.6960, 0.3000, 0.278350, 0.2150, 0.7650, 0.687970, 0.1300, 0.0350, 0.033680]; break;
-		case 'eci_rgb'		: m = [1.8, 'D50', 0.6700, 0.3300, 0.320250, 0.2100, 0.7100, 0.602071, 0.1400, 0.0800, 0.077679]; break;
-		case 'ekta_space_ps5'	: m = [2.2, 'D50', 0.6950, 0.3050, 0.260629, 0.2600, 0.7000, 0.734946, 0.1100, 0.0050, 0.004425]; break;
-		case 'ntsc_rgb'		: m = [2.2, 'C'  , 0.6700, 0.3300, 0.298839, 0.2100, 0.7100, 0.586811, 0.1400, 0.0800, 0.114350]; break;
-		case 'pal_secam_rgb'	: m = [2.2, 'D65', 0.6400, 0.3300, 0.222021, 0.2900, 0.6000, 0.706645, 0.1500, 0.0600, 0.071334]; break;
-		case 'pro_photo_rgb'	: m = [1.8, 'D50', 0.7347, 0.2653, 0.288040, 0.1596, 0.8404, 0.711874, 0.0366, 0.0001, 0.000086]; break;
-		case 'smpte-c_rgb'	: m = [2.2, 'D65', 0.6300, 0.3400, 0.212395, 0.3100, 0.5950, 0.701049, 0.1550, 0.0700, 0.086556]; break;
-		case 's_rgb'		: m = [2.2, 'D65', 0.6400, 0.3300, 0.212656, 0.3000, 0.6000, 0.715158, 0.1500, 0.0600, 0.072186]; break;
-		case 'wide_gamut_rgb'	: m = [2.2, 'D50', 0.7350, 0.2650, 0.258187, 0.1150, 0.8260, 0.724938, 0.1570, 0.0180, 0.016875]; break;
-
-		default: dojo.debug("RGB working space "+this.RGBWorkingSpace+" isn't defined");
-	}
-
-	var p = {};
-
-	p.name = this.RGBWorkingSpace;
-	p.gamma = m[0];
-	p.wp = m[1];
-
-	p.xr = m[2];
-	p.yr = m[3];
-	p.Yr = m[4];
-
-	p.xg = m[5];
-	p.yg = m[6];
-	p.Yg = m[7];
-
-	p.xb = m[8];
-	p.yb = m[9];
-	p.Yb = m[10];
-
-	// if WP doesn't match current WP, convert the primaries over
-
-	if (p.wp != this.whitePoint){
-
-		var r = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xr, p.yr, p.Yr]), p.wp, this.whitePoint ) );
-		var g = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xg, p.yg, p.Yg]), p.wp, this.whitePoint ) );
-		var b = this.XYZ_to_xyY( this.chromaticAdaptation( this.xyY_to_XYZ([p.xb, p.yb, p.Yb]), p.wp, this.whitePoint ) );
-
-		p.xr = r[0];
-		p.yr = r[1];
-		p.Yr = r[2];
-
-		p.xg = g[0];
-		p.yg = g[1];
-		p.Yg = g[2];
-
-		p.xb = b[0];
-		p.yb = b[1];
-		p.Yb = b[2];
-
-		p.wp = this.whitePoint;
-	}
-
-	p.zr = 1 - p.xr - p.yr;
-	p.zg = 1 - p.xg - p.yg;
-	p.zb = 1 - p.xb - p.yb;
-
-	return p;
-}
-
-dojo.graphics.Colorspace.prototype.epsilon = function(){
-
-	return this.useApproxCIELabMapping ? 0.008856 : 216 / 24289;
-}
-
-dojo.graphics.Colorspace.prototype.kappa = function(){
-
-	return this.useApproxCIELabMapping ? 903.3 : 24389 / 27;
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_xyY = function(){
-	var src = this.munge('XYZ', arguments);
-
-	var sum = src.X + src.Y + src.Z;
-
-	if (sum == 0){
-
-		var wp = this.getWhitePoint();
-		var x = wp.x;
-		var y = wp.y;
-	}else{
-		var x = src.X / sum;
-		var y = src.Y / sum;
-	}
-
-	var Y = src.Y;
-
-
-	return [x, y, Y];
-}
-
-dojo.graphics.Colorspace.prototype.xyY_to_XYZ = function(){
-	var src = this.munge('xyY', arguments);
-
-	if (src.y == 0){
-
-		var X = 0;
-		var Y = 0;
-		var Z = 0;
-	}else{
-		var X = (src.x * src.Y) / src.y;
-		var Y = src.Y;
-		var Z = ((1 - src.x - src.y) * src.Y) / src.y;
-	}
-
-	return [X, Y, Z];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_XYZ = function(){
-	var src = this.munge('RGB', arguments);
-
-	var m = this.getRGB_XYZ_Matrix();
-	var pr = this.getPrimaries();
-
-	if (this.RGBWorkingSpace == 's_rgb'){
-
-		var r = (src.R > 0.04045) ? Math.pow(((src.R + 0.055) / 1.055), 2.4) : src.R / 12.92;
-		var g = (src.G > 0.04045) ? Math.pow(((src.G + 0.055) / 1.055), 2.4) : src.G / 12.92;
-		var b = (src.B > 0.04045) ? Math.pow(((src.B + 0.055) / 1.055), 2.4) : src.B / 12.92;
-
-	}else{
-
-		var r = Math.pow(src.R, pr.gamma);
-		var g = Math.pow(src.G, pr.gamma);
-		var b = Math.pow(src.B, pr.gamma);
-	}
-
-	var XYZ = dojo.math.matrix.multiply([[r, g, b]], m);
-
-	return [XYZ[0][0], XYZ[0][1], XYZ[0][2]];
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_RGB = function(){
-	var src = this.munge('XYZ', arguments);
-
-	var mi = this.getXYZ_RGB_Matrix();
-	var pr = this.getPrimaries();
-
-	var rgb = dojo.math.matrix.multiply([[src.X, src.Y, src.Z]], mi);
-	var r = rgb[0][0];
-	var g = rgb[0][1];
-	var b = rgb[0][2];
-
-	if (this.RGBWorkingSpace == 's_rgb'){
-
-		var R = (r > 0.0031308) ? (1.055 * Math.pow(r, 1.0/2.4)) - 0.055 : 12.92 * r;
-		var G = (g > 0.0031308) ? (1.055 * Math.pow(g, 1.0/2.4)) - 0.055 : 12.92 * g;
-		var B = (b > 0.0031308) ? (1.055 * Math.pow(b, 1.0/2.4)) - 0.055 : 12.92 * b;
-	}else{
-		var R = Math.pow(r, 1/pr.gamma);
-		var G = Math.pow(g, 1/pr.gamma);
-		var B = Math.pow(b, 1/pr.gamma);
-	}
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_Lab = function(){
-	var src = this.munge('XYZ', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var xr = src.X / wp.X;
-	var yr = src.Y / wp.Y;
-	var zr = src.Z / wp.Z;
-
-	var fx = (xr > this.epsilon()) ? Math.pow(xr, 1/3) : (this.kappa() * xr + 16) / 116;
-	var fy = (yr > this.epsilon()) ? Math.pow(yr, 1/3) : (this.kappa() * yr + 16) / 116;
-	var fz = (zr > this.epsilon()) ? Math.pow(zr, 1/3) : (this.kappa() * zr + 16) / 116;
-
-	var L = 116 * fy - 16;
-	var a = 500 * (fx - fy);
-	var b = 200 * (fy - fz);
-
-	return [L, a, b];
-}
-
-dojo.graphics.Colorspace.prototype.Lab_to_XYZ = function(){
-	var src = this.munge('Lab', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var yr = (src.L > (this.kappa() * this.epsilon())) ? Math.pow((src.L + 16) / 116, 3) : src.L / this.kappa();
-
-	var fy = (yr > this.epsilon()) ? (src.L + 16) / 116 : (this.kappa() * yr + 16) / 116;
-
-	var fx = (src.a / 500) + fy;
-	var fz = fy - (src.b / 200);
-
-	var fxcube = Math.pow(fx, 3);
-	var fzcube = Math.pow(fz, 3);
-
-	var xr = (fxcube > this.epsilon()) ? fxcube : (116 * fx - 16) / this.kappa();
-	var zr = (fzcube > this.epsilon()) ? fzcube : (116 * fz - 16) / this.kappa();
-
-	var X = xr * wp.X;
-	var Y = yr * wp.Y;
-	var Z = zr * wp.Z;
-
-	return [X, Y, Z];
-}
-
-dojo.graphics.Colorspace.prototype.Lab_to_LCHab = function(){
-	var src = this.munge('Lab', arguments);
-
-	var L = src.L;
-	var C = Math.pow(src.a * src.a + src.b * src.b, 0.5);
-	var H = Math.atan2(src.b, src.a) * (180 / Math.PI);
-
-	if (H < 0){ H += 360; }
-	if (H > 360){ H -= 360; }
-
-	return [L, C, H];
-}
-
-dojo.graphics.Colorspace.prototype.LCHab_to_Lab = function(){
-	var src = this.munge('LCH', arguments);
-
-	var H_rad = src.H * (Math.PI / 180);
-
-	var L = src.L;
-
-	var a = src.C / Math.pow(Math.pow(Math.tan(H_rad), 2) + 1, 0.5);
-	if ((90 < src.H) && (src.H < 270)){ a= -a; }
-
-	var b = Math.pow(Math.pow(src.C, 2) - Math.pow(a, 2), 0.5);
-	if (src.H > 180){ b = -b; }
-
-	return [L, a, b];
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// this function converts an XYZ color array (col) from one whitepoint (src_w) to another (dst_w)
-//
-
-dojo.graphics.Colorspace.prototype.chromaticAdaptation = function(col, src_w, dst_w){
-
-	col = this.munge('XYZ', [col]);
-
-	//
-	// gather white point data for the source and dest
-	//
-
-	var old_wp = this.whitePoint;
-
-	this.whitePoint = src_w;
-	var wp_src = this.getWhitePoint();
-
-	this.whitePoint = dst_w;
-	var wp_dst = this.getWhitePoint();
-
-	this.whitePoint = old_wp;
-
-
-	//
-	// get a transformation matricies
-	//
-
-	switch(this.chromaticAdaptationAlg){
-		case 'xyz_scaling':
-			var ma = [[1,0,0],[0,1,0],[0,0,1]];
-			var mai = [[1,0,0],[0,1,0],[0,0,1]];
-			break;
-		case 'bradford':
-			var ma = [[0.8951, -0.7502, 0.0389],[0.2664, 1.7135, -0.0685],[-0.1614, 0.0367, 1.0296]];
-			var mai = [[0.986993, 0.432305, -0.008529],[-0.147054, 0.518360, 0.040043],[0.159963, 0.049291, 0.968487]];
-			break;
-		case 'von_kries':
-			var ma = [[0.40024, -0.22630, 0.00000],[0.70760, 1.16532, 0.00000],[-0.08081, 0.04570, 0.91822]]
-			var mai = [[1.859936, 0.361191, 0.000000],[-1.129382, 0.638812, 0.000000],[0.219897, -0.000006, 1.089064]]
-			break;
-		default:
-			dojo.debug("The "+this.chromaticAdaptationAlg+" chromatic adaptation algorithm matricies are not defined");
-	}
-
-
-	//
-	// calculate the cone response domains
-	//
-
-	var domain_src = dojo.math.matrix.multiply( [[wp_src.x, wp_src.y, wp_src.z]], ma);
-	var domain_dst = dojo.math.matrix.multiply( [[wp_dst.x, wp_dst.y, wp_dst.z]], ma);
-
-
-	//
-	// construct the centre matrix
-	//
-
-	var centre = [
-		[domain_dst[0][0]/domain_src[0][0], 0, 0],
-		[0, domain_dst[0][1]/domain_src[0][1], 0],
-		[0, 0, domain_dst[0][2]/domain_src[0][2]]
-	];
-
-
-	//
-	// caclulate 'm'
-	//
-
-	var m = dojo.math.matrix.multiply( dojo.math.matrix.multiply( ma, centre ), mai );
-
-
-	//
-	// construct source color matrix
-	//
-
-	var dst = dojo.math.matrix.multiply( [[ col.X, col.Y, col.Z ]], m );
-
-	return dst[0];
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-
-dojo.graphics.Colorspace.prototype.getRGB_XYZ_Matrix = function(){
-
-	var wp = this.getWhitePoint();
-	var pr = this.getPrimaries();
-
-	var Xr = pr.xr / pr.yr;
-	var Yr = 1;
-	var Zr = (1 - pr.xr - pr.yr) / pr.yr;
-
-	var Xg = pr.xg / pr.yg;
-	var Yg = 1;
-	var Zg = (1 - pr.xg - pr.yg) / pr.yg;
-
-	var Xb = pr.xb / pr.yb;
-	var Yb = 1;
-	var Zb = (1 - pr.xb - pr.yb) / pr.yb;
-
-	var m1 = [[Xr, Yr, Zr],[Xg, Yg, Zg],[Xb, Yb, Zb]];
-	var m2 = [[wp.X, wp.Y, wp.Z]];
-	var sm = dojo.math.matrix.multiply(m2, dojo.math.matrix.inverse(m1));
-
-	var Sr = sm[0][0];
-	var Sg = sm[0][1];
-	var Sb = sm[0][2];
-
-	var m4 = [[Sr*Xr, Sr*Yr, Sr*Zr],
-		  [Sg*Xg, Sg*Yg, Sg*Zg],
-		  [Sb*Xb, Sb*Yb, Sb*Zb]];
-
-	return m4;
-}
-
-dojo.graphics.Colorspace.prototype.getXYZ_RGB_Matrix = function(){
-
-	var m = this.getRGB_XYZ_Matrix();
-
-	return dojo.math.matrix.inverse(m);
-}
-
-dojo.graphics.Colorspace.prototype.XYZ_to_Luv = function(){
-
-	var src = this.munge('XYZ', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var ud = (4 * src.X) / (src.X + 15 * src.Y + 3 * src.Z);
-	var vd = (9 * src.Y) / (src.X + 15 * src.Y + 3 * src.Z);
-
-	var udr = (4 * wp.X) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-	var vdr = (9 * wp.Y) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-
-	var yr = src.Y / wp.Y;
-
-	var L = (yr > this.epsilon()) ? 116 * Math.pow(yr, 1/3) - 16 : this.kappa() * yr;
-	var u = 13 * L * (ud-udr);
-	var v = 13 * L * (vd-vdr);
-
-	return [L, u, v];
-}
-
-dojo.graphics.Colorspace.prototype.Luv_to_XYZ = function(){
-
-	var src = this.munge('Luv', arguments);
-
-	var wp = this.getWhitePoint();
-
-	var uz = (4 * wp.X) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-	var vz = (9 * wp.Y) / (wp.X + 15 * wp.Y + 3 * wp.Z);
-
-	var Y = (src.L > this.kappa() * this.epsilon()) ? Math.pow((src.L + 16) / 116, 3) : src.L / this.kappa();
-
-	var a = (1 / 3) * (((52 * src.L) / (src.u + 13 * src.L * uz)) - 1);
-	var b = -5 * Y;
-	var c = - (1 / 3);
-	var d = Y * (((39 * src.L) / (src.v + 13 * src.L * vz)) - 5);
-
-	var X = (d - b) / (a - c);
-	var Z = X * a + b;
-
-	return [X, Y, Z];
-}
-
-dojo.graphics.Colorspace.prototype.Luv_to_LCHuv = function(){
-
-	var src = this.munge('Luv', arguments);
-
-	var L = src.L;
-	var C = Math.pow(src.u * src.u + src.v * src.v, 0.5);
-	var H = Math.atan2(src.v, src.u) * (180 / Math.PI);
-
-	if (H < 0){ H += 360; }
-	if (H > 360){ H -= 360; }
-
-	return [L, C, H];
-}
-
-dojo.graphics.Colorspace.prototype.LCHuv_to_Luv = function(){
-
-	var src = this.munge('LCH', arguments);
-
-	var H_rad = src.H * (Math.PI / 180);
-
-	var L = src.L;
-	var u = src.C / Math.pow(Math.pow(Math.tan(H_rad), 2) + 1, 0.5);
-	var v = Math.pow(src.C * src.C - u * u, 0.5);
-
-	if ((90 < src.H) && (src.H < 270)){ u *= -1; }
-	if (src.H > 180){ v *= -1; }
-
-	return [L, u, v];
-}
-
-dojo.graphics.Colorspace.colorTemp_to_whitePoint = function(T){
-
-	if (T < 4000){
-		dojo.debug("Can't find a white point for temperatures under 4000K");
-		return [0,0];
-	}
-
-	if (T > 25000){
-		dojo.debug("Can't find a white point for temperatures over 25000K");
-		return [0,0];
-	}
-
-	var T1 = T;
-	var T2 = T * T;
-	var T3 = T2 * T;
-
-	var ten9 = Math.pow(10, 9);
-	var ten6 = Math.pow(10, 6);
-	var ten3 = Math.pow(10, 3);
-
-	if (T <= 7000){
-
-		var x = (-4.6070 * ten9 / T3) + (2.9678 * ten6 / T2) + (0.09911 * ten3 / T) + 0.244063;
-	}else{
-		var x = (-2.0064 * ten9 / T3) + (1.9018 * ten6 / T2) + (0.24748 * ten3 / T) + 0.237040;
-	}
-
-	var y = -3.000 * x * x + 2.870 * x - 0.275;
-
-	return [x, y];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_CMY = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	var C = 1 - src.R;
-	var M = 1 - src.G;
-	var Y = 1 - src.B;
-
-	return [C, M, Y];
-}
-
-dojo.graphics.Colorspace.prototype.CMY_to_RGB = function(){
-
-	var src = this.munge('CMY', arguments);
-
-	var R = 1 - src.C;
-	var G = 1 - src.M;
-	var B = 1 - src.Y;
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_CMYK = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	var K = Math.min(1-src.R, 1-src.G, 1-src.B);
-	var C = (1 - src.R - K) / (1 - K);
-	var M = (1 - src.G - K) / (1 - K);
-	var Y = (1 - src.B - K) / (1 - K);
-
-	return [C, M, Y, K];
-}
-
-dojo.graphics.Colorspace.prototype.CMYK_to_RGB = function(){
-
-	var src = this.munge('CMYK', arguments);
-
-	var R = 1 - Math.min(1, src.C * (1-src.K) + src.K);
-	var G = 1 - Math.min(1, src.M * (1-src.K) + src.K);
-	var B = 1 - Math.min(1, src.Y * (1-src.K) + src.K);
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.CMY_to_CMYK = function(){
-
-	var src = this.munge('CMY', arguments);
-
-	var K = Math.min(src.C, src.M, src.Y);
-	var C = (src.C - K) / (1 - K);
-	var M = (src.M - K) / (1 - K);
-	var Y = (src.Y - K) / (1 - K);
-
-	return [C, M, Y, K];
-}
-
-dojo.graphics.Colorspace.prototype.CMYK_to_CMY = function(){
-
-	var src = this.munge('CMYK', arguments);
-
-	var C = Math.min(1, src.C * (1-src.K) + src.K);
-	var M = Math.min(1, src.M * (1-src.K) + src.K);
-	var Y = Math.min(1, src.Y * (1-src.K) + src.K);
-
-	return [C, M, Y];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_HSV = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 592. 
-
-	var min = Math.min(src.R, src.G, src.B);
-	var V = Math.max(src.R, src.G, src.B);
-
-	var delta = V - min;
-
-	var H = null;
-	var S = (V == 0) ? 0 : delta / V;
-
-	if (S == 0){
-		H = 0;
-	}else{
-		if (src.R == V){
-			H = 60 * (src.G - src.B) / delta;
-		}else{
-			if (src.G == V){
-				H = 120 + 60 * (src.B - src.R) / delta;
-			}else{
-				if (src.B == V){
-					// between magenta and cyan
-					H = 240 + 60 * (src.R - src.G) / delta;
-				}
-			}
-		}
-		if (H < 0){
-			H += 360;
-		}
-	}
-
-	H = (H == 0) ? 360 : H;
-
-	return [H, S, V];
-}
-
-dojo.graphics.Colorspace.prototype.HSV_to_RGB = function(){
- 
-	var src = this.munge('HSV', arguments);
-
-	if (src.H == 360){ src.H = 0;}
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 593.
-
-	var r = null;
-	var g = null;
-	var b = null;
-
-	if (src.S == 0){
-		// color is on black-and-white center line
-		// achromatic: shades of gray
-		var R = src.V;
-		var G = src.V;
-		var B = src.V;
-	}else{
-		// chromatic color
-		var hTemp = src.H / 60;		// h is now IN [0,6]
-		var i = Math.floor(hTemp);	// largest integer <= h
-		var f = hTemp - i;		// fractional part of h
-
-		var p = src.V * (1 - src.S);
-		var q = src.V * (1 - (src.S * f));
-		var t = src.V * (1 - (src.S * (1 - f)));
-
-		switch(i){
-			case 0: R = src.V; G = t    ; B = p    ; break;
-			case 1: R = q    ; G = src.V; B = p    ; break;
-			case 2: R = p    ; G = src.V; B = t    ; break;
-			case 3: R = p    ; G = q    ; B = src.V; break;
-			case 4: R = t    ; G = p    ; B = src.V; break;
-			case 5: R = src.V; G = p    ; B = q    ; break;
-		}
-	}
-
-	return [R, G, B];
-}
-
-dojo.graphics.Colorspace.prototype.RGB_to_HSL = function(){
-
-	var src = this.munge('RGB', arguments);
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-
-	var min = Math.min(src.R, src.G, src.B);
-	var max = Math.max(src.R, src.G, src.B);
-	var delta = max - min;
-
-	var H = 0;
-	var S = 0;
-	var L = (min + max) / 2;
-
-	if ((L > 0) && (L < 1)){
-		S = delta / ((L < 0.5) ? (2 * L) : (2 - 2 * L));
-	}
-
-	if (delta > 0) {
-		if ((max == src.R) && (max != src.G)){
-			H += (src.G - src.B) / delta;
-		}
-		if ((max == src.G) && (max != src.B)){
-			H += (2 + (src.B - src.R) / delta);
-		}
-		if ((max == src.B) && (max != src.R)){
-			H += (4 + (src.R - src.G) / delta);
-		}
-		H *= 60;
-	}
-
-	H = (H == 0) ? 360 : H;
-
-	return [H, S, L];
-}
-
-dojo.graphics.Colorspace.prototype.HSL_to_RGB = function(){
- 
-	var src = this.munge('HSL', arguments);
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-	while (src.H < 0){ src.H += 360; }
-	while (src.H >= 360){ src.H -= 360; }
-
-	var R = 0;
-	var G = 0;
-	var B = 0;
-
-	if (src.H < 120){
-		R = (120 - src.H) / 60;
-		G = src.H / 60;
-		B = 0;
-	}else if (src.H < 240){
-		R = 0;
-		G = (240 - src.H) / 60;
-		B = (src.H - 120) / 60;
-	}else{
-		R = (src.H - 240) / 60;
-		G = 0;
-		B = (360 - src.H) / 60;
-	}
-
-	R = 2 * src.S * Math.min(R, 1) + (1 - src.S);
-	G = 2 * src.S * Math.min(G, 1) + (1 - src.S);
-	B = 2 * src.S * Math.min(B, 1) + (1 - src.S);
-
-	if (src.L < 0.5){
-		R = src.L * R;
-		G = src.L * G;
-		B = src.L * B;
-	}else{
-		R = (1 - src.L) * R + 2 * src.L - 1;
-		G = (1 - src.L) * G + 2 * src.L - 1;
-		B = (1 - src.L) * B + 2 * src.L - 1;
-	}
-
-	return [R, G, B];
-}

+ 0 - 15
main/inc/lib/javascript/dojo/src/graphics/__package__.js

@@ -1,15 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.kwCompoundRequire({
-	browser:	["dojo.graphics.htmlEffects"],
-	dashboard:	["dojo.graphics.htmlEffects"]
-});
-dojo.provide("dojo.graphics.*");

+ 0 - 166
main/inc/lib/javascript/dojo/src/graphics/color.js

@@ -1,166 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.graphics.color");
-dojo.require("dojo.lang.array");
-
-// TODO: rewrite the "x2y" methods to take advantage of the parsing
-//       abilities of the Color object. Also, beef up the Color
-//       object (as possible) to parse most common formats
-
-// takes an r, g, b, a(lpha) value, [r, g, b, a] array, "rgb(...)" string, hex string (#aaa, #aaaaaa, aaaaaaa)
-dojo.graphics.color.Color = function(r, g, b, a) {
-	// dojo.debug("r:", r[0], "g:", r[1], "b:", r[2]);
-	if(dojo.lang.isArray(r)) {
-		this.r = r[0];
-		this.g = r[1];
-		this.b = r[2];
-		this.a = r[3]||1.0;
-	} else if(dojo.lang.isString(r)) {
-		var rgb = dojo.graphics.color.extractRGB(r);
-		this.r = rgb[0];
-		this.g = rgb[1];
-		this.b = rgb[2];
-		this.a = g||1.0;
-	} else if(r instanceof dojo.graphics.color.Color) {
-		this.r = r.r;
-		this.b = r.b;
-		this.g = r.g;
-		this.a = r.a;
-	} else {
-		this.r = r;
-		this.g = g;
-		this.b = b;
-		this.a = a;
-	}
-}
-
-dojo.graphics.color.Color.fromArray = function(arr) {
-	return new dojo.graphics.color.Color(arr[0], arr[1], arr[2], arr[3]);
-}
-
-dojo.lang.extend(dojo.graphics.color.Color, {
-	toRgb: function(includeAlpha) {
-		if(includeAlpha) {
-			return this.toRgba();
-		} else {
-			return [this.r, this.g, this.b];
-		}
-	},
-
-	toRgba: function() {
-		return [this.r, this.g, this.b, this.a];
-	},
-
-	toHex: function() {
-		return dojo.graphics.color.rgb2hex(this.toRgb());
-	},
-
-	toCss: function() {
-		return "rgb(" + this.toRgb().join() + ")";
-	},
-
-	toString: function() {
-		return this.toHex(); // decent default?
-	},
-
-	blend: function(color, weight) {
-		return dojo.graphics.color.blend(this.toRgb(), new dojo.graphics.color.Color(color).toRgb(), weight);
-	}
-});
-
-dojo.graphics.color.named = {
-	white:      [255,255,255],
-	black:      [0,0,0],
-	red:        [255,0,0],
-	green:	    [0,255,0],
-	blue:       [0,0,255],
-	navy:       [0,0,128],
-	gray:       [128,128,128],
-	silver:     [192,192,192]
-};
-
-// blend colors a and b (both as RGB array or hex strings) with weight from -1 to +1, 0 being a 50/50 blend
-dojo.graphics.color.blend = function(a, b, weight) {
-	if(typeof a == "string") { return dojo.graphics.color.blendHex(a, b, weight); }
-	if(!weight) { weight = 0; }
-	else if(weight > 1) { weight = 1; }
-	else if(weight < -1) { weight = -1; }
-	var c = new Array(3);
-	for(var i = 0; i < 3; i++) {
-		var half = Math.abs(a[i] - b[i])/2;
-		c[i] = Math.floor(Math.min(a[i], b[i]) + half + (half * weight));
-	}
-	return c;
-}
-
-// very convenient blend that takes and returns hex values
-// (will get called automatically by blend when blend gets strings)
-dojo.graphics.color.blendHex = function(a, b, weight) {
-	return dojo.graphics.color.rgb2hex(dojo.graphics.color.blend(dojo.graphics.color.hex2rgb(a), dojo.graphics.color.hex2rgb(b), weight));
-}
-
-// get RGB array from css-style color declarations
-dojo.graphics.color.extractRGB = function(color) {
-	var hex = "0123456789abcdef";
-	color = color.toLowerCase();
-	if( color.indexOf("rgb") == 0 ) {
-		var matches = color.match(/rgba*\((\d+), *(\d+), *(\d+)/i);
-		var ret = matches.splice(1, 3);
-		return ret;
-	} else {
-		var colors = dojo.graphics.color.hex2rgb(color);
-		if(colors) {
-			return colors;
-		} else {
-			// named color (how many do we support?)
-			return dojo.graphics.color.named[color] || [255, 255, 255];
-		}
-	}
-}
-
-dojo.graphics.color.hex2rgb = function(hex) {
-	var hexNum = "0123456789ABCDEF";
-	var rgb = new Array(3);
-	if( hex.indexOf("#") == 0 ) { hex = hex.substring(1); }
-	hex = hex.toUpperCase();
-	if(hex.replace(new RegExp("["+hexNum+"]", "g"), "") != "") {
-		return null;
-	}
-	if( hex.length == 3 ) {
-		rgb[0] = hex.charAt(0) + hex.charAt(0)
-		rgb[1] = hex.charAt(1) + hex.charAt(1)
-		rgb[2] = hex.charAt(2) + hex.charAt(2);
-	} else {
-		rgb[0] = hex.substring(0, 2);
-		rgb[1] = hex.substring(2, 4);
-		rgb[2] = hex.substring(4);
-	}
-	for(var i = 0; i < rgb.length; i++) {
-		rgb[i] = hexNum.indexOf(rgb[i].charAt(0)) * 16 + hexNum.indexOf(rgb[i].charAt(1));
-	}
-	return rgb;
-}
-
-dojo.graphics.color.rgb2hex = function(r, g, b) {
-	if(dojo.lang.isArray(r)) {
-		g = r[1] || 0;
-		b = r[2] || 0;
-		r = r[0] || 0;
-	}
-	var ret = dojo.lang.map([r, g, b], function(x) {
-		x = new Number(x);
-		var s = x.toString(16);
-		while(s.length < 2) { s = "0" + s; }
-		return s;
-	});
-	ret.unshift("#");
-	return ret.join("");
-}

+ 0 - 144
main/inc/lib/javascript/dojo/src/graphics/color/hsl.js

@@ -1,144 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.graphics.color.hsl");
-dojo.require("dojo.lang.array");
-
-dojo.lang.extend(dojo.graphics.color.Color, {
-
-	toHsl: function() {
-		return dojo.graphics.color.rgb2hsl(this.toRgb());
-	}
-});
-
-dojo.graphics.color.rgb2hsl = function(r, g, b){
-
-	if (dojo.lang.isArray(r)) {
-		b = r[2] || 0;
-		g = r[1] || 0;
-		r = r[0] || 0;
-	}
-
-	r /= 255;
-	g /= 255;
-	b /= 255;
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-	var h = null;
-	var s = null;
-	var l = null;
-
-
-	var min = Math.min(r, g, b);
-	var max = Math.max(r, g, b);
-	var delta = max - min;
-
-	l = (min + max) / 2;
-
-	s = 0;
-
-	if ((l > 0) && (l < 1)){
-		s = delta / ((l < 0.5) ? (2 * l) : (2 - 2 * l));
-	}
-
-	h = 0;
-
-	if (delta > 0) {
-		if ((max == r) && (max != g)){
-			h += (g - b) / delta;
-		}
-		if ((max == g) && (max != b)){
-			h += (2 + (b - r) / delta);
-		}
-		if ((max == b) && (max != r)){
-			h += (4 + (r - g) / delta);
-		}
-		h *= 60;
-	}
-
-	h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
-	s = Math.ceil(s * 255);
-	l = Math.ceil(l * 255);
-
-	return [h, s, l];
-}
-
-dojo.graphics.color.hsl2rgb = function(h, s, l){
- 
-	if (dojo.lang.isArray(h)) {
-		l = h[2] || 0;
-		s = h[1] || 0;
-		h = h[0] || 0;
-	}
-
-	h = (h / 255) * 360;
-	if (h == 360){ h = 0;}
-	s = s / 255;
-	l = l / 255;
-
-	//
-	// based on C code from http://astronomy.swin.edu.au/~pbourke/colour/hsl/
-	//
-
-
-	while (h < 0){ h += 360; }
-	while (h > 360){ h -= 360; }
-	var r, g, b;
-	if (h < 120){
-		r = (120 - h) / 60;
-		g = h / 60;
-		b = 0;
-	}else if (h < 240){
-		r = 0;
-		g = (240 - h) / 60;
-		b = (h - 120) / 60;
-	}else{
-		r = (h - 240) / 60;
-		g = 0;
-		b = (360 - h) / 60;
-	}
-
-	r = Math.min(r, 1);
-	g = Math.min(g, 1);
-	b = Math.min(b, 1);
-
-	r = 2 * s * r + (1 - s);
-	g = 2 * s * g + (1 - s);
-	b = 2 * s * b + (1 - s);
-
-	if (l < 0.5){
-		r = l * r;
-		g = l * g;
-		b = l * b;
-	}else{
-		r = (1 - l) * r + 2 * l - 1;
-		g = (1 - l) * g + 2 * l - 1;
-		b = (1 - l) * b + 2 * l - 1;
-	}
-
-	r = Math.ceil(r * 255);
-	g = Math.ceil(g * 255);
-	b = Math.ceil(b * 255);
-
-	return [r, g, b];
-}
-
-dojo.graphics.color.hsl2hex = function(h, s, l){
-	var rgb = dojo.graphics.color.hsl2rgb(h, s, l);
-	return dojo.graphics.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
-}
-
-dojo.graphics.color.hex2hsl = function(hex){
-	var rgb = dojo.graphics.color.hex2rgb(hex);
-	return dojo.graphics.color.rgb2hsl(rgb[0], rgb[1], rgb[2]);
-}

+ 0 - 141
main/inc/lib/javascript/dojo/src/graphics/color/hsv.js

@@ -1,141 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.provide("dojo.graphics.color.hsv");
-dojo.require("dojo.lang.array");
-
-dojo.lang.extend(dojo.graphics.color.Color, {
-
-	toHsv: function() {
-		return dojo.graphics.color.rgb2hsv(this.toRgb());
-	}
-
-});
-
-dojo.graphics.color.rgb2hsv = function(r, g, b){
-
-	if (dojo.lang.isArray(r)) {
-		b = r[2] || 0;
-		g = r[1] || 0;
-		r = r[0] || 0;
-	}
-
-	// r,g,b, each 0 to 255, to HSV.
-	// h = 0.0 to 360.0 (corresponding to 0..360.0 degrees around hexcone)
-	// s = 0.0 (shade of gray) to 1.0 (pure color)
-	// v = 0.0 (black) to 1.0 {white)
-	//
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 592. 
-	//
-	// our calculatuions are based on 'regular' values (0-360, 0-1, 0-1) 
-	// but we return bytes values (0-255, 0-255, 0-255)
-
-	var h = null;
-	var s = null;
-	var v = null;
-
-	var min = Math.min(r, g, b);
-	v = Math.max(r, g, b);
-
-	var delta = v - min;
-
-	// calculate saturation (0 if r, g and b are all 0)
-
-	s = (v == 0) ? 0 : delta/v;
-
-	if (s == 0){
-		// achromatic: when saturation is, hue is undefined
-		h = 0;
-	}else{
-		// chromatic
-		if (r == v){
-			// between yellow and magenta
-			h = 60 * (g - b) / delta;
-		}else{
-			if (g == v){
-				// between cyan and yellow
-				h = 120 + 60 * (b - r) / delta;
-			}else{
-				if (b == v){
-					// between magenta and cyan
-					h = 240 + 60 * (r - g) / delta;
-				}
-			}
-		}
-		if (h < 0){
-			h += 360;
-		}
-	}
-
-
-	h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
-	s = Math.ceil(s * 255);
-
-	return [h, s, v];
-}
-
-dojo.graphics.color.hsv2rgb = function(h, s, v){
- 
-	if (dojo.lang.isArray(h)) {
-		v = h[2] || 0;
-		s = h[1] || 0;
-		h = h[0] || 0;
-	}
-
-	h = (h / 255) * 360;
-	if (h == 360){ h = 0;}
-
-	s = s / 255;
-	v = v / 255;
-
-	// Based on C Code in "Computer Graphics -- Principles and Practice,"
-	// Foley et al, 1996, p. 593.
-	//
-	// H = 0.0 to 360.0 (corresponding to 0..360 degrees around hexcone) 0 for S = 0
-	// S = 0.0 (shade of gray) to 1.0 (pure color)
-	// V = 0.0 (black) to 1.0 (white)
-
-	var r = null;
-	var g = null;
-	var b = null;
-
-	if (s == 0){
-		// color is on black-and-white center line
-		// achromatic: shades of gray
-		r = v;
-		g = v;
-		b = v;
-	}else{
-		// chromatic color
-		var hTemp = h / 60;		// h is now IN [0,6]
-		var i = Math.floor(hTemp);	// largest integer <= h
-		var f = hTemp - i;		// fractional part of h
-
-		var p = v * (1 - s);
-		var q = v * (1 - (s * f));
-		var t = v * (1 - (s * (1 - f)));
-
-		switch(i){
-			case 0: r = v; g = t; b = p; break;
-			case 1: r = q; g = v; b = p; break;
-			case 2: r = p; g = v; b = t; break;
-			case 3: r = p; g = q; b = v; break;
-			case 4: r = t; g = p; b = v; break;
-			case 5: r = v; g = p; b = q; break;
-		}
-	}
-
-	r = Math.ceil(r * 255);
-	g = Math.ceil(g * 255);
-	b = Math.ceil(b * 255);
-
-	return [r, g, b];
-}

+ 0 - 571
main/inc/lib/javascript/dojo/src/hostenv_adobesvg.js

@@ -1,571 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * Adobe SVG Viewer host environment
- */
-if(typeof window == 'undefined'){
-	dojo.raise("attempt to use adobe svg hostenv when no window object");
-}
-
-with(dojo.render){
-	name = navigator.appName;
-	ver = parseFloat(navigator.appVersion, 10);
-	switch(navigator.platform){
-		case "MacOS":
-			os.osx =  true;
-			break;
-		case "Linux":
-			os.linux =  true;
-			break;
-		case "Windows":
-			os.win =  true;
-			break;
-		default:
-			os.linux = true;
-			break;
-	};
-	svg.capable = true;
-	svg.support.builtin = true;
-	svg.adobe = true;
-};
-
-// browserEval("alert(window.location);");
-
-dojo.hostenv.println = function(s){
-	try{
-    // FIXME: this may not work with adobe's viewer, as we may first need a 
-		// reference to the svgDocument
-		// FIXME: need a way to determine where to position the text for this
-    var ti = document.createElement("text");
-    ti.setAttribute("x","50");
-		var yPos = 25 + 15*document.getElementsByTagName("text").length;
-    ti.setAttribute("y",yPos);
-		var tn = document.createTextNode(s);
-		ti.appendChild(tn);
-		document.documentElement.appendChild(ti);
-	}catch(e){
-
-	}
-}
-
-dojo.debug = function() {
-	if (!djConfig.isDebug) { return; }
-	var args = arguments;
-	if(typeof dojo.hostenv.println != 'function'){
-		dojo.raise("attempt to call dojo.debug when there is no dojo.hostenv println implementation (yet?)");
-	}
-	var isJUM = dj_global["jum"];
-	var s = isJUM ? "": "DEBUG: ";
-	for(var i=0;i<args.length;++i){ s += args[i]; }
-	if(isJUM){ // this seems to be the only way to get JUM to "play nice"
-		jum.debug(s);
-	}else{
-		dojo.hostenv.println(s);
-	}
-}
-
-dojo.hostenv.startPackage("dojo.hostenv");
-
-dojo.hostenv.name_ = 'adobesvg';
-
-dojo.hostenv.anonCtr = 0;
-dojo.hostenv.anon = {};
-
-dojo.hostenv.nameAnonFunc = function(anonFuncPtr, namespaceObj){
-	var ret = "_"+this.anonCtr++;
-	var nso = (namespaceObj || this.anon);
-	while(typeof nso[ret] != "undefined"){
-		ret = "_"+this.anonCtr++;
-	}
-	nso[ret] = anonFuncPtr;
-	return ret;
-}
-
-dojo.hostenv.modulesLoadedFired = false;
-dojo.hostenv.modulesLoadedListeners = [];
-dojo.hostenv.getTextStack = [];
-dojo.hostenv.loadUriStack = [];
-dojo.hostenv.loadedUris = [];
-
-
-dojo.hostenv.modulesLoaded = function(){
-	if(this.modulesLoadedFired){ return; }
-	if((this.loadUriStack.length==0)&&(this.getTextStack.length==0)){
-		if(this.inFlightCount > 0){ 
-			dojo.debug("couldn't initialize, there are files still in flight");
-			return;
-		}
-		this.modulesLoadedFired = true;
-		var mll = this.modulesLoadedListeners;
-		for(var x=0; x<mll.length; x++){
-			mll[x]();
-		}
-	}
-}
-
-dojo.hostenv.getNewAnonFunc = function(){
-	var ret = "_"+this.anonCtr++;
-	while(typeof this.anon[ret] != "undefined"){
-		ret = "_"+this.anonCtr++;
-	}
-	// this.anon[ret] = function(){};
-	eval("dojo.nostenv.anon."+ret+" = function(){};");
-	return [ret, this.anon[ret]];
-}
-
-dojo.hostenv.displayStack = function(){
-	var oa = [];
-	var stack = this.loadUriStack;
-	for(var x=0; x<stack.length; x++){
-		oa.unshift([stack[x][0], (typeof stack[x][2])]);
-	}
-	dojo.debug("<pre>"+oa.join("\n")+"</pre>");
-}
-
-dojo.hostenv.unwindUriStack = function(){
-	var stack = this.loadUriStack;
-	for(var x in dojo.hostenv.loadedUris){
-		for(var y=stack.length-1; y>=0; y--){
-			if(stack[y][0]==x){
-				stack.splice(y, 1);
-			}
-		}
-	}
-	var next = stack.pop();
-	if((!next)&&(stack.length==0)){ 
-		return;
-	}
-	for(var x=0; x<stack.length; x++){
-		if((stack[x][0]==next[0])&&(stack[x][2])){
-			next[2] == stack[x][2]
-		}
-	}
-	var last = next;
-	while(dojo.hostenv.loadedUris[next[0]]){
-		last = next;
-		next = stack.pop();
-	}
-	while(typeof next[2] == "string"){ // unwind as far as we can
-		try{
-			// dojo.debug("<pre><![CDATA["+next[2]+"]]></pre>");
-			dj_eval(next[2]);
-			next[1](true);
-		}catch(e){
-			dojo.debug("we got an error when loading "+next[0]);
-			dojo.debug("error: "+e);
-			// for(var x in e){ alert(x+" "+e[x]); }
-		}
-		dojo.hostenv.loadedUris[next[0]] = true;
-		dojo.hostenv.loadedUris.push(next[0]);
-		last = next;
-		next = stack.pop();
-		if((!next)&&(stack.length==0)){ break; }
-		while(dojo.hostenv.loadedUris[next[0]]){
-			last = next;
-			next = stack.pop();
-		}
-	}
-	if(next){
-		stack.push(next);
-		dojo.debug("### CHOKED ON: "+next[0]);
-	}
-}
-
-/**
- * Reads the contents of the URI, and evaluates the contents.
- * Returns true if it succeeded. Returns false if the URI reading failed. Throws if the evaluation throws.
- * The result of the eval is not available to the caller.
- */
-dojo.hostenv.loadUri = function(uri, cb){
-	if(dojo.hostenv.loadedUris[uri]){
-		return;
-	}
-	var stack = this.loadUriStack;
-	stack.push([uri, cb, null]);
-	var tcb = function(contents){
-		// gratuitous hack for Adobe SVG 3, what a fucking POS
-		if(contents.content){
-			contents = contents.content;
-		}
-
-		// stack management
-		var next = stack.pop();
-		if((!next)&&(stack.length==0)){ 
-			dojo.hostenv.modulesLoaded();
-			return;
-		}
-		if(typeof contents == "string"){
-			stack.push(next);
-			for(var x=0; x<stack.length; x++){
-				if(stack[x][0]==uri){
-					stack[x][2] = contents;
-				}
-			}
-			next = stack.pop();
-		}
-		if(dojo.hostenv.loadedUris[next[0]]){ 
-			// dojo.debug("WE ALREADY HAD: "+next[0]);
-			dojo.hostenv.unwindUriStack();
-			return;
-		}
-		// push back onto stack
-		stack.push(next);
-		if(next[0]!=uri){
-			//  and then unwind as far as we can
-			if(typeof next[2] == "string"){
-				dojo.hostenv.unwindUriStack();
-			}
-
-		}else{
-			if(!contents){ 
-				next[1](false);
-			}else{
-				var deps = dojo.hostenv.getDepsForEval(next[2]);
-				if(deps.length>0){
-					eval(deps.join(";"));
-				}else{
-					dojo.hostenv.unwindUriStack();
-				}
-			}
-		}
-	}
-	this.getText(uri, tcb, true);
-}
-
-/**
- * Reads the contents of the URI, and evaluates the contents.
- * Returns true if it succeeded. Returns false if the URI reading failed. Throws if the evaluation throws.
- * The result of the eval is not available to the caller.
- */
-dojo.hostenv.loadUri = function(uri, cb){
-	if(dojo.hostenv.loadedUris[uri]){
-		return;
-	}
-	var stack = this.loadUriStack;
-	stack.push([uri, cb, null]);
-	var tcb = function(contents){
-		// gratuitous hack for Adobe SVG 3, what a fucking POS
-		if(contents.content){
-			contents = contents.content;
-		}
-
-		// stack management
-		var next = stack.pop();
-		if((!next)&&(stack.length==0)){ 
-			dojo.hostenv.modulesLoaded();
-			return;
-		}
-		if(typeof contents == "string"){
-			stack.push(next);
-			for(var x=0; x<stack.length; x++){
-				if(stack[x][0]==uri){
-					stack[x][2] = contents;
-				}
-			}
-			next = stack.pop();
-		}
-		if(dojo.hostenv.loadedUris[next[0]]){ 
-			// dojo.debug("WE ALREADY HAD: "+next[0]);
-			dojo.hostenv.unwindUriStack();
-			return;
-		}
-		// push back onto stack
-		stack.push(next);
-		if(next[0]!=uri){
-			//  and then unwind as far as we can
-			if(typeof next[2] == "string"){
-				dojo.hostenv.unwindUriStack();
-			}
-
-		}else{
-			if(!contents){ 
-				next[1](false);
-			}else{
-				var deps = dojo.hostenv.getDepsForEval(next[2]);
-				if(deps.length>0){
-					eval(deps.join(";"));
-				}else{
-					dojo.hostenv.unwindUriStack();
-				}
-			}
-		}
-	}
-	this.getText(uri, tcb, true);
-}
-
-/**
-* loadModule("A.B") first checks to see if symbol A.B is defined. 
-* If it is, it is simply returned (nothing to do).
-* If it is not defined, it will look for "A/B.js" in the script root directory, followed
-* by "A.js".
-* It throws if it cannot find a file to load, or if the symbol A.B is not defined after loading.
-* It returns the object A.B.
-*
-* This does nothing about importing symbols into the current package.
-* It is presumed that the caller will take care of that. For example, to import
-* all symbols:
-*
-*    with (dojo.hostenv.loadModule("A.B")) {
-*       ...
-*    }
-*
-* And to import just the leaf symbol:
-*
-*    var B = dojo.hostenv.loadModule("A.B");
-*    ...
-*
-* dj_load is an alias for dojo.hostenv.loadModule
-*/
-dojo.hostenv.loadModule = function(modulename, exact_only, omit_module_check){
-	// alert("dojo.hostenv.loadModule('"+modulename+"');");
-	var module = this.findModule(modulename, 0);
-	if(module){
-		return module;
-	}
-
-	// dojo.debug("dojo.hostenv.loadModule('"+modulename+"');");
-
-	// protect against infinite recursion from mutual dependencies
-	if (typeof this.loading_modules_[modulename] !== 'undefined'){
-		// NOTE: this should never throw an exception!! "recursive" includes
-		// are normal in the course of app and module building, so blow out of
-		// it gracefully, but log it in debug mode
-
-		// dojo.raise("recursive attempt to load module '" + modulename + "'");
-		dojo.debug("recursive attempt to load module '" + modulename + "'");
-	}else{
-		this.addedToLoadingCount.push(modulename);
-	}
-	this.loading_modules_[modulename] = 1;
-
-
-	// convert periods to slashes
-	var relpath = modulename.replace(/\./g, '/') + '.js';
-
-	var syms = modulename.split(".");
-	var nsyms = modulename.split(".");
-	if(syms[0]=="dojo"){ // FIXME: need a smarter way to do this!
-		syms[0] = "src"; 
-	}
-	var last = syms.pop();
-	syms.push(last);
-	// figure out if we're looking for a full package, if so, we want to do
-	// things slightly diffrently
-	var _this = this;
-	var pfn = this.pkgFileName;
-	if(last=="*"){
-		modulename = (nsyms.slice(0, -1)).join('.');
-
-		var module = this.findModule(modulename, 0);
-		// dojo.debug("found: "+modulename+"="+module);
-		if(module){
-			_this.removedFromLoadingCount.push(modulename);
-			return module;
-		}
-
-		var nextTry = function(lastStatus){
-			if(lastStatus){ 
-				module = _this.findModule(modulename, false); // pass in false so we can give better error
-				if((!module)&&(syms[syms.length-1]!=pfn)){
-					dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
-				}
-				if(module){
-					_this.removedFromLoadingCount.push(modulename);
-					dojo.hostenv.modulesLoaded();
-					return;
-				}
-			}
-			syms.pop();
-			syms.push(pfn);
-			// dojo.debug("syms: "+syms);
-			relpath = syms.join("/") + '.js';
-			if(relpath.charAt(0)=="/"){
-				relpath = relpath.slice(1);
-			}
-			// dojo.debug("relpath: "+relpath);
-			_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-		}
-
-		nextTry();
-	}else{
-		relpath = syms.join("/") + '.js';
-		modulename = nsyms.join('.');
-
-		var nextTry = function(lastStatus){
-			// dojo.debug("lastStatus: "+lastStatus);
-			if(lastStatus){ 
-				// dojo.debug("inital relpath: "+relpath);
-				module = _this.findModule(modulename, false); // pass in false so we can give better error
-				// if(!module){
-				if((!module)&&(syms[syms.length-1]!=pfn)){
-					dojo.raise("Module symbol '" + modulename + "' is not defined after loading '" + relpath + "'"); 
-				}
-				if(module){
-					_this.removedFromLoadingCount.push(modulename);
-					dojo.hostenv.modulesLoaded();
-					return;
-				}
-			}
-			var setPKG = (syms[syms.length-1]==pfn) ? false : true;
-			syms.pop();
-			if(setPKG){
-				syms.push(pfn);
-			}
-			relpath = syms.join("/") + '.js';
-			if(relpath.charAt(0)=="/"){
-				relpath = relpath.slice(1);
-			}
-			// dojo.debug("relpath: "+relpath);
-			_this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-		}
-
-		this.loadPath(relpath, ((!omit_module_check) ? modulename : null), nextTry);
-	}
-	return;
-}
-
-/**
- * Read the contents of the specified uri and return those contents.
- *
- * FIXME: Make sure this is consistent with other implementations of getText
- * @param uri A relative or absolute uri. If absolute, it still must be in the same "domain" as we are.
- * @param async_cb If not specified, returns false as synchronous is not
- * supported. If specified, load asynchronously, and use async_cb as the handler which receives the result of the request.
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, return null instead of throwing.
- */ 
-dojo.hostenv.async_cb = null;
-
-dojo.hostenv.unWindGetTextStack = function(){
-	if(dojo.hostenv.inFlightCount>0){
-		setTimeout("dojo.hostenv.unWindGetTextStack()", 100);
-		return;
-	}
-	// we serialize because this goddamned environment is too fucked up
-	// to know how to do anything else
-	dojo.hostenv.inFlightCount++;
-	var next = dojo.hostenv.getTextStack.pop();
-	if((!next)&&(dojo.hostenv.getTextStack.length==0)){ 
-		dojo.hostenv.inFlightCount--;
-		dojo.hostenv.async_cb = function(){};
-		return;
-	}
-	dojo.hostenv.async_cb = next[1];
-	// http = window.getURL(uri, dojo.hostenv.anon[cbn]);
-	window.getURL(next[0], function(result){ 
-		dojo.hostenv.inFlightCount--;
-		dojo.hostenv.async_cb(result.content);
-		dojo.hostenv.unWindGetTextStack();
-	});
-}
-
-dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-	// dojo.debug("Calling getText()");
-	try{
-		if(async_cb){
-			dojo.hostenv.getTextStack.push([uri, async_cb, fail_ok]);
-			dojo.hostenv.unWindGetTextStack();
-		}else{
-			return dojo.raise("No synchronous XMLHTTP implementation available, for uri " + uri);
-		}
-	}catch(e){
-		return dojo.raise("No XMLHTTP implementation available, for uri " + uri);
-	}
-}
-
-
-/**
- * Makes an async post to the specified uri.
- *
- * FIXME: Not sure that we need this, but adding for completeness.
- * More details about the implementation of this are available at 
- * http://wiki.svg.org/index.php/PostUrl
- * @param uri A relative or absolute uri. If absolute, it still must be in the same "domain" as we are.
- * @param async_cb If not specified, returns false as synchronous is not
- * supported. If specified, load asynchronously, and use async_cb as the progress handler which takes the xmlhttp object as its argument. If async_cb, this function returns null.
- * @param text Data to post
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails, return null instead of throwing.
- * @param mime_type optional MIME type of the posted data (such as "text/plain")
- * @param encoding optional encoding for data. null, 'gzip' and 'deflate' are possible values. If browser does not support binary post this parameter is ignored.
- */ 
-dojo.hostenv.postText = function(uri, async_cb, text, fail_ok, mime_type, encoding){
-	var http = null;
-	
-	var async_callback = function(httpResponse){
-		if (!httpResponse.success) {
-			dojo.raise("Request for uri '" + uri + "' resulted in " + httpResponse.status);
-		}
-		
-		if(!httpResponse.content) {
-			if (!fail_ok) dojo.raise("Request for uri '" + uri + "' resulted in no content");
-			return null;
-		}
-		// FIXME: wtf, I'm losing a reference to async_cb
-		async_cb(httpResponse.content);
-	}
-	
-	try {
-		if(async_cb) {
-			http = window.postURL(uri, text, async_callback, mimeType, encoding);
-		} else {
-		return dojo.raise("No synchronous XMLHTTP post implementation available, for uri " + uri);
-		}
-	} catch(e) {
-		return dojo.raise("No XMLHTTP post implementation available, for uri " + uri);
-	}
-}
-
-/*
- * It turns out that if we check *right now*, as this script file is being loaded,
- * then the last script element in the window DOM is ourselves.
- * That is because any subsequent script elements haven't shown up in the document
- * object yet.
- */
-function dj_last_script_src() {
-	var scripts = window.document.getElementsByTagName('script');
-	if(scripts.length < 1){ 
-		dojo.raise("No script elements in window.document, so can't figure out my script src"); 
-	}
-	var li = scripts.length-1;
-	var xlinkNS = "http://www.w3.org/1999/xlink";
-	var src = null;
-	var script = null;
-	while(!src){
-		script = scripts.item(li);
-		src = script.getAttributeNS(xlinkNS,"href");
-		li--;
-		if(li<0){ break; }
-		// break;
-	}
-	if(!src){
-		dojo.raise("Last script element (out of " + scripts.length + ") has no src");
-	}
-	return src;
-}
-
-if(!dojo.hostenv["library_script_uri_"]){
-	dojo.hostenv.library_script_uri_ = dj_last_script_src();
-}
-
-// dojo.hostenv.loadUri = function(uri){
-	/* FIXME: adding a script element doesn't seem to be synchronous, and so
-	 * checking for namespace or object existance after loadUri using this
-	 * method will error out. Need to figure out some other way of handling
-	 * this!
-	 */
-	/*
-	var se = document.createElement("script");
-	se.src = uri;
-	var head = document.getElementsByTagName("head")[0];
-	head.appendChild(se);
-	// document.write("<script type='text/javascript' src='"+uri+"' />");
-	return 1;
-}
-*/

+ 0 - 360
main/inc/lib/javascript/dojo/src/hostenv_browser.js

@@ -1,360 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-if(typeof window == 'undefined'){
-	dojo.raise("no window object");
-}
-
-// attempt to figure out the path to dojo if it isn't set in the config
-(function() {
-	// before we get any further with the config options, try to pick them out
-	// of the URL. Most of this code is from NW
-	if(djConfig.allowQueryConfig){
-		var baseUrl = document.location.toString(); // FIXME: use location.query instead?
-		var params = baseUrl.split("?", 2);
-		if(params.length > 1){
-			var paramStr = params[1];
-			var pairs = paramStr.split("&");
-			for(var x in pairs){
-				var sp = pairs[x].split("=");
-				// FIXME: is this eval dangerous?
-				if((sp[0].length > 9)&&(sp[0].substr(0, 9) == "djConfig.")){
-					var opt = sp[0].substr(9);
-					try{
-						djConfig[opt]=eval(sp[1]);
-					}catch(e){
-						djConfig[opt]=sp[1];
-					}
-				}
-			}
-		}
-	}
-
-	if(((djConfig["baseScriptUri"] == "")||(djConfig["baseRelativePath"] == "")) &&(document && document.getElementsByTagName)){
-		var scripts = document.getElementsByTagName("script");
-		var rePkg = /(__package__|dojo|bootstrap1)\.js([\?\.]|$)/i;
-		for(var i = 0; i < scripts.length; i++) {
-			var src = scripts[i].getAttribute("src");
-			if(!src) { continue; }
-			var m = src.match(rePkg);
-			if(m) {
-				var root = src.substring(0, m.index);
-				if(src.indexOf("bootstrap1") > -1) { root += "../"; }
-				if(!this["djConfig"]) { djConfig = {}; }
-				if(djConfig["baseScriptUri"] == "") { djConfig["baseScriptUri"] = root; }
-				if(djConfig["baseRelativePath"] == "") { djConfig["baseRelativePath"] = root; }
-				break;
-			}
-		}
-	}
-
-	// fill in the rendering support information in dojo.render.*
-	var dr = dojo.render;
-	var drh = dojo.render.html;
-	var drs = dojo.render.svg;
-	var dua = drh.UA = navigator.userAgent;
-	var dav = drh.AV = navigator.appVersion;
-	var t = true;
-	var f = false;
-	drh.capable = t;
-	drh.support.builtin = t;
-
-	dr.ver = parseFloat(drh.AV);
-	dr.os.mac = dav.indexOf("Macintosh") >= 0;
-	dr.os.win = dav.indexOf("Windows") >= 0;
-	// could also be Solaris or something, but it's the same browser
-	dr.os.linux = dav.indexOf("X11") >= 0;
-
-	drh.opera = dua.indexOf("Opera") >= 0;
-	drh.khtml = (dav.indexOf("Konqueror") >= 0)||(dav.indexOf("Safari") >= 0);
-	drh.safari = dav.indexOf("Safari") >= 0;
-	var geckoPos = dua.indexOf("Gecko");
-	drh.mozilla = drh.moz = (geckoPos >= 0)&&(!drh.khtml);
-	if (drh.mozilla) {
-		// gecko version is YYYYMMDD
-		drh.geckoVersion = dua.substring(geckoPos + 6, geckoPos + 14);
-	}
-	drh.ie = (document.all)&&(!drh.opera);
-	drh.ie50 = drh.ie && dav.indexOf("MSIE 5.0")>=0;
-	drh.ie55 = drh.ie && dav.indexOf("MSIE 5.5")>=0;
-	drh.ie60 = drh.ie && dav.indexOf("MSIE 6.0")>=0;
-	drh.ie70 = drh.ie && dav.indexOf("MSIE 7.0")>=0;
-
-	// TODO: is the HTML LANG attribute relevant?
-	dojo.locale = (drh.ie ? navigator.userLanguage : navigator.language).toLowerCase();
-
-	dr.vml.capable=drh.ie;
-	drs.capable = f;
-	drs.support.plugin = f;
-	drs.support.builtin = f;
-	if (document.implementation
-		&& document.implementation.hasFeature
-		&& document.implementation.hasFeature("org.w3c.dom.svg", "1.0")
-	){
-		drs.capable = t;
-		drs.support.builtin = t;
-		drs.support.plugin = f;
-	}
-})();
-
-dojo.hostenv.startPackage("dojo.hostenv");
-
-dojo.render.name = dojo.hostenv.name_ = 'browser';
-dojo.hostenv.searchIds = [];
-
-// These are in order of decreasing likelihood; this will change in time.
-dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
-
-dojo.hostenv.getXmlhttpObject = function(){
-    var http = null;
-	var last_e = null;
-	try{ http = new XMLHttpRequest(); }catch(e){}
-    if(!http){
-		for(var i=0; i<3; ++i){
-			var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
-			try{
-				http = new ActiveXObject(progid);
-			}catch(e){
-				last_e = e;
-			}
-
-			if(http){
-				dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
-				break;
-			}
-		}
-
-		/*if(http && !http.toString) {
-			http.toString = function() { "[object XMLHttpRequest]"; }
-		}*/
-	}
-
-	if(!http){
-		return dojo.raise("XMLHTTP not available", last_e);
-	}
-
-	return http;
-}
-
-/**
- * Read the contents of the specified uri and return those contents.
- *
- * @param uri A relative or absolute uri. If absolute, it still must be in the
- * same "domain" as we are.
- *
- * @param async_cb If not specified, load synchronously. If specified, load
- * asynchronously, and use async_cb as the progress handler which takes the
- * xmlhttp object as its argument. If async_cb, this function returns null.
- *
- * @param fail_ok Default false. If fail_ok and !async_cb and loading fails,
- * return null instead of throwing.
- */
-dojo.hostenv.getText = function(uri, async_cb, fail_ok){
-
-	var http = this.getXmlhttpObject();
-
-	if(async_cb){
-		http.onreadystatechange = function(){
-			if(4==http.readyState){
-				if((!http["status"])||((200 <= http.status)&&(300 > http.status))){
-					// dojo.debug("LOADED URI: "+uri);
-					async_cb(http.responseText);
-				}
-			}
-		}
-	}
-
-	http.open('GET', uri, async_cb ? true : false);
-	try{
-		http.send(null);
-		if(async_cb){
-			return null;
-		}
-		if((http["status"])&&((200 > http.status)||(300 <= http.status))){
-			throw Error("Unable to load "+uri+" status:"+ http.status);
-		}
-	}catch(e){
-		if((fail_ok)&&(!async_cb)){
-			return null;
-		}else{
-			throw e;
-		}
-	}
-
-	return http.responseText;
-}
-
-/*
- * It turns out that if we check *right now*, as this script file is being loaded,
- * then the last script element in the window DOM is ourselves.
- * That is because any subsequent script elements haven't shown up in the document
- * object yet.
- */
- /*
-function dj_last_script_src() {
-    var scripts = window.document.getElementsByTagName('script');
-    if(scripts.length < 1){
-		dojo.raise("No script elements in window.document, so can't figure out my script src");
-	}
-    var script = scripts[scripts.length - 1];
-    var src = script.src;
-    if(!src){
-		dojo.raise("Last script element (out of " + scripts.length + ") has no src");
-	}
-    return src;
-}
-
-if(!dojo.hostenv["library_script_uri_"]){
-	dojo.hostenv.library_script_uri_ = dj_last_script_src();
-}
-*/
-
-dojo.hostenv.defaultDebugContainerId = 'dojoDebug';
-dojo.hostenv._println_buffer = [];
-dojo.hostenv._println_safe = false;
-dojo.hostenv.println = function (line){
-	if(!dojo.hostenv._println_safe){
-		dojo.hostenv._println_buffer.push(line);
-	}else{
-		try {
-			var console = document.getElementById(djConfig.debugContainerId ?
-				djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId);
-			if(!console) { console = document.getElementsByTagName("body")[0] || document.body; }
-
-			var div = document.createElement("div");
-			div.appendChild(document.createTextNode(line));
-			console.appendChild(div);
-		} catch (e) {
-			try{
-				// safari needs the output wrapped in an element for some reason
-				document.write("<div>" + line + "</div>");
-			}catch(e2){
-				window.status = line;
-			}
-		}
-	}
-}
-
-dojo.addOnLoad(function(){
-	dojo.hostenv._println_safe = true;
-	while(dojo.hostenv._println_buffer.length > 0){
-		dojo.hostenv.println(dojo.hostenv._println_buffer.shift());
-	}
-});
-
-function dj_addNodeEvtHdlr(node, evtName, fp, capture){
-	var oldHandler = node["on"+evtName] || function(){};
-	node["on"+evtName] = function(){
-		fp.apply(node, arguments);
-		oldHandler.apply(node, arguments);
-	}
-	return true;
-}
-
-
-/* Uncomment this to allow init after DOMLoad, not after window.onload
-
-// Mozilla exposes the event we could use
-if (dojo.render.html.mozilla) {
-   document.addEventListener("DOMContentLoaded", dj_load_init, null);
-}
-// for Internet Explorer. readyState will not be achieved on init call, but dojo doesn't need it
-//Tighten up the comments below to allow init after DOMLoad, not after window.onload
-/ * @cc_on @ * /
-/ * @if (@_win32)
-    document.write("<script defer>dj_load_init()<"+"/script>");
-/ * @end @ * /
-*/
-
-// default for other browsers
-// potential TODO: apply setTimeout approach for other browsers
-// that will cause flickering though ( document is loaded and THEN is processed)
-// maybe show/hide required in this case..
-// TODO: other browsers may support DOMContentLoaded/defer attribute. Add them to above.
-dj_addNodeEvtHdlr(window, "load", function(){
-	// allow multiple calls, only first one will take effect
-	if(arguments.callee.initialized){ return; }
-	arguments.callee.initialized = true;
-
-	var initFunc = function(){
-		//perform initialization
-		if(dojo.render.html.ie){
-			dojo.hostenv.makeWidgets();
-		}
-	};
-
-	if(dojo.hostenv.inFlightCount == 0){
-		initFunc();
-		dojo.hostenv.modulesLoaded();
-	}else{
-		dojo.addOnLoad(initFunc);
-	}
-});
-
-dj_addNodeEvtHdlr(window, "unload", function(){
-	dojo.hostenv.unloaded();
-});
-
-dojo.hostenv.makeWidgets = function(){
-	// you can put searchIds in djConfig and dojo.hostenv at the moment
-	// we should probably eventually move to one or the other
-	var sids = [];
-	if(djConfig.searchIds && djConfig.searchIds.length > 0) {
-		sids = sids.concat(djConfig.searchIds);
-	}
-	if(dojo.hostenv.searchIds && dojo.hostenv.searchIds.length > 0) {
-		sids = sids.concat(dojo.hostenv.searchIds);
-	}
-
-	if((djConfig.parseWidgets)||(sids.length > 0)){
-		if(dojo.evalObjPath("dojo.widget.Parse")){
-			// we must do this on a delay to avoid:
-			//	http://www.shaftek.org/blog/archives/000212.html
-			// IE is such a tremendous peice of shit.
-				var parser = new dojo.xml.Parse();
-				if(sids.length > 0){
-					for(var x=0; x<sids.length; x++){
-						var tmpNode = document.getElementById(sids[x]);
-						if(!tmpNode){ continue; }
-						var frag = parser.parseElement(tmpNode, null, true);
-						dojo.widget.getParser().createComponents(frag);
-					}
-				}else if(djConfig.parseWidgets){
-					var frag  = parser.parseElement(document.getElementsByTagName("body")[0] || document.body, null, true);
-					dojo.widget.getParser().createComponents(frag);
-				}
-		}
-	}
-}
-
-dojo.addOnLoad(function(){
-	if(!dojo.render.html.ie) {
-		dojo.hostenv.makeWidgets();
-	}
-});
-
-try {
-	if (dojo.render.html.ie) {
-		document.write('<style>v\:*{ behavior:url(#default#VML); }</style>');
-		document.write('<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/>');
-	}
-} catch (e) { }
-
-// stub, over-ridden by debugging code. This will at least keep us from
-// breaking when it's not included
-dojo.hostenv.writeIncludes = function(){}
-
-dojo.byId = function(id, doc){
-	if(id && (typeof id == "string" || id instanceof String)){
-		if(!doc){ doc = document; }
-		return doc.getElementById(id);
-	}
-	return id; // assume it's a node
-}

+ 0 - 197
main/inc/lib/javascript/dojo/src/hostenv_dashboard.js

@@ -1,197 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-dojo.render.name = dojo.hostenv.name_ = "dashboard";
-
-dojo.hostenv.println = function(/*String*/ message){
-	// summary: Prints a message to the OS X console
-	return alert(message); // null
-}
-
-dojo.hostenv.getXmlhttpObject = function(/*Object*/ kwArgs){
-	// summary: Returns the appropriate transfer object for the call type
-	if(widget.system && kwArgs){
-		if((kwArgs.contentType && kwArgs.contentType.indexOf("text/") != 0) || (kwArgs.headers && kwArgs.headers["content-type"] && kwArgs.headers["content-type"].indexOf("text/") != 0)){
-			var curl = new dojo.hostenv.CurlRequest;
-			curl._save = true;
-			return curl;
-		}else if(kwArgs.method && kwArgs.method.toUpperCase() == "HEAD"){
-			return new dojo.hostenv.CurlRequest;
-		}else if(kwArgs.headers && kwArgs.header.referer){
-			return new dojo.hostenv.CurlRequest; 
-		}
-	}
-	return new XMLHttpRequest; // XMLHttpRequest
-}
-
-dojo.hostenv.CurlRequest = function(){
-	// summary: Emulates the XMLHttpRequest Object
-	this.onreadystatechange = null;
-	this.readyState = 0;
-	this.responseText = "";
-	this.responseXML = null;
-	this.status = 0;
-	this.statusText = "";
-	this._method = "";
-	this._url = "";
-	this._async = true;
-	this._referrer = "";
-	this._headers = [];
-	this._save = false;
-	this._responseHeader = "";
-	this._responseHeaders = {};
-	this._fileName = "";
-	this._username = "";
-	this._password = "";
-}
-
-dojo.hostenv.CurlRequest.prototype.open = function(/*String*/ method, /*URL*/ url, /*Boolean?*/ async, /*String?*/ username, /*String?*/ password){
-	this._method = method;
-	this._url = url;
-	if(async){
-		this._async = async;
-	}
-	if(username){
-		this._username = username;
-	}
-	if(password){
-		this._password = password;
-	}
-}
-
-dojo.hostenv.CurlRequest.prototype.setRequestHeader = function(/*String*/ label, /*String*/ value){
-	switch(label){
-		case "Referer":
-			this._referrer = value;
-			break;
-		case "content-type":
-			break;
-		default:
-			this._headers.push(label + "=" + value);
-			break;
-	}
-}
-
-dojo.hostenv.CurlRequest.prototype.getAllResponseHeaders = function(){
-	return this._responseHeader; // String
-}
-
-dojo.hostenv.CurlRequest.prototype.getResponseHeader = function(/*String*/ headerLabel){
-	return this._responseHeaders[headerLabel]; // String
-}
-
-// -sS = Show only errors in errorString
-// -i = Display headers with return
-// -e = Referrer URI
-// -H = Headers
-// -d = data to be sent (forces POST)
-// -G = forces GET
-// -o = Writes to file (in the cache directory)
-// -I = Only load headers
-// -u = user:password
-dojo.hostenv.CurlRequest.prototype.send = function(/*String*/ content){
-	this.readyState = 1;
-	if(this.onreadystatechange){
-		this.onreadystatechange.call(this);
-	}
-	var query = {sS: ""};
-	if(this._referrer){
-		query.e = this._referrer;
-	}
-	if(this._headers.length){
-		query.H = this._headers.join("&");
-	}
-	if(this._username){
-		if(this._password){
-			query.u = this._username + ":" + this._password;
-		}else{
-			query.u = this._username;
-		}
-	}
-	if(content){
-		query.d = this.content;
-		if(this._method != "POST"){
-			query.G = "";
-		}
-	}
-	if(this._method == "HEAD"){
-		query.I = "";
-	}else{
-		if(this._save){
-			query.I = ""; // Get the headers in the initial query
-		}else{
-			query.i = "";
-		}
-	}
-
-	var system = widget.system(dojo.hostenv.CurlRequest._formatCall(query, this._url), null);
-	this.readyState = 2;
-	if(this.onreadystatechange){
-		this.onreadystatechange.call(this);
-	}
-	if(system.errorString){
-		this.responseText = system.errorString;
-		this.status = 0;
-	}else{
-		if(this._save){
-			this._responseHeader = system.outputString;
-		}else{
-			var split = system.outputString.replace(/\r/g, "").split("\n\n", 2);
-			this._responseHeader = split[0];
-			this.responseText = split[1];
-		}
-		split = this._responseHeader.split("\n");
-		this.statusText = split.shift();
-		this.status = this.statusText.split(" ")[1];
-		for(var i = 0, header; header = split[i]; i++){
-			var header_split = header.split(": ", 2);
-			this._responseHeaders[header_split[0]] = header_split[1];
-		}
-		if(this._save){
-			widget.system("/bin/mkdir cache", null);
-			// First, make a file name
-			this._fileName = this._url.split("/").pop().replace(/\W/g, "");
-			// Then, get its extension
-			this._fileName += "." + this._responseHeaders["Content-Type"].replace(/[\r\n]/g, "").split("/").pop()
-			delete query.I;
-			query.o = "cache/" + this._fileName; // Tell it where to be saved.
-			system = widget.system(dojo.hostenv.CurlRequest._formatCall(query, this._url), null);
-			if(!system.errorString){
-				this.responseText = "cache/" + this._fileName;
-			}
-		}else if(this._method == "HEAD"){
-			this.responseText = this._responseHeader;
-		}
-	}
-
-	this.readyState = 4;
-	if(this.onreadystatechange){
-		this.onreadystatechange.call(this);
-	}
-}
-
-dojo.hostenv.CurlRequest._formatCall = function(query, url){
-	var call = ["/usr/bin/curl"];
-	for(var key in query){
-		if(query[key] != ""){
-			call.push("-" + key + " '" + query[key].replace(/'/g, "\'") + "'");
-		}else{
-			call.push("-" + key);
-		}
-	}
-	call.push("'" + url.replace(/'/g, "\'") + "'");
-	return call.join(" ");
-}
-
-dojo.hostenv.exit = function(){
-	if(widget.system){
-		widget.system("/bin/rm -rf cache/*", null);
-	}
-}

+ 0 - 76
main/inc/lib/javascript/dojo/src/hostenv_jsc.js

@@ -1,76 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * JScript .NET jsc
- *
- */
-
-dojo.hostenv.name_ = 'jsc';
-
-// Sanity check this is the right hostenv.
-// See the Rotor source code jscript/engine/globalobject.cs for what globals
-// are available.
-if((typeof ScriptEngineMajorVersion != 'function')||(ScriptEngineMajorVersion() < 7)){
-	dojo.raise("attempt to use JScript .NET host environment with inappropriate ScriptEngine"); 
-}
-
-// for more than you wanted to know about why this import is required even if
-// we fully qualify all symbols, see
-// http://groups.google.com/groups?th=f050c7aeefdcbde2&rnum=12
-import System;
-
-dojo.hostenv.getText = function(uri){
-	if(!System.IO.File.Exists(uri)){
-		// dojo.raise("No such file '" + uri + "'");
-		return 0;
-	}
-	var reader = new System.IO.StreamReader(uri);
-	var contents : String = reader.ReadToEnd();
-	return contents;
-}
-
-dojo.hostenv.loadUri = function(uri){
-	var contents = this.getText(uri);
-	if(!contents){
-		dojo.raise("got no back contents from uri '" + uri + "': " + contents);
-	}
-	// TODO: in JScript .NET, eval will not affect the symbol table of the current code?
-	var value = dj_eval(contents);
-	dojo.debug("jsc eval of contents returned: ", value);
-	return 1;
-
-	// for an example doing runtime code compilation, see:
-	// http://groups.google.com/groups?selm=eQ1aeciCBHA.1644%40tkmsftngp05&rnum=6
-	// Microsoft.JScript or System.CodeDom.Compiler ?
-	// var engine = new Microsoft.JScript.Vsa.VsaEngine()
-	// what about loading a js file vs. a dll?
-	// GetObject("script:" . uri);
-}
-
-/* The System.Environment object is useful:
-    print ("CommandLine='" + System.Environment.CommandLine + "' " +
-	   "program name='" + System.Environment.GetCommandLineArgs()[0] + "' " +
-	   "CurrentDirectory='" + System.Environment.CurrentDirectory + "' " +
-	   "StackTrace='" + System.Environment.StackTrace + "'");
-*/
-
-// same as System.Console.WriteLine
-// sigh; Rotor treats symbol "print" at parse time without actually putting it
-// in the builtin symbol table.
-// Note that the print symbol is not available if jsc is run with the "/print-"
-// option.
-dojo.hostenv.println = function(s){
-	print(s); // = print
-}
-
-dojo.hostenv.getLibraryScriptUri = function(){
-	return System.Environment.GetCommandLineArgs()[0];
-}

+ 0 - 190
main/inc/lib/javascript/dojo/src/hostenv_rhino.js

@@ -1,190 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
-* Rhino host environment
-*/
-
-// make jsc shut up (so we can use jsc for sanity checking) 
-/*@cc_on
-@if (@_jscript_version >= 7)
-var loadClass; var print; var load; var quit; var version; var Packages; var java;
-@end
-@*/
-
-// TODO: not sure what we gain from the next line, anyone?
-//if (typeof loadClass == 'undefined') { dojo.raise("attempt to use Rhino host environment when no 'loadClass' global"); }
-
-dojo.render.name = dojo.hostenv.name_ = 'rhino';
-dojo.hostenv.getVersion = function() {return version()};
-
-// see comments in spidermonkey loadUri
-dojo.hostenv.loadUri = function(uri, cb){
-	dojo.debug("uri: "+uri);
-	try{
-		// FIXME: what about remote URIs?
-		var found = true;
-		if(!(new java.io.File(uri)).exists()){
-			try{
-				// try it as a file first, URL second
-				(new java.io.URL(uri)).openStream();
-			}catch(e){
-				found = false;
-			}
-		}
-		if(!found){
-			dojo.debug(uri+" does not exist");
-			if(cb){ cb(0); }
-			return 0;
-		}
-		var ok = load(uri);
-		// dojo.debug(typeof ok);
-		dojo.debug("rhino load('", uri, "') returned. Ok: ", ok);
-		if(cb){ cb(1); }
-		return 1;
-	}catch(e){
-		dojo.debug("rhino load('", uri, "') failed");
-		if(cb){ cb(0); }
-		return 0;
-	}
-}
-
-dojo.hostenv.println = print;
-dojo.hostenv.exit = function(exitcode){ 
-	quit(exitcode);
-}
-
-// Hack to determine current script...
-//
-// These initial attempts failed:
-//   1. get an EcmaError and look at e.getSourceName(): try {eval ("static in return")} catch(e) { ...
-//   Won't work because NativeGlobal.java only does a put of "name" and "message", not a wrapped reflecting object.
-//   Even if the EcmaError object had the sourceName set.
-//  
-//   2. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportError('');
-//   Won't work because it goes directly to the errorReporter, not the return value.
-//   We want context.interpreterSourceFile and context.interpreterLine, which are used in static Context.getSourcePositionFromStack
-//   (set by Interpreter.java at interpretation time, if in interpreter mode).
-//
-//   3. var e = Packages.org.mozilla.javascript.Context.getCurrentContext().reportRuntimeError('');
-//   This returns an object, but e.message still does not have source info.
-//   In compiler mode, perhaps not set; in interpreter mode, perhaps not used by errorReporter?
-//
-// What we found works is to do basically the same hack as is done in getSourcePositionFromStack,
-// making a new java.lang.Exception() and then calling printStackTrace on a string stream.
-// We have to parse the string for the .js files (different from the java files).
-// This only works however in compiled mode (-opt 0 or higher).
-// In interpreter mode, entire stack is java.
-// When compiled, printStackTrace is like:
-// java.lang.Exception
-//	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-//	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
-//	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
-//	at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
-//	at org.mozilla.javascript.NativeJavaClass.constructSpecific(NativeJavaClass.java:228)
-//	at org.mozilla.javascript.NativeJavaClass.construct(NativeJavaClass.java:185)
-//	at org.mozilla.javascript.ScriptRuntime.newObject(ScriptRuntime.java:1269)
-//	at org.mozilla.javascript.gen.c2.call(/Users/mda/Sites/burstproject/testrhino.js:27)
-//    ...
-//	at org.mozilla.javascript.tools.shell.Main.main(Main.java:76)
-//
-// Note may get different answers based on:
-//    Context.setOptimizationLevel(-1)
-//    Context.setGeneratingDebug(true)
-//    Context.setGeneratingSource(true) 
-//
-// Some somewhat helpful posts:
-//    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=9v9n0g%246gr1%40ripley.netscape.com
-//    http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=3BAA2DC4.6010702%40atg.com
-//
-// Note that Rhino1.5R5 added source name information in some exceptions.
-// But this seems not to help in command-line Rhino, because Context.java has an error reporter
-// so no EvaluationException is thrown.
-
-// do it by using java java.lang.Exception
-function dj_rhino_current_script_via_java(depth) {
-    var optLevel = Packages.org.mozilla.javascript.Context.getCurrentContext().getOptimizationLevel();  
-    if (optLevel == -1) dojo.unimplemented("getCurrentScriptURI (determine current script path for rhino when interpreter mode)", '');
-    var caw = new java.io.CharArrayWriter();
-    var pw = new java.io.PrintWriter(caw);
-    var exc = new java.lang.Exception();
-    var s = caw.toString();
-    // we have to exclude the ones with or without line numbers because they put double entries in:
-    //   at org.mozilla.javascript.gen.c3._c4(/Users/mda/Sites/burstproject/burst/Runtime.js:56)
-    //   at org.mozilla.javascript.gen.c3.call(/Users/mda/Sites/burstproject/burst/Runtime.js)
-    var matches = s.match(/[^\(]*\.js\)/gi);
-    if(!matches){
-		throw Error("cannot parse printStackTrace output: " + s);
-	}
-
-    // matches[0] is entire string, matches[1] is this function, matches[2] is caller, ...
-    var fname = ((typeof depth != 'undefined')&&(depth)) ? matches[depth + 1] : matches[matches.length - 1];
-    var fname = matches[3];
-	if(!fname){ fname = matches[1]; }
-    // print("got fname '" + fname + "' from stack string '" + s + "'");
-    if (!fname) throw Error("could not find js file in printStackTrace output: " + s);
-    //print("Rhino getCurrentScriptURI returning '" + fname + "' from: " + s); 
-    return fname;
-}
-
-// UNUSED: leverage new support in native exception for getSourceName
-/*
-function dj_rhino_current_script_via_eval_exception() {
-    var exc;
-    // 'ReferenceError: "undefinedsymbol" is not defined.'
-    try {eval ("undefinedsymbol()") } catch(e) {exc = e;}
-    // 'Error: whatever'
-    // try{throw Error("whatever");} catch(e) {exc = e;}
-    // 'SyntaxError: identifier is a reserved word'
-    // try {eval ("static in return")} catch(e) { exc = e; }
-    print("got exception: '" + exc + "'");
-    print("exc.stack=" + (typeof exc.stack));
-    var sn = exc.getSourceName();
-    print("SourceName=" + sn);
-    return sn;
-} 
-*/
-
-// reading a file from disk in Java is a humiliating experience by any measure.
-// Lets avoid that and just get the freaking text
-function readText(uri){
-	// NOTE: we intentionally avoid handling exceptions, since the caller will
-	// want to know
-	var jf = new java.io.File(uri);
-	var sb = new java.lang.StringBuffer();
-	var input = new java.io.BufferedReader(new java.io.FileReader(jf));
-	var line = "";
-	while((line = input.readLine()) != null){
-		sb.append(line);
-		sb.append(java.lang.System.getProperty("line.separator"));
-	}
-	return sb.toString();
-}
-
-// call this now because later we may not be on the top of the stack
-if(!djConfig.libraryScriptUri.length){
-	try{
-		djConfig.libraryScriptUri = dj_rhino_current_script_via_java(1);
-	}catch(e){
-		// otherwise just fake it
-		if(djConfig["isDebug"]){
-			print("\n");
-			print("we have no idea where Dojo is located from.");
-			print("Please try loading rhino in a non-interpreted mode or set a");
-			print("\n	djConfig.libraryScriptUri\n");
-			print("Setting the dojo path to './'");
-			print("This is probably wrong!");
-			print("\n");
-			print("Dojo will try to load anyway");
-		}
-		djConfig.libraryScriptUri = "./";
-	}
-}
-

+ 0 - 79
main/inc/lib/javascript/dojo/src/hostenv_spidermonkey.js

@@ -1,79 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * SpiderMonkey host environment
- */
-
-dojo.hostenv.name_ = 'spidermonkey';
-
-dojo.hostenv.println = print;
-dojo.hostenv.exit = function(exitcode){ 
-	quit(exitcode); 
-}
-
-// version() returns 0, sigh. and build() returns nothing but just prints.
-dojo.hostenv.getVersion = function(){ return version(); }
-
-// make jsc shut up (so we can use jsc for sanity checking) 
-/*@cc_on
-@if (@_jscript_version >= 7)
-var line2pc; var print; var load; var quit;
-@end
-@*/
-
-if(typeof line2pc == 'undefined'){
-	dojo.raise("attempt to use SpiderMonkey host environment when no 'line2pc' global");
-}
-
-/*
- * This is a hack that determines the current script file by parsing a generated
- * stack trace (relying on the non-standard "stack" member variable of the
- * SpiderMonkey Error object).
- * If param depth is passed in, it'll return the script file which is that far down
- * the stack, but that does require that you know how deep your stack is when you are
- * calling.
- */
-function dj_spidermonkey_current_file(depth){
-    var s = '';
-    try{
-		throw Error("whatever");
-	}catch(e){
-		s = e.stack;
-	}
-    // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101
-    var matches = s.match(/[^@]*\.js/gi);
-    if(!matches){ 
-		dojo.raise("could not parse stack string: '" + s + "'");
-	}
-    var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1];
-    if(!fname){ 
-		dojo.raise("could not find file name in stack string '" + s + "'");
-	}
-    //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'");
-    return fname;
-}
-
-// call this now because later we may not be on the top of the stack
-if(!dojo.hostenv.library_script_uri_){ 
-	dojo.hostenv.library_script_uri_ = dj_spidermonkey_current_file(0); 
-}
-
-dojo.hostenv.loadUri = function(uri){
-	// spidermonkey load() evaluates the contents into the global scope (which
-	// is what we want).
-	// TODO: sigh, load() does not return a useful value. 
-	// Perhaps it is returning the value of the last thing evaluated?
-	var ok = load(uri);
-	// dojo.debug("spidermonkey load(", uri, ") returned ", ok);
-	return 1;
-}
-
-

+ 0 - 223
main/inc/lib/javascript/dojo/src/hostenv_svg.js

@@ -1,223 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-//	hostenv_svg
-if(typeof window == 'undefined'){
-	dojo.raise("attempt to use adobe svg hostenv when no window object");
-}
-dojo.debug = function(){ 
-	if (!djConfig.isDebug) { return; }
-	var args = arguments;
-	var isJUM = dj_global["jum"];
-	var s = isJUM ? "": "DEBUG: ";
-	for (var i = 0; i < args.length; ++i){ s += args[i]; }
-	if (isJUM){ // this seems to be the only way to get JUM to "play nice"
-		jum.debug(s);
-	} else{ 
-		dojo.hostenv.println(s);
-	}
-};
-
-//	set up dojo.render.
-dojo.render.name = navigator.appName;
-dojo.render.ver = parseFloat(navigator.appVersion, 10);
-switch(navigator.platform){
-	case "MacOS":
-		dojo.render.os.osx =  true;
-		break;
-	case "Linux":
-		dojo.render.os.linux =  true;
-		break;
-	case "Windows":
-		dojo.render.os.win =  true;
-		break;
-	default:
-		dojo.render.os.linux = true;
-		break;
-};
-dojo.render.svg.capable = true;
-dojo.render.svg.support.builtin = true;
-//	FIXME the following two is a big-ass hack for now.
-dojo.render.svg.moz = ((navigator.userAgent.indexOf("Gecko") >= 0) && (!((navigator.appVersion.indexOf("Konqueror") >= 0) || (navigator.appVersion.indexOf("Safari") >= 0))));
-dojo.render.svg.adobe = (window.parseXML != null);
-
-//	agent-specific implementations.
-
-//	from old hostenv_adobesvg.
-dojo.hostenv.startPackage("dojo.hostenv");
-dojo.hostenv.println = function(s){ 
-	try {
-		var ti = document.createElement("text");
-		ti.setAttribute("x","50");
-		ti.setAttribute("y", (25 + 15 * document.getElementsByTagName("text").length));
-		ti.appendChild(document.createTextNode(s));
-		document.documentElement.appendChild(ti);
-	} catch(e){ }
-};
-dojo.hostenv.name_ = "svg";
-
-//	expected/defined by bootstrap1.js
-dojo.hostenv.setModulePrefix = function(module, prefix){ };
-dojo.hostenv.getModulePrefix = function(module){ };
-dojo.hostenv.getTextStack = [];
-dojo.hostenv.loadUriStack = [];
-dojo.hostenv.loadedUris = [];
-dojo.hostenv.modules_ = {};
-dojo.hostenv.modulesLoadedFired = false;
-dojo.hostenv.modulesLoadedListeners = [];
-dojo.hostenv.getText = function(uri, cb, data){ 
-	if (!cb) var cb = function(result){ window.alert(result); };
-	if (!data) {
-		window.getUrl(uri, cb);
-	} else {
-		window.postUrl(uri, data, cb);
-	}
-};
-dojo.hostenv.getLibaryScriptUri = function(){ };
-
-dojo.hostenv.loadUri = function(uri){ };
-dojo.hostenv.loadUriAndCheck = function(uri, module){ };
-
-//	aliased in loader.js, don't ignore
-//	we are going to kill loadModule for the first round of SVG stuff, and include shit manually.
-dojo.hostenv.loadModule = function(moduleName){
-	//	just like startPackage, but this time we're just checking to make sure it exists already.
-	var a = moduleName.split(".");
-	var currentObj = window;
-	var s = [];
-	for (var i = 0; i < a.length; i++){
-		if (a[i] == "*") continue;
-		s.push(a[i]);
-		if (!currentObj[a[i]]){
-			dojo.raise("dojo.require('" + moduleName + "'): module does not exist.");
-		} else currentObj = currentObj[a[i]];
-	}
-	return; 
-};
-dojo.hostenv.startPackage = function(moduleName){
-	var a = moduleName.split(".");
-	var currentObj = window;
-	var s = [];
-	for (var i = 0; i < a.length; i++){
-		if (a[i] == "*") continue;
-		s.push(a[i]);
-		if (!currentObj[a[i]]) currentObj[a[i]] = {};
-		currentObj = currentObj[a[i]];
-	}
-	return; 
-};
-
-//	wrapper objects for ASVG
-if (window.parseXML){
-	window.XMLSerialzer = function(){
-		//	based on WebFX RichTextControl getXHTML() function.
-		function nodeToString(n, a) {
-			function fixText(s) { return String(s).replace(/\&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;"); }
-			function fixAttribute(s) { return fixText(s).replace(/\"/g, "&quot;"); }
-			switch (n.nodeType) {
-				case 1:	{	//	ELEMENT
-					var name = n.nodeName;
-					a.push("<" + name);
-					for (var i = 0; i < n.attributes.length; i++) {
-						if (n.attributes.item(i).specified) {
-							a.push(" " + n.attributes.item(i).nodeName.toLowerCase() + "=\"" + fixAttribute(n.attributes.item(i).nodeValue) + "\"");
-						}
-					}
-					if (n.canHaveChildren || n.hasChildNodes()) {
-						a.push(">");
-						for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
-						a.push("</" + name + ">\n");
-					} else a.push(" />\n");
-					break;
-				}
-				case 3: {	//	TEXT
-					a.push(fixText(n.nodeValue));
-					break;
-				}
-				case 4: {	//	CDATA
-					a.push("<![CDA" + "TA[\n" + n.nodeValue + "\n]" + "]>");
-					break;
-				}
-				case 7:{	//	PROCESSING INSTRUCTION
-					a.push(n.nodeValue);
-					if (/(^<\?xml)|(^<\!DOCTYPE)/.test(n.nodeValue)) a.push("\n");
-					break;
-				}
-				case 8:{	//	COMMENT
-					a.push("<!-- " + n.nodeValue + " -->\n");
-					break;
-				}
-				case 9:		//	DOCUMENT
-				case 11:{	//	DOCUMENT FRAGMENT
-					for (var i = 0; i < n.childNodes.length; i++) nodeToString(n.childNodes.item(i), a);
-					break;
-				}
-				default:{
-					a.push("<!--\nNot Supported:\n\n" + "nodeType: " + n.nodeType + "\nnodeName: " + n.nodeName + "\n-->");
-				}
-			}
-		}
-		this.serializeToString = function(node){
-			var a = [];
-			nodeToString(node, a);
-			return a.join("");
-		};
-	};
-
-	window.DOMParser = function(){
-		//	mimetype is basically ignored
-		this.parseFromString = function(s){
-			return parseXML(s, window.document);
-		}
-	};
-
-	window.XMLHttpRequest = function(){
-		//	we ignore the setting and getting of content-type.
-		var uri = null;
-		var method = "POST";
-		var isAsync = true;	
-		var cb = function(d){
-			this.responseText = d.content;
-			try {
-				this.responseXML = parseXML(this.responseText, window.document);
-			} catch(e){}
-			this.status = "200";
-			this.statusText = "OK";
-			if (!d.success) {
-				this.status = "500";
-				this.statusText = "Internal Server Error";
-			}
-			this.onload();
-			this.onreadystatechange();
-		};
-		this.onload = function(){};
-		this.readyState = 4;
-		this.onreadystatechange = function(){};
-		this.status = 0;
-		this.statusText = "";
-		this.responseBody = null;
-		this.responseStream = null;
-		this.responseXML = null;
-		this.responseText = null;
-		this.abort = function(){ return; };
-		this.getAllResponseHeaders = function(){ return []; };
-		this.getResponseHeader = function(n){ return null; };
-		this.setRequestHeader = function(nm, val){ };
-		this.open = function(meth, url, async){ 
-			method = meth;
-			uri = url;
-		};
-		this.send = function(data){
-			var d = data || null;
-			if (method == "GET") getURL(uri, cb);
-			else postURL(uri, data, cb);
-		};
-	};
-}

+ 0 - 46
main/inc/lib/javascript/dojo/src/hostenv_wsh.js

@@ -1,46 +0,0 @@
-/*
-	Copyright (c) 2004-2006, The Dojo Foundation
-	All Rights Reserved.
-
-	Licensed under the Academic Free License version 2.1 or above OR the
-	modified BSD license. For more information on Dojo licensing, see:
-
-		http://dojotoolkit.org/community/licensing.shtml
-*/
-
-/*
- * WSH
- */
-
-dojo.hostenv.name_ = 'wsh';
-
-// make jsc shut up (so can sanity check)
-/*@cc_on
-@if (@_jscript_version >= 7)
-var WScript;
-@end
-@*/
-
-// make sure we are in right environment
-if(typeof WScript == 'undefined'){
-	dojo.raise("attempt to use WSH host environment when no WScript global");
-}
-
-dojo.hostenv.println = WScript.Echo;
-
-dojo.hostenv.getCurrentScriptUri = function(){
-	return WScript.ScriptFullName();
-}
-
-dojo.hostenv.getText = function(fpath){
-	var fso = new ActiveXObject("Scripting.FileSystemObject");
-	var istream = fso.OpenTextFile(fpath, 1); // iomode==1 means read only
-	if(!istream){
-		return null;
-	}
-	var contents = istream.ReadAll();
-	istream.Close();
-	return contents;
-}
-
-dojo.hostenv.exit = function(exitcode){ WScript.Quit(exitcode); }

Some files were not shown because too many files changed in this diff