[Laszlo-checkins] r6473 - in openlaszlo/branches/legals: . WEB-INF/lps/lfc WEB-INF/lps/lfc/compiler WEB-INF/lps/lfc/core WEB-INF/lps/lfc/data WEB-INF/lps/lfc/debugger WEB-INF/lps/lfc/kernel/dhtml WEB-INF/lps/lfc/kernel/swf WEB-INF/lps/lfc/services WEB-INF/lps/lfc/views WEB-INF/lps/schema WEB-INF/lps/server/bin WEB-INF/lps/server/sc/src/org/openlaszlo/sc WEB-INF/lps/server/src/org/openlaszlo/cm WEB-INF/lps/server/src/org/openlaszlo/compiler WEB-INF/lps/server/src/org/openlaszlo/sc WEB-INF/lps/server/src/org/openlaszlo/server WEB-INF/lps/server/src/org/openlaszlo/servlets/responders demos/calendar docs laszlo-explorer laszlo-explorer/coverpages laszlo-explorer/coverpages/welcome lps/admin lps/components/base lps/components/extensions lps/components/incubator/rich-text lps/components/incubator/rich-text/test lps/components/lz lps/components/rpc/library/dhtml lps/components/utils/replicator lps/includes/source lps/utils/viewer test test/components/base test/explicit-replicators test/lfc/lztrack test/style/simple

ben@openlaszlo.org ben at openlaszlo.org
Thu Sep 13 16:39:22 PDT 2007


Author: ben
Date: 2007-09-13 16:38:53 -0700 (Thu, 13 Sep 2007)
New Revision: 6473

Removed:
   openlaszlo/branches/legals/test/replicators/
Modified:
   openlaszlo/branches/legals/
   openlaszlo/branches/legals/WEB-INF/lps/lfc/build.xml
   openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/Class.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzDefs.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzNode.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataAttrBind.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataProvider.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataRequest.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzMakeLoadSprite.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzSprite.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/services/LzCSSStyle.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloCanvas.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzInputText.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs
   openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc
   openlaszlo/branches/legals/WEB-INF/lps/server/bin/lzc
   openlaszlo/branches/legals/WEB-INF/lps/server/sc/src/org/openlaszlo/sc/Parser.jjt
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cm/CompilationManager.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Canvas.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CanvasCompiler.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CompilationEnvironment.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Compiler.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Main.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ToplevelCompiler.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptCompressor.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/server/LPS.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderCompile.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderLFC.java
   openlaszlo/branches/legals/demos/calendar/cal-data.lzx
   openlaszlo/branches/legals/demos/calendar/eventselector.lzx
   openlaszlo/branches/legals/docs/index.html
   openlaszlo/branches/legals/index.jsp
   openlaszlo/branches/legals/laszlo-explorer/coverpages/documentation_cover.html
   openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html
   openlaszlo/branches/legals/laszlo-explorer/explore-nav.lzx
   openlaszlo/branches/legals/laszlo-explorer/nav.rnc
   openlaszlo/branches/legals/laszlo-explorer/nav.xml
   openlaszlo/branches/legals/lps/admin/dev-console.lzx
   openlaszlo/branches/legals/lps/admin/dev-console.lzx.js
   openlaszlo/branches/legals/lps/admin/dev-console.lzx.swf
   openlaszlo/branches/legals/lps/components/base/basecomponent.lzx
   openlaszlo/branches/legals/lps/components/base/basescrollbar.lzx
   openlaszlo/branches/legals/lps/components/base/basetabelement.lzx
   openlaszlo/branches/legals/lps/components/base/basetrackgroup.lzx
   openlaszlo/branches/legals/lps/components/base/datalistselector.lzx
   openlaszlo/branches/legals/lps/components/extensions/drawview.lzx
   openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontcolor.lzx
   openlaszlo/branches/legals/lps/components/incubator/rich-text/richtexteditarea.lzx
   openlaszlo/branches/legals/lps/components/incubator/rich-text/scrollrichedittext.lzx
   openlaszlo/branches/legals/lps/components/incubator/rich-text/test/formatfontsize.lzx
   openlaszlo/branches/legals/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx
   openlaszlo/branches/legals/lps/components/lz/list.lzx
   openlaszlo/branches/legals/lps/components/lz/radio.lzx
   openlaszlo/branches/legals/lps/components/lz/tree.lzx
   openlaszlo/branches/legals/lps/components/rpc/library/dhtml/rpc.js
   openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx
   openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx
   openlaszlo/branches/legals/lps/components/utils/replicator/replicatorselectionmanager.lzx
   openlaszlo/branches/legals/lps/includes/source/embednew.js
   openlaszlo/branches/legals/lps/utils/viewer/viewer.jsp
   openlaszlo/branches/legals/test/components/base/lzunit-basedatacombobox.lzx
   openlaszlo/branches/legals/test/explicit-replicators/lazy-replicator.lzx
   openlaszlo/branches/legals/test/explicit-replicators/replicator.lzx
   openlaszlo/branches/legals/test/explicit-replicators/test-replicator.lzx
   openlaszlo/branches/legals/test/lfc/lztrack/depthbug.lzx
   openlaszlo/branches/legals/test/lfc/lztrack/trackgroups.lzx
   openlaszlo/branches/legals/test/style/simple/simple.lzx
   openlaszlo/branches/legals/test/style/simple/undefineds.lzx
Log:
Merged revisions 6000-6068,6071-6199 via svnmerge from 
http://svn.openlaszlo.org/openlaszlo/branches/wafflecone

.......
  r6001 | hqm | 2007-08-10 10:15:54 -0700 (Fri, 10 Aug 2007) | 28 lines
  
  Change 20070810-hqm-2 by hqm at IBM-2E06404CB67 on 2007-08-10 12:28:29 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone/lps/components
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/lps/components
  
  Summary: amazon soap fails in dhtml / wafflecone branch
  
  New Features:
  
  Bugs Fixed: LPP-4474
  Bug: LPP-4474
  
  Technical Reviewer: max 
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  
  Tests:
  
  amazon soap
.......
  r6004 | ben | 2007-08-10 11:17:28 -0700 (Fri, 10 Aug 2007) | 33 lines
  
  Change 20070809-ben-u by ben at slim.local on 2007-08-09 14:30:16 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Explicitly hook up font color combobox to editor's font color
  
  New Features:
  
  Bugs Fixed: LPP-4461 In rich text editor, font color combo box does not update when cursor moves to different colored text
  
  Technical Reviewer: max
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  This change is more of the process of making connections between the editor and the
  editing components explicit. When the editor is hooked up to the font color combo box, the
  font color combo box must change its color to match the color of the editor's default
  font color. This sounds like doubletalk, but it's actually more like quadrupletalk. 
  
  Release Notes:
  
  Details:
  In order for the font color combo box to match the color of the default font of the
  associated editor, the default font of the editor *must* be one of the color options
  in the fontcolors dataset.      
  
  Tests:
  
  http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-driver.lzx?debug=true&lzr=swf8
  Select some text. Choose a color. Move the cursor to some other text. The color combo box should take on the color of the text it is currently in. Select some more text, set it's color. Move the cursor between text of various colors, and the color combo box should always update to match the color of the text at the current insertion point. 
.......
  r6007 | ptw | 2007-08-10 13:46:33 -0700 (Fri, 10 Aug 2007) | 25 lines
  
  Change 20070808-ptw-E by ptw at dueling-banjos.local on 2007-08-08 16:24:00 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Update explicit replicator tests
  
  Bugs Fixed:
  LPP-4487 'test/explicit-replicators/replicator.lzx not working'
  
  Technical Reviewer: mamye (pending)
  
  Details:
      Pablo change the API of simple replicator.  Conform to that.
      Updated test-replicator to have a better layout, and commented out
      scrollbars with bug filed to fix them.
  
      Silence warnings in replicator.  Test for ready before sending events.
  
      Fix replicationselectionmanager to work as a sibling to the
      explicit replicator.
  
  Tests:
      Inspection
.......
  r6010 | max | 2007-08-10 14:21:06 -0700 (Fri, 10 Aug 2007) | 27 lines
  
  Change 20070810-maxcarlson-U by maxcarlson at Plastik.local on 2007-08-10 13:58:38 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: More LFC optimization
  
  New Features:
  
  Bugs Fixed: LPP-4414 - Improve startup performance (partial)
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzNode.lzs - Move test for __LZstyleConstraints outside __LZapplyStyleConstraints() to save method calls.  Avoid checking dep.length twice in applyConstraint().
  
  LzCSSStyle.js - Inline _compoundSelectorApplies() call in getPropertyValueFor().  Simplify/rename _selectorApplies() _compoundSelectorApplies() as it now only applies to compound selectors.  
  
  LzSprite.as - Avoid sending resource load events for empty resources.
      
  Tests: http://localhost:8080/wafflecone/...silver/main.lzx?lzr=dhtml&lzt=html shows ~37152 fewer total method calls (from 206356 to 169204).  At least 44288 calls to _compoundSelectorApplies() have been eliminated.  http://localhost:8080/wafflecone/test/smoke/smokecheck.lzx passes.
.......
  r6011 | max | 2007-08-10 14:21:58 -0700 (Fri, 10 Aug 2007) | 1 line
  
  + rename t to a unique name to prevent namespace conflict in http://localhost:8080/wafflecone/test/style/metasuite.lzx?lzr=swf8&debug=true
.......
  r6012 | mkratt | 2007-08-10 14:34:46 -0700 (Fri, 10 Aug 2007) | 1 line
  
  add debug
.......
  r6014 | max | 2007-08-10 15:32:41 -0700 (Fri, 10 Aug 2007) | 24 lines
  
  Change 20070810-maxcarlson-y by maxcarlson at Plastik.local on 2007-08-10 15:19:49 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Don't evalueate CSS that would be overridden by a static attribute
  
  New Features:
  
  Bugs Fixed: LPP-4443 - Don't warn on undefined style constraints when constant specified
  
  Technical Reviewer: ben
  QA Reviewer: promanik
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzNode.lzs - Don't get CSS value if it would be overridden by a instance/class attribute later
      
  
  Tests: http://localhost:8080/wafflecone/test/style/constraints/main.lzx?lzr=swf8 passes without warning for 'dyson' instance.  http://localhost:8080/wafflecone/diamond-legals/client/future/lzmail-silver/main.lzx?lzr=swf8&debug=true has far fewer spurious warnings.
.......
  r6033 | ptw | 2007-08-13 13:23:15 -0700 (Mon, 13 Aug 2007) | 22 lines
  
  Change 20070813-ptw-I by ptw at dueling-banjos.local on 2007-08-13 15:52:57 EDT
      in /Users/ptw/OpenLaszlo/wafflecone/lps/components
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/lps/components
  
  Summary: Upgrade test-replicator test
  
  New Features:
  The test now presents explicit and implicit cases side-by-side for
  easier comparison.
  
  Technical Reviewer: mkratt (pending)
  QA Reviewer: pkang (pending)
  
  Details:
      Replicated the test to show simple and lazy replication both
      explicit and implicit for comparison.  Explicit lazy replication
      still does not interact correctly with scrollbars (LPP-4484).
  
  Tests:
      IWFM
.......
  r6037 | max | 2007-08-13 16:19:30 -0700 (Mon, 13 Aug 2007) | 23 lines
  
  Change 20070813-maxcarlson-j by maxcarlson at plastik on 2007-08-13 14:20:00 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: replicator performance improvements, safety
  
  New Features:
  
  Bugs Fixed: LPP-4405 'Implement ExplicitReplication'
  
  Technical Reviewer: ptw
  QA Reviewer: promanik
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Only call setVisible() if visibility changed.  Lock layouts before replication, and unlock after.  Only call applyData() if it exists.
      
  Tests: http://localhost:8080/wafflecone/test/explicit-replicators/lazy-replicator.lzx, http://localhost:8080/wafflecone/test/explicit-replicators/replicator.lzx and http://localhost:8080/wafflecone/test/explicit-replicators/test-replicator.lzx pass in SWF and DHTML.
.......
  r6038 | max | 2007-08-13 16:23:05 -0700 (Mon, 13 Aug 2007) | 1 line
  
  + Update testcase with warning about known failure
.......
  r6040 | max | 2007-08-13 16:29:22 -0700 (Mon, 13 Aug 2007) | 24 lines
  
  Change 20070813-maxcarlson-a by maxcarlson at plastik on 2007-08-13 12:18:32 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Add support for Iceweasel
  
  New Features:
  
  Bugs Fixed: LPP-3738 - Remove DHTML startup warning message for IceWeasel browser
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Add wupport for Iceweasel per LPP-3738.
      
  
  Tests: Type about:config in the address bar of FireFox, and set the preference name "general.useragent.override" to 'Iceweasel/2.0.0.6'.  You should no longer see warnings when loading DHTML apps.  Iceweasel is just another name for Firefox...
.......
  r6041 | ben | 2007-08-13 16:51:55 -0700 (Mon, 13 Aug 2007) | 37 lines
  
  Change 20070813-ben-W by ben at slim.local on 2007-08-13 16:40:21 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix rich text edit area bug where clicking bold moved insertion point
  
  New Features:
  
  Bugs Fixed: LPP-4396 rich text editor: clicking bold moves insertion point
  
  Technical Reviewer: bshine 
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  This is an application of a patch submitted by Dan Stowell, reviewed and
  committed by Ben Shine. The patch from dstowell had to be updated to be
  legals-friendly. 
  Note that this change only works in swf, because the rich text editor
  does not work in DHTML at all. 
  
  Release Notes:
  
  Details:
  Also fixes EM-1182. 
  
  However! 
  LPP-4489 "Richedittext: Can't change formatting before typing" is still present. 
  So is LPP-4480 "Richedittext: Moving focus outside the text editor doesn't clear selection."
  and LPP-4481 "Richedittext: Text size 18 doesn't seem to do anything."
      
  
  Tests:
  http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx?lzr=swf7
  http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx?lzr=swf8
.......
  r6042 | max | 2007-08-13 16:52:08 -0700 (Mon, 13 Aug 2007) | 25 lines
  
  Change 20070813-maxcarlson-b by maxcarlson at plastik on 2007-08-13 16:24:27 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: UPDATED: performance improvements
  
  New Features:
  
  Bugs Fixed: LPP-4394 - "LzGlobalMouse.onmousemove" is way to slow for "LzView.prototype.getMouse.dependencies" in SWF, LPP-4414 - Improve startup performance (partial)
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzCSSStyle.js - Inlined getSpecificity() and getSelectorSpecificity() in __compareSpecificity().  Swf 7 profiler shows 2217 fewer function calls.
  
  LaszloView.lzs - Fix per LPP-4394, cache setVisible() and setVisibility() values.
  
  Tests: Swf 7 profiler shows 2217 fewer calls to getSpecificity() and getSelectorSpecificity() and 47 fewer calls to __LZupdateShown().  Also passes http://localhost:8080/wafflecone/test/style/metasuite.lzx?lzr=swf8&debug=true
.......
  r6043 | max | 2007-08-13 17:29:51 -0700 (Mon, 13 Aug 2007) | 24 lines
  
  Change 20070813-maxcarlson-7 by maxcarlson at plastik on 2007-08-13 14:45:34 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Use png resource for tree
  
  New Features:
  
  Bugs Fixed: LPP-4414 - Improve startup performance (partial) 
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Use png resource for tree to save space.
      
  
  Tests: http://localhost:8080/wafflecone/examples/components/style_example.lzx?lzt=info shows ~2kb less compressed
.......
  r6048 | ptw | 2007-08-14 10:00:28 -0700 (Tue, 14 Aug 2007) | 28 lines
  
  Change 20070814-ptw-o by ptw at dueling-banjos.local on 2007-08-14 11:49:58 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Improve debug printing of LzDataAttrBind objects
  
  Technical Reviewer: hminsky (pending)
  QA Reviewer: max (pending)
  
  Details:
      Improved the printing of LzDataAttrBind objects a little to help
      me diagnose LPP-4494.
  
      LzDebug: Don't escape quotes in strings if you are not quoting the
      string.
  
      LzText: Don't override lz.node#_dbg_name unless it would resort to
      calling lz.text.toString.
  
      LzDataAttrBind: Don't quote the $path expression
  
      LzClass: Distinguish between class instance methods and methods
      that have been added directly to an instance.
  
  Tests:
      IWFM
.......
  r6050 | ben | 2007-08-14 16:36:50 -0700 (Tue, 14 Aug 2007) | 34 lines
  
  Change 20070813-ben-I by ben at slim.local on 2007-08-13 17:54:29 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix rich text editor: now you can change the formatting before typing 
  
  New Features:
  
  Bugs Fixed: LPP-4489 Can't change format before typing
  LPP-4495 Richedittext: can't change font
  LPP-4477 Selecting all of the text in a richedittext and then changing the text's properties doesn't change the final character.
  LPP-4479 Richedittext: Successive changing of a text's properties shortens the selected text range by one character.
  
  Technical Reviewer: max 
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation: 
  There was an onblur handler for the rich text edit area that was just a horrible idea,
  and never helped. The LzModeManager.rawMouseEvent handler (added in the previous change to 
  this file) now handles selection management when the focus changes. Getting rid of this
  onblur handler fixes four bugs, listed above. 
  
  Release Notes:
  
  Details:
  
  Still present: 
  LPP-4480 Richedittext: Moving focus outside the text editor doesn't clear selection. STILL PRESENT
  
  Tests:
  http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx?lzr=swf8&debug=true
.......
  r6057 | max | 2007-08-14 17:28:24 -0700 (Tue, 14 Aug 2007) | 28 lines
  
  Change 20070814-maxcarlson-j by maxcarlson at plastik on 2007-08-14 16:34:59 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: LFC cleanup
  
  New Features:
  
  Bugs Fixed: LPP-4414 - Improve startup performance (partial)
  
  Technical Reviewer: promanik
  QA Reviewer: ptw
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzTextSprite.as - Clean up font name lookups.
  
  LzCSSStyle.js - Fix assignment to free variable t in services/LzCSSStyle.js (thanks Tucker!)
  
  LzNode.lzs - Add a note to a recent CSS styling fix referencing the bug number it fixed.
      
  
  Tests: 'cd WEB-INF/lps/lfc/; ant;' no longer warns about the unassigned variable.
.......
  r6065 | max | 2007-08-15 11:26:15 -0700 (Wed, 15 Aug 2007) | 24 lines
  
  Change 20070815-maxcarlson-h by maxcarlson at plastik on 2007-08-15 11:06:48 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix brain-o in replicator
  
  New Features:
  
  Bugs Fixed: LPP-4405 'Implement ExplicitReplication'
  
  Technical Reviewer: ptw
  QA Reviewer: promanik
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes: Lock and unlock layouts at the right time.
  
  Details:
      
  
  Tests: http://localhost:8080/wafflecone/test/explicit-replicators/lazy-replicator.lzx, http://localhost:8080/wafflecone/test/explicit-replicators/replicator.lzx and http://localhost:8080/wafflecone/test/explicit-replicators/test-replicator.lzx pass in SWF and DHTML. 
.......
  r6072 | ben | 2007-08-15 14:58:46 -0700 (Wed, 15 Aug 2007) | 31 lines
  
  Change 20070815-ben-1 by ben at slim.local on 2007-08-15 14:47:59 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Eliminate some warnings in doc build
  
  New Features:
  
  Bugs Fixed: LPP-4505 Eliminate several warnings in doc build
  
  Technical Reviewer: none 
  QA Reviewer: frisco (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Markup inside doc comments must be properly formed, and p tags cannot
  enclose more than one line that starts with @foo. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  ant doc builds without these warnings: 
   WARNING: Could not parse comment '<fragment><p> 
  or
   [java] [Fatal Error] :2:107: The element type "p" must be terminated by the matching end-tag "</p>". 
.......
  r6073 | ben | 2007-08-15 15:51:58 -0700 (Wed, 15 Aug 2007) | 25 lines
  
  Change 20070815-ben-z by ben at slim.local on 2007-08-15 15:50:38 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary:  Fix broken links on quick index page. 
  
  New Features:
  
  Bugs Fixed: LPP-4510 Quick Index page has broken doc links
  
  Technical Reviewer: none 
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  Fixed broken links to contributor's guide and developer's guide. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
.......
  r6074 | ben | 2007-08-15 15:57:10 -0700 (Wed, 15 Aug 2007) | 27 lines
  
  Change 20070815-ben-M by ben at slim.local on 2007-08-15 15:55:59 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fixed broken links on index page
  
  New Features:
  
  Bugs Fixed: LPP-4509 internal index page has broken link to deployer's guide
  
  Technical Reviewer: none
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  Things moved; the index needs to point to where things are now. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  http://localhost:8080/wafflecone/
  follow links in section "Docs." None of them should be 404s. 
.......
  r6090 | ptw | 2007-08-16 12:07:05 -0700 (Thu, 16 Aug 2007) | 24 lines
  
  Change 20070816-ptw-6 by ptw at dueling-banjos.local on 2007-08-16 12:33:26 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Support for enabling backtraces at runtime
  
  Bugs Fixed:
  LP-1417 'Allow backtracing to be invoked from the developer console' (partial)
  
  Technical Reviewer: hminksy (pending)
  QA Reviewer: max (pending)
  
  Details:
      buildlfcbacktrace, build.xml: Build LFC*-backtrace
  
  Tests:
      Henry is going to make the modifications to the compilation
      manager to allow you to say ?debug=backtrace which will enable
      backtrace generation in the compiler and link with the
      LFC*-backtrace lfc.  This will allow you to enable/disable
      backtracing at runtime, rather than having to rebuild your system
      each time you switch.
.......
  r6098 | ptw | 2007-08-16 17:44:39 -0700 (Thu, 16 Aug 2007) | 18 lines
  
  Change 20070816-ptw-W by ptw at dueling-banjos.local on 2007-08-16 20:41:14 EDT
      in /Users/ptw/OpenLaszlo/wafflecone/test
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/test
  
  Summary: Build swf backtrace lfc's
  
  Bugs Fixed:
  LP-1417 'Allow backtracing to be invoked from the developer console' (partial)
  
  Technical Reviewer: hminsky (pending)
  QA Reviewer: max (pending)
  Details:
      Forgot that swf lfc's are in their own branch
  
  Tests:
      Inspection, Henry will test with his compilation-manager part
.......
  r6099 | ptw | 2007-08-16 18:02:14 -0700 (Thu, 16 Aug 2007) | 18 lines
  
  Change 20070816-ptw-f by ptw at dueling-banjos.local on 2007-08-16 20:47:40 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Ok, once more with feeling
  
  Bugs Fixed:
  LPP-1417 'Allow backtracing to be invoked from the developer console' (partial)
  
  Technical Reviewer: hminsky (pending)
  QA Reviewer: max (pending)
  Details:
      Actually get it right this time
  
  Tests:
      ant make shows that LFC{7,8}-backtrace.lzl is built
.......
  r6100 | jcrowley | 2007-08-16 19:36:17 -0700 (Thu, 16 Aug 2007) | 37 lines
  
  Change 20070816-jcrowley-k by jcrowley at doctormanhattan.mshome.net on 2007-08-16 17:00:53 EDT
      in /Users/jcrowley/src/svn/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Calendar demo presents no sample data; 'p is null' warnings in Wafflecone Calendar
  
  New Features:
  
  Bugs Fixed: LPP-4504, LPP-4514
  
  Technical Reviewer: henry
  QA Reviewer: pbr
  Doc Reviewer: 
  
  Documentation:
  
  Release Notes:
  
  Details: The reason it wasn't loading was because of changes to
  	data handling.  I managed to fix that, and to fix the
  	subsequent lock-up that resulted.
  
  	We might still want to examine why the lock-up occurred
  	in SWF, but not in DHTML, but for now, this solves this
  	particular Calendar-specific bug.
  
  	UPDATE: Okay, think I've hammered down all the Debugger
  	warnings about 'p is null'.
  
  Tests: Run Calendar demo in SWF.  Notice that a) data loads, and
  	b) the app doesn't lock up and throw out a "script
  	taking too long"-type error.
  
  	Also: In Debugger, notice an absence of warnings about
  	'p is null'.
.......
  r6105 | max | 2007-08-16 21:07:26 -0700 (Thu, 16 Aug 2007) | 24 lines
  
  Change 20070816-maxcarlson-h by maxcarlson at plastik on 2007-08-16 19:59:43 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix resource unload/reload in dhtml
  
  New Features:
  
  Bugs Fixed: LPP-4261 - Unable to load and unload resources repeatedly - DHTML
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  
  Tests: See LPP-4261.
.......
  r6110 | max | 2007-08-17 05:11:57 -0700 (Fri, 17 Aug 2007) | 24 lines
  
  Change 20070816-maxcarlson-f by maxcarlson at plastik on 2007-08-16 20:44:10 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: UPDATED: Add flag to only setAttribute() if it the value passed in changed.
  
  New Features:
  
  Bugs Fixed:
  
  Technical Reviewer: ptw
  QA Reviewer: promanik
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Add a flag that only sets the attribute if its value changed.  It's a common pattern to only set an attribute when it changed.  With inlining of setAttribute it will also make sense for performance.
  
  
  Tests: IWFM 
.......
  r6111 | hqm | 2007-08-17 09:57:52 -0700 (Fri, 17 Aug 2007) | 39 lines
  
  Change 20070817-hqm-8 by hqm at IBM-2E06404CB67 on 2007-08-17 03:06:14 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone2
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: add lzbacktrace query arg to turn on backtraces
  
  New Features:
  
  Bugs Fixed: LPP-1417
  Bug: LPP-1417
  
  Technical Reviewer: ptw (pending)
  QA Reviewer: max (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
   
  Release Notes:
  
  backtrace is enabled via new button on dev console, or by
  lzbacktrace=true query arg, or new --backtrace arg to lzc
  
  
  Details:
      
  + support new backtrace flag
  
  Added new checkbox on dev console to enable backtrace
  
  Tests:
  
  test app prints Debug.warn('foo'), click on it to see if backtraces are turned on
  
  see JIRA for test case
.......
  r6121 | ben | 2007-08-17 11:30:10 -0700 (Fri, 17 Aug 2007) | 32 lines
  
  Change 20070815-ben-j by ben at slim.local on 2007-08-15 13:36:15 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix richtext: font size 18 doesn't do anything
  
  New Features:
  
  Bugs Fixed: LPP-4451: Richedittext: Text size 18 doesn't seem to do anything.
  
  Technical Reviewer: jcrowley 
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  The formatfontsize combo box needs to act as if it's changed, in order
  to make sure that we tell the editor to change the font size. The superclass
  (lzcombobox) doesn't seem to be setting it's "changed" instance variable 
  properly, so for now I'm just forcing changed to true when onselect is called. 
  The lzcombobox potential bug is filed as LPP-4506.
  
  Release Notes:
  
  Details:
      
  
  Tests:
  http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-driver.lzx?lzr=swf8
  Select some text. Change it to size 72. Select some of the text inside that 72-point text. Set it to size 18. The text should now be size 18. 
.......
  r6125 | max | 2007-08-17 12:38:57 -0700 (Fri, 17 Aug 2007) | 24 lines
  
  Change 20070817-maxcarlson-J by maxcarlson at plastik on 2007-08-17 11:45:38 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix view.updateResourceSize() in DHTML
  
  New Features:
  
  Bugs Fixed: LPP-4240 - View.updateResourceSize() generates error in DHTML
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Implement updateResourceSize() in DHTML.
      
  
  Tests: See LPP-4240
.......
  r6127 | max | 2007-08-17 13:15:14 -0700 (Fri, 17 Aug 2007) | 1 line
  
  + update lztrack testcases
.......
  r6130 | ben | 2007-08-17 14:27:34 -0700 (Fri, 17 Aug 2007) | 31 lines
  
  Change 20070817-ben-0 by ben at slim.local on 2007-08-17 14:24:44 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Extending the test case for basedatacombobox to show some odd behavior. 
  
  New Features:
  
  Bugs Fixed:
  
  Technical Reviewer: none
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  This adds a test that tries to select items by index. It mostly works,
  but fails when the index is -1. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  http://localhost:8080/wafflecone/test/components/base/lzunit-basedatacombobox.lzx 
  fails with 
  Tests: 5 Failures: 2 Errors: 0
  TestFailure: testSelectItemAt failed: Equals:  expected 2 got ''
  TestFailure: testBadSelectionIndex failed: False:  expected false got true
.......
  r6131 | max | 2007-08-17 15:22:51 -0700 (Fri, 17 Aug 2007) | 24 lines
  
  Change 20070817-maxcarlson-e by maxcarlson at plastik on 2007-08-17 11:54:00 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix stretches with clickable in swf
  
  New Features:
  
  Bugs Fixed: LPP-3726 - stretches breaks clickable in swf7/8
  
  Technical Reviewer: promanik
  QA Reviewer: hminsky
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Update resource and button size after media is loaded.
      
  
  Tests: See LPP-3726.
.......
  r6132 | max | 2007-08-17 15:29:20 -0700 (Fri, 17 Aug 2007) | 26 lines
  
  Change 20070817-maxcarlson-I by maxcarlson at plastik on 2007-08-17 12:08:41 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix duplicate onfocus and onblur events
  
  New Features:
  
  Bugs Fixed: LPP-3907 - edittext and inputtext may fire onfocus resp. onblur twice
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzInputTextSprite.as - Fix test for current focus in __handlelostFocus().  
  
  LzInputTextSprite.lzs - Track current focus/blur state to avoid sending duplicate events.
      
  
  Tests: Testcase from LPP-3907 passes in swf and dhtml.
.......
  r6134 | ptw | 2007-08-17 16:26:58 -0700 (Fri, 17 Aug 2007) | 33 lines
  
  Change 20070817-ptw-3 by ptw at dueling-banjos.local on 2007-08-17 07:12:53 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Remove `make` trampoline from Class system
  
  Bugs Fixed:
  LPP-1605 'ctor precedence is wrong'
  LPP-4365 'Adding prototype functions to builtin objects a bit broken'
  LPP-4513 'Compiler Improvements to address performance'
  
  Technical Reviewer: max (Message-ID: <46C62AAF.1070400 at openlaszlo.org>)
  QA Reviewer: hminsky (pending)
  
  Details:
      LzDefs: Rework LzInheritedHash to not require .make.
  
      Class: Rework contstructors to call .initialize, .make retained
      for backwards-compatibility.  Split out class validation code.
  
      Compiler: Remove passThroughNodes before dispatching.  Print new
      expressions with correct associativity.
  
      JavascriptGenerator, JavascriptCompressor, CodeGenerator: Remove
      translation of new to .make
  
      Parser.jjt: Learn how to correctly parse a `new` expressions and
      maintain associativity.
  
  Tests:
      smokecheck in swf7, swf8, dhtml
.......
  r6135 | max | 2007-08-17 17:08:10 -0700 (Fri, 17 Aug 2007) | 24 lines
  
  Change 20070817-maxcarlson-j by maxcarlson at plastik on 2007-08-17 13:59:45 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Clean up radio
  
  New Features:
  
  Bugs Fixed: LPP-3560 - radiogroup and selecting an item
  
  Technical Reviewer: jcrowley
  QA Reviewer: promanik
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Per LPP-3560, move duplicate selection code to applyData() and remove extra onclick handler.
      
  
  Tests: See LPP-3560.
.......
  r6136 | max | 2007-08-17 17:13:09 -0700 (Fri, 17 Aug 2007) | 29 lines
  
  Change 20070817-maxcarlson-L by maxcarlson at plastik on 2007-08-17 13:21:33 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Unify capability warnings across runtimes
  
  New Features:
  
  Bugs Fixed: LPP-4200 - Missing warnings in "LzBrowser.js" (DHTML)
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzInputText.lzs - Use this.capabilities instead of this.sprite.capabilities and __warnCapability() instead of homespun warnings.
  
  LzText.lzs - Only set advanced text methods and setters in construct() if capabilities.advancedtext is true.  Use this.capabilities instead of this.sprite.capabilities and __warnCapability() instead of homespun warnings. 
  
  LaszloView.lzs - Expose LzSprite.prototype.capabilities as view.capabilities.  Add shared __warnCapability() method.  Use this.capabilities instead of this.
  sprite.capabilities and __warnCapability() instead of homespun warnings.
      
  
  Tests: 'ant lztest' and smoketest pass.
.......
  r6137 | max | 2007-08-17 17:14:47 -0700 (Fri, 17 Aug 2007) | 38 lines
  
  Should have been part of r6136...
  
  Change 20070817-maxcarlson-L by maxcarlson at plastik on 2007-08-17 13:21:33 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Unify capability warnings across runtimes
  
  New Features:
  
  Bugs Fixed: LPP-4200 - Missing warnings in "LzBrowser.js" (DHTML)
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzInputText.lzs - Use this.capabilities instead of this.sprite.capabilities and __warnCapability() instead of homespun warnings.
  
  LzText.lzs - Only set advanced text methods and setters in construct() if capabilities.advancedtext is true.  Use this.capabilities instead of this.sprite.capabilities and __warnCapability() instead of homespun warnings.
  
  LaszloView.lzs - Expose LzSprite.prototype.capabilities as view.capabilities.  Add shared __warnCapability() method.  Use this.capabilities instead of this.
  sprite.capabilities and __warnCapability() instead of homespun warnings.
  
  
  Tests: 'ant lztest' and smoketest pass.
  
  Files:
  M      WEB-INF/lps/lfc/views/LzInputText.lzs
  M      WEB-INF/lps/lfc/views/LzText.lzs
  M      WEB-INF/lps/lfc/views/LaszloView.lzs
  
  Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20070817-maxcarlson-L.tar
.......
  r6141 | max | 2007-08-17 17:59:23 -0700 (Fri, 17 Aug 2007) | 25 lines
  
  Change 20070817-maxcarlson-c by maxcarlson at plastik on 2007-08-17 17:26:25 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: UPDATED: Fix swf mouse coordinate rounding issue
  
  New Features:
  
  Bugs Fixed: LPP-4436 - window decrements its x and y coordinates when clicked
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzSprite.as - Round off coordinates in getMouse()
  
  
  Tests: See LPP-4436 
.......
  r6142 | max | 2007-08-17 18:18:14 -0700 (Fri, 17 Aug 2007) | 24 lines
  
  Change 20070817-maxcarlson-D by maxcarlson at plastik on 2007-08-17 17:44:06 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: <list> should disable "autoscrollbar" on destroy
  
  New Features: 
  
  Bugs Fixed: LPP-4431 - <list> should disable "autoscrollbar" on destroy
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Add destroy() method per LPP-4431
      
  
  Tests: http://localhost:8080/legals-clean/examples/components/style_example.lzx and http://localhost:8080/legals-clean/examples/components/list_example.lzx run as before in dhtml and swf.
.......
  r6151 | max | 2007-08-19 10:18:15 -0700 (Sun, 19 Aug 2007) | 24 lines
  
  Change 20070817-maxcarlson-o by maxcarlson at plastik on 2007-08-17 18:21:44 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: datalistselector fixes
  
  New Features:
  
  Bugs Fixed: LPP-4315 - "datalistselector#findIndex(..)" attempts to compare a "LzDataElement" against a "LzView", LPP-4316 - "datalistselector#getItemByData(..)" and "datalistselector#getItemIndexByData(..)" should test against null
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Updated findIndex() per LPP-4315, getItemByData() and getItemIndexByData() per LPP-4316.
      
  
  Tests:
.......
  r6156 | max | 2007-08-20 12:44:08 -0700 (Mon, 20 Aug 2007) | 24 lines
  
  Change 20070819-maxcarlson-g by maxcarlson at plastik on 2007-08-19 10:28:24 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Clean-up for "basescrollbar"
  
  New Features:
  
  Bugs Fixed: LPP-4427 - Clean-up for "basescrollbar"
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Patched per LPP-4427.
      
  
  Tests: See LPP-4427.
.......
  r6158 | max | 2007-08-20 13:12:42 -0700 (Mon, 20 Aug 2007) | 24 lines
  
  Change 20070820-maxcarlson-g by maxcarlson at plastik on 2007-08-20 12:47:48 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Eliminate warnings in basecomponent.lzx
  
  New Features:
  
  Bugs Fixed: LPP-4200 - Missing warnings in "LzBrowser.js"
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Only set tint if 'view.capabilities.colortransform' is true.
      
  
  Tests: Any component test in DHTML will have far fewer warnings in debug mode.
.......
  r6160 | max | 2007-08-20 17:28:38 -0700 (Mon, 20 Aug 2007) | 24 lines
  
  Change 20070820-maxcarlson-Q by maxcarlson at plastik on 2007-08-20 15:06:50 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Better performance for <basetrackgroup>
  
  New Features:
  
  Bugs Fixed: LPP-4433 - Better performance for <basetrackgroup>
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Applied changes per LPP-4433.
      
  
  Tests: All tests in wafflecone/test/lfc/lztrack/ pass in swf and dhtml.
.......
  r6163 | ben | 2007-08-20 17:45:08 -0700 (Mon, 20 Aug 2007) | 47 lines
  
  Change 20070820-ben-Q by ben at slim.local on 2007-08-20 16:02:38 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone-doctools
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Make laszlo explorer, internal index, docs/index point to 3.4 reference on www.openlaszlo.org 
  
  New Features:
  
  Bugs Fixed: LPP-4533 Link to 3.4 docs on openlaszlo.org from laszlo explorer
  
  Technical Reviewer: max
  QA Reviewer: frisco (pending)
  Doc Reviewer: frisco (pending)
  
  Documentation:
  With wafflecone, we have decided to have all the links point to the 3.4 documentation on
  www.openlaszlo.org. This change makes the documentation and index and laszlo explorer all
  point to the reference on www.openlaszlo.org. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  For the internal index: 
  http://localhost:8080/wafflecone-doctools/ scroll to the bottom. 
  Notice link to Reference Guide goes to www.openlaszlo.org. 
  
  For laszlo explorer: 
  Go to Laszlo Explorer http://localhost:8080/wafflecone-doctools/laszlo-explorer/
  Click on Documentation. 
  Notice that the right pane includes a link to OL Reference for 3.4, served from
  www.openlaszlo.org. 
  Click on LZX Reference in the left nav pane. 
  A new window opens up, with full chrome, with the reference served from
  www.openlaszlo.org/lps3/reference. 
  
  For the documentation index: 
  Go to http://localhost:8080/wafflecone-doctools/docs/
  Notice that the OpenLaszlo Reference bullet list describes where to find both 3.4 and 4.0 docs,
  and why you might want to look at each. 
  
  Note LPP-4450, "Laszlo Explorer hierarchical menu does not display in dhtml/firefox" is still open,
  but is not caused by this change. 
.......
  r6164 | max | 2007-08-20 19:27:44 -0700 (Mon, 20 Aug 2007) | 24 lines
  
  Change 20070820-maxcarlson-u by maxcarlson at plastik on 2007-08-20 17:32:03 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix memory leaks in "basetabelement"
  
  New Features:
  
  Bugs Fixed: LPP-4432 - Memory leaks in "basetabelement"
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Applied fixes per LPP-4432.
      
  
  Tests: http://localhost:8080/wafflecone/examples/components/tabs_example.lzx and http://localhost:8080/wafflecone/test/components/base/lzunit-basetabs.lzx pass in swf and dhtml.
.......
  r6172 | ben | 2007-08-21 17:37:56 -0700 (Tue, 21 Aug 2007) | 30 lines
  
  Change 20070821-ben-W by ben at slim.local on 2007-08-21 17:35:02 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone-doctools
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix links to contributor's guide, developer's guide, in documentation cover page in laszlo explorer
  
  New Features:
  
  Bugs Fixed: LPP-4497 Selecting Contributor's and Developer's Guide results in 404 error
  
  Technical Reviewer: none
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  The right-hand-pane of the documentation section of the Laszlo Explorer had broken
  links to the developer's guide and the contributor's guide. I have fixed these. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  Go to Laszlo Explorer. Click "Documentation" in the left-nav. In the right-hand pane, click "Contributor's Guide" --
  you should get the contributor's guide, not a 404. 
  Go to Laszlo Explorer. Click "Documentation" in the left-nav. In the right-hand pane, click "Developer's Guide" --
  you should get the developer's guide, not a 404. 
.......
  r6175 | max | 2007-08-21 18:51:46 -0700 (Tue, 21 Aug 2007) | 24 lines
  
  Change 20070821-maxcarlson-N by maxcarlson at plastik on 2007-08-21 17:59:00 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Make swf drawviews respec visible attribute
  
  New Features:
  
  Bugs Fixed: LPP-4370 - drawview doesn't respect visibility
  
  Technical Reviewer: ben
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Reset visibility to the value of thie visible attribute.
      
  
  Tests: See LPP-4370.
.......
  r6176 | ben | 2007-08-21 21:26:21 -0700 (Tue, 21 Aug 2007) | 33 lines
  
  Change 20070821-ben-d by ben at slim.local on 2007-08-21 17:53:53 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Eliminate warnings in richtext tests.
  
  New Features:
  
  Bugs Fixed:
  
  Technical Reviewer: jcrowley 
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  Several warnings and errors were being emitted at startup of the rich text 
  edit area test and driver files. These were because the linking up of the
  editor to the formatting menus was fuzzy; I've made the linking up
  explicit, and now we don't get these warnings, but the functionality
  still works once we are all hooked up. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx?lzr=swf8&debug=true&lzbacktrace=true
  http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-driver.lzx?lzr=swf8&debug=true&lzbacktrace=true
  
  ...runs without warnings or errors. 
.......
  r6181 | ptw | 2007-08-22 05:48:23 -0700 (Wed, 22 Aug 2007) | 26 lines
  
  Change 20070821-ptw-e by ptw at dueling-banjos.local on 2007-08-21 16:28:27 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Allow overriding container and mask for explicit replicator
  
  Bugs Fixed:
  LPP-4544 'Ability to override default container and mask views for explicit replicator'
  
  Submitted on behalf of: pkang
  Technical Reviewer: ptw (pending)
  QA Reviewer: mamye (pending)
  
  Details:
      Removed old tests.  Added new floating-list test from Pablo.
      Updated test-replicators (side-by-side test) to actually show
      implicit lazy replication.
  
      Exposed `container` (defaults to replicator immediateparent) and
      `mask` (defaults to container immediateparent) attributes of
      replicator so that Pablo can override them in subclasses.
  
  Tests:
      test/explicit-replicators/*
.......
  r6183 | max | 2007-08-22 10:18:35 -0700 (Wed, 22 Aug 2007) | 24 lines
  
  Change 20070822-maxcarlson-o by maxcarlson at plastik on 2007-08-22 10:06:35 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Vis source viewer JSP
  
  New Features:
  
  Bugs Fixed: LPP-4425 - Source for Small applications, Demos, and Components can't be viewed
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Use new fileresolver API
      
  
  Tests: http://localhost:8080/wafflecone/lps/utils/viewer/viewer.jsp?file=/demos/amazon/amazon.lzx works again.
.......
  r6185 | max | 2007-08-22 10:52:57 -0700 (Wed, 22 Aug 2007) | 24 lines
  
  Change 20070822-maxcarlson-F by maxcarlson at plastik on 2007-08-22 10:33:12 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix memory leaks in swf loader
  
  New Features:
  
  Bugs Fixed: LPP-4535 - Memory leaks in "LzMakeLoadSprite"
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: See LPP-4535.
      
  
  Tests: IWFM.
.......
  r6194 | max | 2007-08-22 16:19:41 -0700 (Wed, 22 Aug 2007) | 1 line
  
  + this fixes the testcase (per comments in LPP-4523 and LPP-4524)
.......
  r6197 | ptw | 2007-08-23 12:28:00 -0700 (Thu, 23 Aug 2007) | 22 lines
  
  Change 20070823-ptw-n by ptw at dueling-banjos.local on 2007-08-23 15:22:32 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: lzc should not clobber JAVA_OPTS
  
  Bugs Fixed:
  LPP-4560 'lzc does not respect JAVA_OPTS on non-windows platforms'
  
  Technical Reviewer: ben (pending)
  QA Reviewer: mamye (pending)
  Doc Reviewer: (pending)
  
  Details:
      It looks like someone (maybe me?) was trying to tweak lzc and
      accidentally checked it in.  Remove the bogus line that clobbers
      JAVA_OPTS.
  
  Tests:
      My assertions are firing now.
.......
  r6199 | jsundman | 2007-08-23 14:48:07 -0700 (Thu, 23 Aug 2007) | 1 line
  
  bug:lpp-4539  editted copy to make it more appropriate for 4.0.5.  Still needs review.
.......



Property changes on: openlaszlo/branches/legals
___________________________________________________________________
Name: svnmerge-integrated
   - /openlaszlo/branches/wafflecone:1-5746,5818-6000 /openlaszlo/trunk:1-3892,3894-3952,3954-4393,4395-4461,4463-4467,4469-4471,4473-5085,5087-5171,5173-5203,5205-5209,5211-5331,5333-5334
   + /openlaszlo/branches/wafflecone:1-5746,5818-6068,6070-6199 /openlaszlo/trunk:1-3892,3894-3952,3954-4393,4395-4461,4463-4467,4469-4471,4473-5085,5087-5171,5173-5203,5205-5209,5211-5331,5333-5334

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/build.xml
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/build.xml	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/build.xml	2007-09-13 23:38:53 UTC (rev 6473)
@@ -107,7 +107,7 @@
     </ant>     
   </target>
 
-  <!-- We want to build the cross-product of [dhtml, swf7, swf8] with [ regular, debug, profile ] -->
+  <!-- We want to build the cross-product of [dhtml, swf7, swf8] with [ regular, debug, backtrace, profile ] -->
   <target name="lfcs"
           depends="init">
 
@@ -169,6 +169,14 @@
                   "dhtml",
                   "--option nameFunctions --option warnGlobalAssignments '-D$debug=true'");
         }
+        var backtrace = LFCdir + "LFCdhtml-backtrace.js";
+        if (!(new File(backtrace)).exists()) {
+          // TODO: [2006-06-07 ptw] (LPP-2034) When the LFC is 'clean' of
+          // warnings, the options can be changed to simply -g3
+          dobuild(backtrace,
+                  "dhtml",
+                  "--option debugBacktrace --option nameFunctions --option warnGlobalAssignments '-D$debug=true'");
+        }
       }
       if (buildProfile) {
         var profile = LFCdir + "LFCdhtml-profile.js";
@@ -199,6 +207,14 @@
                     "swf" + v,
                     "--option nameFunctions --option warnGlobalAssignments '-D$debug=true'");
           }
+          var backtrace = LFCdir + "LFC" + v + "-backtrace.lzl";
+          if (!(new File(backtrace)).exists()) {
+            // TODO: [2006-06-07 ptw] (LPP-2034) When the LFC is 'clean' of
+            // warnings, the options can be changed to simply -g3
+            dobuild(backtrace,
+                    "swf" + v,
+                    "--option debugBacktrace --option nameFunctions --option warnGlobalAssignments '-D$debug=true'");
+          }
         }
         if (buildProfile) {
           var profile = LFCdir + "LFC" + v + "-profile.lzl";

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/Class.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/Class.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/Class.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -20,8 +20,14 @@
   *
   * @access private
   * @bootstrap true
+  *
+  * @devnote This is the first class constructor.  Constructors for
+  * all other classes are created by Class.make (below).
   */
-var Instance = function () { this.constructor = arguments.callee };
+var Instance = function constructor () {
+  this.constructor = arguments.callee
+  this.initialize.apply(this, arguments);
+};
 Instance.prototype.constructor = Instance; 
 Instance.prototype.__initialized = false;
 Instance.classname = 'Instance';
@@ -68,8 +74,20 @@
       }
       if ($debug) {
         if (! value._dbg_typename) {
+          // Delay 'til runtime so classes can adjust their name to be
+          // their tag name
           value._dbg_owner = this;
-          value._dbg_typename = function () {return this._dbg_owner._dbg_typename + ' function'};
+          value._dbg_typename = function _dbg_typename () {
+            var o = this._dbg_owner;
+            var t = o._dbg_typename;
+            // Prototypes have their own typename, instances should
+            // not, use that to distinguish methods that have been
+            // added directly to instances
+            if (! o.hasOwnProperty('_dbg_typename')) {
+              t += '#' + Debug.IDForObject(o);
+            }
+            return t + ' function';
+          }
         }
       }
     }
@@ -127,6 +145,8 @@
   * Default method does nothing
   *
   * @access private
+  *
+  * @devnote The call to the default method is optimized away in class constructors
   */
 Instance.prototype.addProperty('initialize', function initialize () {});
 
@@ -161,74 +181,89 @@
   * Make a new instance of a class.
   *
   * @access private
+  *
+  * @devnote This is just for coherence with the Class interface.
+  * Normally new instances will be created by `new _class_`.
   */
 Instance.make = function make () {
-  // Scaffolding until the LFC is rewritten to use NewClass
-  var prototype = this.prototype;
-  do {
-  var constructor = prototype.constructor;
-  if (! prototype.__initialized) {
-    // Debug.debug('Initializing', this.classname);
-    for (var k in prototype) {
-      if (prototype.hasOwnProperty(k) && k != 'constructor') {
-        // Debug.debug(k);
-        var value = prototype[k];
-        // Cf., Instance.addProperty
-        if (value instanceof Function) {
-          if (value.hasOwnProperty('superclasses')) {
-            var os = value.superclasses, found = false;
-            for (var i = os.length - 1; i >= 0; i--) {
-              if (os[i] === constructor) {
-                found = true;
-                break;
+  // Should not be called in the new world...
+  if ($debug) {
+    Debug.warn("`%w.%s` is deprecated.  Use `new %w` instead.", this, arguments.callee, this);
+  }
+  {
+    #pragma "passThrough=true"
+    if (arguments.length > 0) {
+      // We have to work hard to break a conventional constructor into a
+      // constructor and initializer when there are args, because
+      // Javascript does not support apply of new.
+      var constructor = this;
+      function xtor () { this.constructor = constructor; };
+      xtor.prototype = constructor.prototype;
+      var o = new xtor();
+      constructor.apply(o, arguments);
+      return o;
+    }
+    return new this();
+  }
+};
+
+if ($debug) {
+  Instance.make._dbg_typename = 'Instance static function';
+};
+
+if ($debug) {
+  Instance.prototype.addProperty('validateClassStructure', function validateClassStructure () {
+    // Verifies that superclass links for nextMethod are correct
+    var prototype = this.constructor.prototype;
+    do {
+      var constructor = prototype.constructor;
+      if (! prototype.__initialized) {
+        // Debug.debug('Validating', constructor);
+        for (var k in prototype) {
+          if (prototype.hasOwnProperty(k) && k != 'constructor') {
+            // Debug.debug(k);
+            var value = prototype[k];
+            // Cf., Instance.addProperty
+            if (value instanceof Function) {
+              if (value.hasOwnProperty('superclasses')) {
+                var os = value.superclasses, found = false;
+                for (var i = os.length - 1; i >= 0; i--) {
+                  if (os[i] === constructor) {
+                    found = true;
+                    break;
+                  }
+                }
+                if (! found) {
+                  value.superclasses.push(constructor);
+                  Debug.error('Invalid class structure [3+]: Use `addProperty` to create %w.%s', this, k);
+                }
+              } else if (value.hasOwnProperty('superclass')) {
+                var o = value.superclass;
+                if (o !== constructor) {
+                  delete value.superclass;
+                  value.superclasses = [ o, constructor ];
+                  Debug.error('Invalid class structure [2]: Use `addProperty` to create %w.%s', this, k);
+                }
+              } else {
+                value.superclass = constructor;
+                Debug.error('Invalid class structure [1]: Use `addProperty` to create %w.%s', this, k);
               }
             }
-            if (! found) {
-              value.superclasses.push(constructor);
-              if ($debug) {
-                Debug.debug('Shim %s.%s [3+]', this, k)
-              }
-            }
-          } else if (value.hasOwnProperty('superclass')) {
-            var o = value.superclass;
-            if (o !== constructor) {
-              delete value.superclass;
-              value.superclasses = [ o, constructor ];
-              if ($debug) {
-                Debug.debug('Shim %s.%s [2]', this, k);
-              }
-            }
-          } else {
-            value.superclass = constructor;
-            if ($debug) {
-              Debug.debug('Shim %s.%s [1]', this, k);
-            }
           }
         }
+        prototype.__initialized = true;
       }
-    }
-    //    Debug.debug('[2] Initializing', this.classname);
-    prototype.__initialized = true;
-  }
-  prototype = constructor.prototype;
-  } while (constructor !== Instance);
+      prototype = constructor.prototype;
+    } while (constructor !== Instance);
+    });
+};
 
-  #pragma "passThrough=true"
-  var i = new this();
-  i.initialize.apply(i, arguments);
-  return i;
-}
-
-if ($debug) {
-  Instance.make._dbg_typename = 'Instance static function';
-}
-
 /**
   * Bootstrap Class class
   * @todo [2006-05-03 ptw] Rename to Class when LFC has been converted
   */
 var Class = {
-  prototype: Instance.make(),
+  prototype: new Instance(),
   // Add a method to a class by adding it to the class's prototype
   addProperty: function addProperty (name, value) {
     var proto = this.prototype;
@@ -263,7 +298,7 @@
     if ($debug) {
       if (value instanceof Function && (! value._dbg_typename)) {
         value._dbg_owner = this;
-        value._dbg_typename = function () { return this._dbg_owner._dbg_name + ' static function'};
+        value._dbg_typename = function _dbg_typename () { return this._dbg_owner._dbg_name + ' static function'};
       }
     }
   },
@@ -277,7 +312,19 @@
   // staticProperties:Object is a hash of the inital class properties;
   make: function make (classname, traitsAndSuperclass, instanceProperties, staticProperties) {
     // The constructor notes itself in every instance
-    var nc = function () { this.constructor = arguments.callee; };
+    var nc = function constructor () {
+      this.constructor = arguments.callee;
+      if ($debug) {
+        // Must come after the constructor is installed
+//         Debug.debug("Validate", this, this.validateClassStructure);
+        this.validateClassStructure();
+      }
+      // Call the initializer if it is not the default
+      if (this.initialize !== Instance.prototype.initialize) {
+        // Debug.debug('Initializing', this);
+        this.initialize.apply(this, arguments);
+      }
+    };
     nc.constructor = this;
     nc.classname = classname;
     if ($debug) {
@@ -316,8 +363,12 @@
     // The prototype is an instance of our super, which causes us to
     // inherit our super's instanceProperties
     {
+      // This has to be constructed carefully, so as _not_ to run the
+      // class instance initializer
+      var xtor = function prototype () { this.constructor = superclass; };
+      xtor.prototype = superclass.prototype;
       #pragma "passThrough=true"
-      var prototype = new superclass; // --- superclass.make();
+      var prototype = new xtor(); // --- superclass.make();
     }
     // Create any trait interstitials, following the pattern above
     if (traitsAndSuperclass instanceof Array) {
@@ -367,7 +418,7 @@
 
 /** Bootstrap Trait class */
 var Trait = {
-  prototype: Instance.make(),
+  prototype: new Instance(),
   allTraits: {},
   _dbg_typename: Class._dbg_name,
   _dbg_name: 'Trait',
@@ -382,7 +433,7 @@
       t.addProperty.apply(t, arguments);
     }
     if ($debug) {
-      if (value instanceof Function) {
+      if (value instanceof Function && (! value._dbg_typename)) {
         value._dbg_typename = this._dbg_name + ' function';
       }
     }
@@ -390,7 +441,7 @@
   addStaticProperty: function addStaticProperty (name, value) {
     this[name] = value;
     if ($debug) {
-      if (value instanceof Function) {
+      if (value instanceof Function && (! value._dbg_typename)) {
         value._dbg_typename = this._dbg_name + ' static function';
       }
     }
@@ -425,7 +476,7 @@
       superclassInstance.addProperty.call(superclassInstance, name, prototype[name]);
     }
     // Make the interstitial
-    var xtor = function () { this.constructor = arguments.callee; };
+    var xtor = function interstitial () { this.constructor = arguments.callee; };
     xtor.prototype = superclassInstance;
     // The trait's initialize method will run in Class.make (in the
     // proper order).
@@ -437,8 +488,10 @@
     // Unique name must identify superclass chain, punctuation is
     // added for debugging
     xtor.classname = mash;
-    xtor._dbg_typename = 'Interstitial Constructor';
-    xtor._dbg_name = xtor.classname;
+    if ($debug) {
+      xtor._dbg_typename = 'Interstitial Constructor';
+      xtor._dbg_name = xtor.classname;
+    }
     #pragma "passThrough=true"
     var t = new xtor();
     // Remember

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzDefs.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzDefs.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzDefs.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -69,18 +69,21 @@
   * Used to efficiently clone hashtables using Object's
   * N.B. these tables incorrectly will appear to have entries for all
   * the properties of Object.prototype.  To avoid this (but pay the
-  * of a slower implementation, use LzDictionary).
+  * overhead of a slower implementation, use LzDictionary).
   * @access private
   */
-var LzInheritedHash = {
-  make: function make (parent) {
-#pragma "passThrough=true"
-    if (parent) {
-      function xtor() {};
+function LzInheritedHash (parent)  {
+  var constructor = arguments.callee
+  if (! parent) {
+    this.constructor = constructor;
+  } else {
+    if ($as2) {
+      this.__proto__ = parent;
+    } else {
+      function xtor() { this.constructor = constructor; };
       xtor.prototype = parent;
       return new xtor();
     }
-    return new Object;
   }
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzNode.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzNode.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzNode.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -498,6 +498,10 @@
     for ( var k in stylemap ){
         //we are going to bypass the CSS API and call the underlying
         //implementation because we're concerned about speed
+        if (initialArgs[k] != null) {
+            // Don't get CSS value if it would be overridden by a instance/class attribute later
+            continue;
+        }
         var v = LzCSSStyle.getPropertyValueFor( this , stylemap[ k ] );
 
         // This is a hack because people want to give color styles as
@@ -514,6 +518,7 @@
         if (! (k in initialArgs)) {
             // A style that is a function is a constraint
             if (v instanceof Function) {
+                //Only set styleConstraints[k] if this[k] is null.  See LPP-2894 - CSS: subclasses and instances can't override style constraints set on superclass* 
                 if (this[k] == null) {
 //                    Debug.warn("setting %w[%w] to %w, was %w", this, k, v, this[k]);
                     styleConstraints[k] = v;
@@ -537,14 +542,12 @@
   * @keywords private
   */
 function __LZapplyStyleConstraints() {
-    if (this.hasOwnProperty('__LZstyleConstraints')) {
-        var styleConstraints = this.__LZstyleConstraints;
-        for ( var k in styleConstraints ) {
-            var fn = styleConstraints[ k ];
-            var v = fn.call(this);
+    var styleConstraints = this.__LZstyleConstraints;
+    for ( var k in styleConstraints ) {
+        var fn = styleConstraints[ k ];
+        var v = fn.call(this);
 //             Debug.format("%w[%s] (%#w) %#w -> %#w", this, k, stylemap[k], this.k, v);
-            this.setAttribute(k, v);
-        }
+        this.setAttribute(k, v);
     }
 }
 
@@ -707,7 +710,7 @@
     this.isinited = true;
 
     this.__LZresolveReferences();
-    this.__LZapplyStyleConstraints();
+    if (this.__LZstyleConstraints) this.__LZapplyStyleConstraints();
     var sl = this.subnodes;
     if (sl) {
         var i = 0;
@@ -897,9 +900,11 @@
   *
   * @param String prop: A string naming the key of attribute to set
   * @param any val: The value for that attribute
+  * @param Boolean ifchanged: If true, only set the attribute if the value 
+  * changed
   */
-function setAttribute(prop, val) {
-    if (this.__LZdeleted) return;
+function setAttribute(prop, val, ifchanged) {
+    if (this.__LZdeleted || (ifchanged && (this[prop] == val))) return;
 
     var s = this.setters;
     if (s && (prop in s)) {
@@ -1320,7 +1325,8 @@
   * [ this, "x" , myfriend, "width" ]
   */
 function applyConstraint ( prop , cfunc, dep ){
-    if ( dep.length ){
+    var l = dep.length;
+    if (l){
         if ( !this.__LZdelegates ){
             this.__LZdelegates = [];
         }
@@ -1338,7 +1344,6 @@
         // be called more than once in an event chain, because it gets
         // a separate delegate for each dependency, and people have
         // written code that only works because of this loophole...
-        var l = dep.length;
         var dp;
         for ( var i = 0 ; i < l ; i+=2 ){
             var d = new LzDelegate( this , refF );

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataAttrBind.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataAttrBind.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataAttrBind.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -94,7 +94,7 @@
 
 if ($debug) {
     function _dbg_name () {
-        return Debug.formatToString("%w.%s=\"$path{'%w'}\"", this.node, this.setAttr, this.xpath);
+        return Debug.formatToString("%w.%s=\"$path{%w}\"", this.node, this.setAttr, this.xpath);
     }
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataProvider.lzs
===================================================================
(Binary files differ)

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataRequest.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataRequest.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataRequest.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -14,7 +14,7 @@
   * <class>LzDataRequest</class> is an abstract class that can be extended to create new kinds 
   * of data requests, which are passed to a <class>DataProvider</class> when making a request.
   * </p>
-  * <event>onstatus</event>: Sent as data or other conditions occur during the execution of this request.</p>
+  * <event>onstatus</event>: Sent as data or other conditions occur during the execution of this request.
   *
   * @shortdesc An abstract class to represent data requests.
   * @lzxname datarequest

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -13,6 +13,7 @@
 /**
   * <p>
   * <class>LzHTTPDataProvider</class> implements the DataProvider interface, to support HTTP data requests.
+  * </p>  
   * @shortdesc DataProvider which implements HTTP request transport
   * @lzxname httpdataprovider
   */
@@ -269,6 +270,7 @@
 /**
   * <p>
   * <class>LzHTTPDataRequest</class> implements the DataProvider interface, to support HTTP data requests.
+  * </p>
   * @shortdesc A class to represent HTTP data requests.
   * @lzxname httpdatarequest
   */

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -274,9 +274,12 @@
   // Have to handle '\\' first.
   s = s.split('\\').join('\\\\');
   var np = this.singleEscapeCharacters;
-  var skip = "";
+  // quotes are skipped and ignored unless quoted
+  var skip = '"';
   var quote = "";
+  var ignore = "'";
   if (quoted) {
+    ignore = "";
     var singles = s.split("'").length;
     var doubles = s.split('"').length;
     if (singles > doubles) {
@@ -289,7 +292,7 @@
   }
   for (var rep in np) {
     var ch = np[rep];
-    if ((ch != '\\') && (ch != skip)) {
+    if ((ch != '\\') && (ch != skip)  && (ch != ignore)) {
       s = s.split(ch).join(rep);
     }
   }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js	2007-09-13 23:38:53 UTC (rev 6473)
@@ -1496,11 +1496,17 @@
     return this.__z;
 }
 
+LzSprite.prototype.updateResourceSize = function () {
+    this.owner.resourceload({width: this.resourceWidth, height: this.resourceHeight, resource: this.resource, skiponload: true});
+}
+
 LzSprite.prototype.unload = function () {
     if (this.__ImgPool) {
         this.__ImgPool.destroy();
         this.__ImgPool = null;
     }
+    if (this.__LZimg) this.__discardElement(this.__LZimg);
+    this.__LZimg = null;
 }
 
 /**

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as	2007-09-13 23:38:53 UTC (rev 6473)
@@ -256,8 +256,8 @@
   * @access private
   */
 TextField.prototype.__handlelostFocus = function ( ){
-    //Debug.write('lostfocus', this.__lzview.hasFocus, dunno, LzFocus.lastfocus, this, LzFocus.getFocus(), this.__lzview);
-    if (this.__lzview.hasFocus) {
+    //Debug.write('lostfocus', this.__lzview.hasFocus, LzFocus.lastfocus, this, LzFocus.getFocus(), this.__lzview, this.__lzview.inputtextevent);
+    if (this.__lzview == LzFocus.getFocus()) {
         LzFocus.clearFocus();
         if (this.__lzview) this.__lzview.inputtextevent('onblur');
     }    

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzMakeLoadSprite.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzMakeLoadSprite.as	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzMakeLoadSprite.as	2007-09-13 23:38:53 UTC (rev 6473)
@@ -174,6 +174,7 @@
     if ( this.totalframes > 1 ){
         this.checkPlayStatus();
     }
+    this.updateResourceSize(); 
     if ( this._setrescheight ){
         var yscale = this.height/this.resourceheight;
         this.__LZmovieClipRef._yscale = yscale * 100;
@@ -182,6 +183,10 @@
         var xscale =this.width/this.resourcewidth;
         this.__LZmovieClipRef._xscale = xscale * 100;
     }
+    if (this.setButtonSize)
+        this.setButtonSize( "height" , this.height );
+    if (this.setButtonSize)
+        this.setButtonSize( "width" , this.width );
 
     //Debug.write(xscale, yscale, this);
 
@@ -251,9 +256,15 @@
   * @access private
   */
 LzMakeLoadSprite.destroy = function (recur) {
-    
+    if ('updateDel' in this)
+         this.updateDel.unregisterAll();
+    if ('errorDel' in this)
+         this.errorDel.unregisterAll();
+    if ('timeoutDel' in this)
+         this.timeoutDel.unregisterAll();
+ 
     this.loader.unload( );
 
     // call shadowed destroy()
-    this.___destroy( recur );
+    this.___destroy( recur ); 
 }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzSprite.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzSprite.as	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzSprite.as	2007-09-13 23:38:53 UTC (rev 6473)
@@ -932,7 +932,7 @@
   */
 LzSprite.prototype.getMouse = function() {
     if ( ! this.__LZmovieClipRef ) { this.makeContainerResource() };
-    return {x: this.__LZmovieClipRef._xmouse, y: this.__LZmovieClipRef._ymouse}
+    return {x: Math.round(this.__LZmovieClipRef._xmouse), y: Math.round(this.__LZmovieClipRef._ymouse)}
 }
 
 /**

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as	2007-09-13 23:38:53 UTC (rev 6473)
@@ -626,12 +626,8 @@
   */
 LzTextSprite.prototype.__setFormat = function (){
     this.setFontInfo();
-    var mapped = LzFontManager.__fontnameCacheMap[this.fontname];
-    var cfontname;
-    if (mapped != null) {
-        //Debug.write("found cached font", this.fontname, mapped);
-        cfontname = mapped;
-    } else {
+    var cfontname = LzFontManager.__fontnameCacheMap[this.fontname];
+    if (cfontname == null) {
         cfontname = LzFontManager.__findMatchingFont(this.fontname);
         LzFontManager.__fontnameCacheMap[this.fontname] = cfontname;
         //Debug.write("caching fontname", this.fontname, cfontname);

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/services/LzCSSStyle.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/services/LzCSSStyle.js	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/services/LzCSSStyle.js	2007-09-13 23:38:53 UTC (rev 6473)
@@ -21,6 +21,8 @@
 LzCSSStyleRule.prototype.selector = null;
 //No rule has a specificity of zero
 LzCSSStyleRule.prototype.specificity = 0;
+
+// this is inlined in __compareSpecificity() - keep in sync
 LzCSSStyleRule.prototype.getSpecificity = function () {
     
     // Only calculate this once. Store it after we've calculated it once.     
@@ -103,12 +105,45 @@
             for ( var i = this._rules.length -1; i >=0; i-- ){
                 r = this._rules[ i ];
                 var rp = r.parsed;
-                if ( rp.type == this._sel_star ||
+                //inlined: if (rp.type == this._sel_compound && this._compoundSelectorApplies( rp, node )) {
+                if (rp.type == this._sel_compound) {
+                    var curnode = node; 
+                    var sindex = rp.length - 1;
+                    var firstone = true;
+                    var result = false;
+
+                    while (curnode != canvas){
+                        //recursively loop through selectors, ensuring each applies to the current node or a parent 
+                        var nrp = rp[sindex]
+                        t = nrp.type;
+
+                        if ( t == this._sel_star ||
+                            (t == this._sel_id && nrp.id == curnode.id) ||
+                            (t == this._sel_tag && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
+                            (t == this._sel_attribute && curnode[ nrp.attrname ] == nrp.attrvalue) ||
+                            (t == this._sel_tagAndAttr && curnode[ nrp.attrname ] == nrp.attrvalue && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
+                            (t == this._sel_compound && this._compoundSelectorApplies( nrp, curnode, true ))){
+                            if ( sindex-- == 0 ){
+                                result = true;
+                                break;
+                            }
+                        } else if ( firstone ){
+                            //if the last selector doesn't apply, then bail -- we'll
+                            //come back for this when we recurse over the parents in
+                            //getPropertyValueFor
+                            result = false;
+                            break;
+                        }
+
+                        curnode = curnode.parent;
+                        firstone = false;
+                    }
+                    if (result) rules.push(r); 
+                } else if ( rp.type == this._sel_star ||
                     (rp.type == this._sel_id && rp.id == node.id) ||
                     (rp.type == this._sel_tag && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ])))) ||
                     (rp.type == this._sel_attribute && node[ rp.attrname ] == rp.attrvalue) ||
-                    (rp.type == this._sel_tagAndAttr && node[ rp.attrname ] == rp.attrvalue && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ])))) ||
-                    (rp.type == this._sel_compound && this._selectorApplies( rp, node ))){
+                    (rp.type == this._sel_tagAndAttr && node[ rp.attrname ] == rp.attrvalue && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ]))))) {
                     rules.push(r); 
                 }
             }
@@ -125,12 +160,45 @@
                 for ( var i = pprules.length -1; i >=0; i-- ){
                     r = pprules[ i ];
                     var rp = r.parsed;
-                    if ( rp.type == this._sel_star ||
-                    (rp.type == this._sel_id && rp.id == node.id) ||
-                    (rp.type == this._sel_tag && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ])))) ||
-                    (rp.type == this._sel_attribute && node[ rp.attrname ] == rp.attrvalue) ||
-                    (rp.type == this._sel_tagAndAttr && node[ rp.attrname ] == rp.attrvalue && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ])))) ||
-                    (rp.type == this._sel_compound && this._selectorApplies( rp, node ))){
+                    //inlined: if (rp.type == this._sel_compound && this._compoundSelectorApplies( rp, node )) {
+                    if (rp.type == this._sel_compound) {
+                        var curnode = node; 
+                        var sindex = rp.length - 1;
+                        var firstone = true;
+                        var result = false;
+
+                        while (curnode != canvas){
+                            //recursively loop through selectors, ensuring each applies to the current node or a parent 
+                            var nrp = rp[sindex]
+                            t = nrp.type;
+
+                            if ( t == this._sel_star ||
+                                (t == this._sel_id && nrp.id == curnode.id) ||
+                                (t == this._sel_tag && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
+                                (t == this._sel_attribute && curnode[ nrp.attrname ] == nrp.attrvalue) ||
+                                (t == this._sel_tagAndAttr && curnode[ nrp.attrname ] == nrp.attrvalue && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
+                                (t == this._sel_compound && this._compoundSelectorApplies( nrp, curnode, true ))){
+                                if ( sindex-- == 0 ){
+                                    result = true;
+                                    break;
+                                }
+                            } else if ( firstone ){
+                                //if the last selector doesn't apply, then bail -- we'll
+                                //come back for this when we recurse over the parents in
+                                //getPropertyValueFor
+                                result = false;
+                                break;
+                            }
+
+                            curnode = curnode.parent;
+                            firstone = false;
+                        }
+                        if (result) rules.push(r); 
+                    } else if ( rp.type == this._sel_star ||
+                        (rp.type == this._sel_id && rp.id == node.id) ||
+                        (rp.type == this._sel_tag && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ])))) ||
+                        (rp.type == this._sel_attribute && node[ rp.attrname ] == rp.attrvalue) ||
+                        (rp.type == this._sel_tagAndAttr && node[ rp.attrname ] == rp.attrvalue && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ]))))) {
                         rules.push(r); 
                     }
                 }
@@ -175,6 +243,7 @@
     }
 }
 
+// this is inlined in __compareSpecificity() - keep in sync
 LzCSSStyle.getSelectorSpecificity = function ( parsedsel ){
     // Go through all the selectors in the selector, keeping a running
     // count of various kinds of selectors:
@@ -206,8 +275,117 @@
     // if rA specificity  is less than rB specifity, return -1
     // if they're equal specificity, return 0
     // if rB specifitity is less than rA specificity, return 1
-    var specificityA = rA.getSpecificity();
-    var specificityB = rB.getSpecificity();
+    if (! rA.specificity) {
+        //inline: rA.getSpecificity();
+        // Only calculate this once. Store it after we've calculated it once.     
+        // No rule has a specificity of 0
+        if ( !rA.specificity ) {
+            //need to treat compound selectors differently
+
+            if ( rA.parsed.type == LzCSSStyle._sel_compound ){
+                for ( var i = 0; i < rA.parsed.length; i++ ){
+                    //inline: rA.specificity += LzCSSStyle.getSelectorSpecificity( rA.parsed[ i ] );
+                    switch ( rA.parsed[i].type ){
+                        case (LzCSSStyle._sel_tag ):
+                        case (LzCSSStyle._sel_star ):
+                            rA.specificity += 1;
+                            break;
+
+                        case (LzCSSStyle._sel_id ):
+                            rA.specificity += 100;
+                            break;
+
+                        case (LzCSSStyle._sel_attribute ):
+                            rA.specificity += 10;
+                            break;
+
+                        case (LzCSSStyle._sel_tagAndAttr ):
+                            rA.specificity += 11; 
+                            break;
+                    }
+                }
+                } else {
+                    //inline: rA.specificity = LzCSSStyle.getSelectorSpecificity( rA.parsed );
+                    switch ( rA.parsed.type ){
+                        case (LzCSSStyle._sel_tag ):
+                        case (LzCSSStyle._sel_star ):
+                            rA.specificity = 1;
+                            break;
+
+                        case (LzCSSStyle._sel_id ):
+                            rA.specificity = 100;
+                            break;
+
+                        case (LzCSSStyle._sel_attribute ):
+                            rA.specificity = 10;
+                            break;
+
+                        case (LzCSSStyle._sel_tagAndAttr ):
+                            rA.specificity = 11; 
+                            break;
+                    }
+                }
+
+                //Debug.write( 'specificity for' , this , this.specificity );
+        }
+    }
+    if (! rB.specificity) {
+        //inline: rB.getSpecificity();
+        // Only calculate this once. Store it after we've calculated it once.     
+        // No rule has a specificity of 0
+        if ( !rB.specificity ) {
+            //need to treat compound selectors differently
+
+            if ( rB.parsed.type == LzCSSStyle._sel_compound ){
+                for ( var i = 0; i < rB.parsed.length; i++ ){
+                    //inline: rB.specificity += LzCSSStyle.getSelectorSpecificity( rB.parsed[ i ] );
+                    switch ( rB.parsed[i].type ){
+                        case (LzCSSStyle._sel_tag ):
+                        case (LzCSSStyle._sel_star ):
+                            rB.specificity += 1;
+                            break;
+
+                        case (LzCSSStyle._sel_id ):
+                            rB.specificity += 100;
+                            break;
+
+                        case (LzCSSStyle._sel_attribute ):
+                            rB.specificity += 10;
+                            break;
+
+                        case (LzCSSStyle._sel_tagAndAttr ):
+                            rB.specificity += 11; 
+                            break;
+                    }
+                }
+            } else {
+                //inline: rB.specificity = LzCSSStyle.getSelectorSpecificity( rB.parsed );
+                switch ( rB.parsed.type ){
+                    case (LzCSSStyle._sel_tag ):
+                    case (LzCSSStyle._sel_star ):
+                        rB.specificity = 1;
+                        break;
+
+                    case (LzCSSStyle._sel_id ):
+                        rB.specificity = 100;
+                        break;
+
+                    case (LzCSSStyle._sel_attribute ):
+                        rB.specificity = 10;
+                        break;
+
+                    case (LzCSSStyle._sel_tagAndAttr ):
+                        rB.specificity = 11; 
+                        break;
+                }
+            }
+
+            //Debug.write( 'specificity for' , this , this.specificity );
+        }
+    }
+
+    var specificityA = rA.specificity;
+    var specificityB = rB.specificity;
     //Debug.write( rA, specificityA );
     //Debug.write( rB, specificityB );
 
@@ -272,47 +450,42 @@
     
 }
 
-/** @devnote this ideally would be two separate functions, but merging them
-  * and inlining the cases of the switch statement is a 2x speedup [awolff]
-  * @access private */
-LzCSSStyle._selectorApplies = function ( rp , node ){
-    //rp is the parsed selector
-    var t = rp.type;
-    if ( t == this._sel_star ||
-        (t == this._sel_id && rp.id == node.id) ||
-        (t == this._sel_tag && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ])))) ||
-        (t == this._sel_attribute && node[ rp.attrname ] == rp.attrvalue) ||
-        (t == this._sel_tagAndAttr && node[ rp.attrname ] == rp.attrvalue && (((rp.classname in lz) && (node instanceof lz[ rp.classname ])) || ( (rp.classname in global) && (node instanceof global[ rp.classname ]))))) {
-        return true;
-    } else if (t == this._sel_compound) {
-        var curnode = node; 
-        var sindex = rp.length -1;
-        var firstone = true;
+/** @access private 
+ *  This is inlined above in getPropertyValueFor() - make sure they stan in sync
+ */
+LzCSSStyle._compoundSelectorApplies = function (rp , node){
+    var curnode = node; 
+    var sindex = rp.length - 1;
+    var firstone = true;
+    var result = false;
 
-        while (curnode != canvas){
-            var nrp = rp[sindex]
-            t = nrp.type;
+    while (curnode != canvas){
+        //recursively loop through selectors, ensuring each applies to the current node or a parent 
+        var nrp = rp[sindex]
+        var t = nrp.type;
 
-            if ( t == this._sel_star ||
-                (t == this._sel_id && nrp.id == curnode.id) ||
-                (t == this._sel_tag && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
-                (t == this._sel_attribute && curnode[ nrp.attrname ] == nrp.attrvalue) ||
-                (t == this._sel_tagAndAttr && curnode[ nrp.attrname ] == nrp.attrvalue && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
-                (t == this._sel_compound && this._selectorApplies( nrp, curnode ))){
-                if ( sindex-- == 0 ){
-                    return true;
-                }
-            } else if ( firstone ){
-                //if the last selector doesn't apply, then bail -- we'll
-                //come back for this when we recurse over the parents in
-                //getPropertyValueFor
-                return false;
+        if ( t == this._sel_star ||
+            (t == this._sel_id && nrp.id == curnode.id) ||
+            (t == this._sel_tag && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
+            (t == this._sel_attribute && curnode[ nrp.attrname ] == nrp.attrvalue) ||
+            (t == this._sel_tagAndAttr && curnode[ nrp.attrname ] == nrp.attrvalue && (((nrp.classname in lz) && (curnode instanceof lz[ nrp.classname ])) || ( (nrp.classname in global) && (curnode instanceof global[ nrp.classname ])))) ||
+            (t == this._sel_compound && this._compoundSelectorApplies( nrp, curnode, true ))){
+            if ( sindex-- == 0 ){
+                result = true;
+                break;
             }
+        } else if ( firstone ){
+            //if the last selector doesn't apply, then bail -- we'll
+            //come back for this when we recurse over the parents in
+            //getPropertyValueFor
+            result = false;
+            break;
+        }
 
-            curnode = curnode.parent;
-            firstone = false;
-        }
+        curnode = curnode.parent;
+        firstone = false;
     }
+    return result;
 }
 
 /** @access private */

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloCanvas.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloCanvas.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloCanvas.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -128,7 +128,7 @@
         if (args.width.charAt(args.width.length-1) == '%') {
             var percent = Number(args.width.substr(0, args.width.length-1));
             this.__canvaswidthratio = percent/100;
-            if (this.sprite.capabilities.scalecanvastopercentage != true) {
+            if (this.capabilities.scalecanvastopercentage != true) {
                 // some runtimes already scale the viewport size, so take the reported size literally to avoid scaling twice
                 this.__canvaswidthratio = 1;
             }
@@ -147,7 +147,7 @@
         if (args.height.charAt(args.height.length-1) == '%') {
             var percent = Number(args.height.substr(0, args.height.length-1));
             this.__canvasheightratio = percent/100;
-            if (this.sprite.capabilities.scalecanvastopercentage != true) {
+            if (this.capabilities.scalecanvastopercentage != true) {
                 // some runtimes already scale the viewport size, so take the reported size literally to avoid scaling twice
                 this.__canvasheightratio = 1;
             }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -190,6 +190,8 @@
 DeclareEvent(prototype, 'ondblclick' );
 var DOUBLE_CLICK_TIME = 500;
 
+var capabilities = LzSprite.prototype.capabilities;
+
 /**
   * Base level constructor for views. See <method
   * classname="LzNode">construct</method> for more on this.
@@ -1082,17 +1084,21 @@
   * @param Boolean amVisible: boolean for visibility of view
   */
 function setVisible( amVisible ) {
+    if (this._visible == amVisible) return;
+    this._visible = amVisible;
+
     // make us compatible with the new 'visibility' attribute
     if (amVisible) {
-        this.visibility = "visible";
+        var v = "visible";
     } else if (amVisible == null) {
-        this.visibility = "collapse";
+        var v = "collapse";
         if ($debug) {
             Debug.warn("setVisible(null) is deprecated, use setVisibility('collapse') instead");
         }
     } else {
-        this.visibility = "hidden";
+        var v = "hidden";
     }
+    this.visibility = v;
     // 
     if (this.onvisibility.ready) this.onvisibility.sendEvent( this.visibility );
 
@@ -1112,6 +1118,7 @@
   * @param String amVisible: visibility of view
   */
 function setVisibility( amVisible ) {
+    if (this.visibility == amVisible) return;
     this.visibility = amVisible;
     if ($debug) {
         if (! (amVisible == "visible" || amVisible == "hidden" || amVisible == "collapse")) {
@@ -1253,8 +1260,10 @@
   * @param Number v: The new value for the opacity
   */
 function setOpacity ( v ){
-    if (this.sprite.capabilities.opacity) {
+    if (this.capabilities.opacity) {
         this.sprite.setOpacity(v);
+    } else if ($debug) {
+        this.__warnCapability('view.setOpacity()'); 
     }
     this.opacity = v;
     if (this.onopacity.ready) this.onopacity.sendEvent( v );
@@ -1277,7 +1286,7 @@
         this._x = v;
         this.x = v;
         if ( this.__LZhasoffset ){
-            if (this.sprite.capabilities.rotation) {
+            if (this.capabilities.rotation) {
                 v -= ( this.xoffset * this.__LZrcos  -
                     this.yoffset * this.__LZrsin );
             } else {
@@ -1304,7 +1313,7 @@
         this._y = v;
         this.y = v;
         if ( this.__LZhasoffset ){
-            if (this.sprite.capabilities.rotation) {
+            if (this.capabilities.rotation) {
                 v -= ( this.xoffset * this.__LZrsin  +
                     this.yoffset * this.__LZrcos );
             } else {
@@ -1326,8 +1335,10 @@
   * @param Number v: The new value for <attribute>rotation</attribute>.
   */
 function setRotation ( v ){
-    if (this.sprite.capabilities.rotation) {
+    if (this.capabilities.rotation) {
         this.sprite.setRotation(v)
+    } else if ($debug) {
+        this.__warnCapability('view.setRotation()'); 
     }
     this.rotation = v;
     var rrad = Math.PI /180 * this.rotation;
@@ -1545,8 +1556,10 @@
   * @runtimes as2
   */
 function setColorTransform ( o ){
-    if (this.sprite.capabilities.colortransform) {
+    if (this.capabilities.colortransform) {
         this.sprite.setColorTransform(o);
+    } else if ($debug) {
+        this.__warnCapability('view.setColorTransform()'); 
     }
 }
 
@@ -1567,8 +1580,10 @@
   * @runtimes as2
   */
 function getColorTransform (){
-    if (this.sprite.capabilities.colortransform) {
+    if (this.capabilities.colortransform) {
         return this.sprite.getColorTransform();
+    } else if ($debug) {
+        this.__warnCapability('view.getColorTransform()'); 
     }
 }
 
@@ -1984,7 +1999,7 @@
 }
 
 prototype.getMouse.dependencies = function( ) {
-    return [ LzGlobalMouse, "mousemove" ];
+    return [ LzIdle, "idle" ];
 }
 
 /**
@@ -2254,8 +2269,10 @@
   * @param Integer v: A number from 0 to 100 representing a volume level
   */
 function setVolume (v) {
-    if (this.sprite.capabilities.audio) {
+    if (this.capabilities.audio) {
         this.sprite.setVolume(v);
+    } else if ($debug) {
+        this.__warnCapability('view.setVolume()'); 
     }
 }
 
@@ -2264,8 +2281,10 @@
   * @return Integer: A number from 0 to 100 representing a volume level
   */
 function getVolume () {
-    if (this.sprite.capabilities.audio) {
+    if (this.capabilities.audio) {
         return this.sprite.getVolume();
+    } else if ($debug) {
+        this.__warnCapability('view.getVolume()'); 
     }
 }
 
@@ -2274,8 +2293,10 @@
   * @param Integer p: A number from -100 to 100 representing a pan level
   */
 function setPan (p) {
-    if (this.sprite.capabilities.audio) {
+    if (this.capabilities.audio) {
         this.sprite.setPan(p);
+    } else if ($debug) {
+        this.__warnCapability('view.setPan()'); 
     }
 }
 
@@ -2284,8 +2305,10 @@
   * @return Integer: A number from -100 to 100 representing a pan level
   */
 function getPan () {
-    if (this.sprite.capabilities.audio) {
+    if (this.capabilities.audio) {
         return this.sprite.getPan();
+    } else if ($debug) {
+        this.__warnCapability('view.getPan()'); 
     }
 }
 
@@ -2395,8 +2418,10 @@
   * @param Boolean accessible
   */
 function setAccessible (accessible) {
-    if (this.sprite.capabilities.accessibility) {
+    if (this.capabilities.accessibility) {
         this.sprite.setAccessible(accessible);
+    } else if ($debug) {
+        this.__warnCapability('view.setAccessible()'); 
     }
 }
 
@@ -2405,8 +2430,10 @@
   * @param Boolean s: If true, activate the current view and all of its children
   */
 function setAAActive ( s, mc ){
-    if (this.sprite.capabilities.accessibility) {
+    if (this.capabilities.accessibility) {
         this.sprite.setAAActive(s, mc);
+    } else if ($debug) {
+        this.__warnCapability('view.setAAActive()'); 
     }
 }
 
@@ -2416,8 +2443,10 @@
   * @param string s: Sets the accessibility name for this view
   */
 function setAAName ( s, mc ){
-    if (this.sprite.capabilities.accessibility) {
+    if (this.capabilities.accessibility) {
         this.sprite.setAAName(s, mc);
+    } else if ($debug) {
+        this.__warnCapability('view.setAAName()'); 
     }
 }
 
@@ -2426,8 +2455,10 @@
   * @param string s: Sets the accessibility name for this view
   */
 function setAADescription ( s, mc ){
-    if (this.sprite.capabilities.accessibility) {
+    if (this.capabilities.accessibility) {
         this.sprite.setAADescription(s, mc);
+    } else if ($debug) {
+        this.__warnCapability('view.setAADescription()'); 
     }
 }
 
@@ -2436,8 +2467,10 @@
   * @param number s: The tab order index for this view.  Must be a unique number.
   */
 function setAATabIndex ( s, mc ){
-    if (this.sprite.capabilities.accessibility) {
+    if (this.capabilities.accessibility) {
         this.sprite.setAATabIndex(s, mc);
+    } else if ($debug) {
+        this.__warnCapability('view.setAATabIndex()'); 
     }
 }
 
@@ -2447,8 +2480,10 @@
   * If false, it is active to the screen reader.
   */
 function setAASilent ( s, mc ){
-    if (this.sprite.capabilities.accessibility) {
+    if (this.capabilities.accessibility) {
         this.sprite.setAASilent(s, mc);
+    } else if ($debug) {
+        this.__warnCapability('view.setAASilent()'); 
     }
 }
 
@@ -2537,5 +2572,9 @@
     return this.sprite.getContextMenu();
 }
 
+function __warnCapability(msg) {
+    Debug.warn('The %s runtime does not support %s', lzr, msg); 
+}
+
 } // End of LzView
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzInputText.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzInputText.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzInputText.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -162,20 +162,27 @@
 
 /** @access private */
 function _gotFocusEvent(){
+    this._focused = true;
     this.sprite.gotFocus();
 }
 
 /** @access private */
 function _gotBlurEvent(){
+    this._focused = false;
     this.sprite.gotBlur();
 }
 
 // Receive input text events from sprite
 function inputtextevent (eventname, value){
+    //Debug.warn('inputtextevent', eventname, value);
+    if (eventname == 'onfocus' && this._focused) return;
+    if (eventname == 'onblur' && ! this._focused) return;
     if (eventname == 'onfocus' || eventname == 'onmousedown') {
+        this._focused = true;
         if (LzFocus.getFocus() != this) {
             var tabdown = LzKeys.isKeyDown('tab');
             LzFocus.setFocus(this, tabdown);
+            return;
         }
     } else if (eventname == 'onchange') {
         //multiline resizable fields adjust their height
@@ -186,7 +193,9 @@
         }
         if (this.ontext.ready) this.ontext.sendEvent(value);
         return;
-    }    
+    } else if (eventname == 'onblur') {
+        this._focused = false;
+    }
     if (this[eventname].ready) this[eventname].sendEvent(value);
 }
 
@@ -224,10 +233,10 @@
   * Set the html flag on this text view
   */
 function setHTML (htmlp) {
-    if (this.sprite.capabilities['htmlinputtext']) {
+    if (this.capabilities['htmlinputtext']) {
         this.sprite.setHTML(htmlp);
     } else if ($debug) {
-        Debug.warn('This runtime does not support inputtext.setHTML()');
+        this.__warnCapability('inputtext.setHTML()'); 
     }
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs	2007-09-13 23:38:53 UTC (rev 6473)
@@ -250,30 +250,49 @@
     }
 
 
-    if ('antiAliasType' in args && args.antiAliasType != null) {
-        this.setAntiAliasType(args.antiAliasType);
-    } else {
-        this.setAntiAliasType("normal"); 
-    }
+    if (this.capabilities.advancedfonts) {
+        if ('antiAliasType' in args && args.antiAliasType != null) {
+            this.setAntiAliasType(args.antiAliasType);
+        } else {
+            this.setAntiAliasType("normal"); 
+        }
 
-    if ('gridFit' in args && args.gridFit != null) {
-        this.setGridFit(args.gridFit);
-    } else {
-        this.setGridFit("subpixel");
-    }
+        if ('gridFit' in args && args.gridFit != null) {
+            this.setGridFit(args.gridFit);
+        } else {
+            this.setGridFit("subpixel");
+        }
 
-    if ('sharpness' in args && args.sharpness != null) {
-        this.setSharpness(args.sharpness);
-    } else {
-        this.setSharpness(0);
-    }
+        if ('sharpness' in args && args.sharpness != null) {
+            this.setSharpness(args.sharpness);
+        } else {
+            this.setSharpness(0);
+        }
 
-    if ('thickness' in args && args.thickness != null) {
-        this.setThickness(args.thickness);
-    } else {
-        this.setThickness(0);
+        if ('thickness' in args && args.thickness != null) {
+            this.setThickness(args.thickness);
+        } else {
+            this.setThickness(0);
+        }
+        if (! LzText.prototype.setters.antiAliasType) {
+            /**
+            * @lzxtype string
+            * @modifiers virtual
+            */
+            // no var decl since this is a virtual field
+            LzText.prototype.setters.antiAliasType = "setAntiAliasType";
+            LzText.prototype.defaultattrs.antiAliasType = "normal";
+
+            LzText.prototype.setters.gridFit = "setGridFit";
+            LzText.prototype.defaultattrs.gridfit = "subpixel";
+
+            LzText.prototype.setters.sharpness = "setSharpness";
+            LzText.prototype.defaultattrs.sharpness = 0;
+
+            LzText.prototype.setters.thickness = "setThickness";
+            LzText.prototype.defaultattrs.thickness = 0;
+        }
     }
-
 }
 
 /**
@@ -343,24 +362,9 @@
 defaultattrs.clip = true;
 
 
-/**
-  * @lzxtype string
-  * @modifiers virtual
-  */
-// no var decl since this is a virtual field
-setters.antiAliasType = "setAntiAliasType";
-defaultattrs.antiAliasType = "normal";
 
-setters.gridFit = "setGridFit";
-defaultattrs.gridfit = "subpixel";
 
-setters.sharpness = "setSharpness";
-defaultattrs.sharpness = 0;
 
-setters.thickness = "setThickness";
-defaultattrs.thickness = 0;
-
-
 /**
   * setResize set behavior of text field width when new text is added.
   * LzText only (cannot be used with LzInputText).
@@ -478,6 +482,19 @@
 }
 
 
+if ($debug) {
+/**
+  * @access private
+  */
+function _dbg_name ( ){
+  var id = super._dbg_name();
+  if (id != this.toString()) {
+    return id;
+  } else {
+    return Debug.stringEscape(this.getText(), true);
+  }
+}
+}
 
 /**
   * @access private
@@ -841,13 +858,15 @@
  * @param aliasType "normal" or "advanced"
  */
 function setAntiAliasType( aliasType ){
-    if (this.sprite.capabilities.advancedfonts) {    
+    if (this.capabilities.advancedfonts) {    
         if ((aliasType == "normal") || (aliasType == "advanced")) {
             this.antiAliasType = aliasType; 
             this.sprite.setAntiAliasType(aliasType);
         } else if ($debug) {
             Debug.warn("antiAliasType invalid, must be 'normal' or 'advanced', but you said '" + aliasType + "'");
         }        
+    } else if ($debug) {
+        this.__warnCapability('text.setAntiAliasType()'); 
     }
 }
 
@@ -855,8 +874,10 @@
  * Gets the kind of antialiasing set on this text object
  */ 
 function getAntiAliasType() {
-    if (this.sprite.capabilities.advancedfonts) {    
+    if (this.capabilities.advancedfonts) {    
         return this.antiAliasType;
+    } else if ($debug) {
+        this.__warnCapability('text.getAntiAliasType()'); 
     }
 }
 
@@ -866,13 +887,15 @@
  * @param gridFit "none", "pixel", or "subpixel"
  */
 function setGridFit( gridFit ){
-    if (this.sprite.capabilities.advancedfonts) {    
+    if (this.capabilities.advancedfonts) {    
         if ((gridFit == "none") || (gridFit == "pixel") || (gridFit == "subpixel")) {
             this.gridFit = gridFit; 
             this.sprite.setGridFit(gridFit);
         } else if ($debug) {
             Debug.warn("gridFit invalid, must be 'none', 'pixel', or 'subpixel' but you said '" + gridFit + "'");
         }
+    } else if ($debug) {
+        this.__warnCapability('text.setGridFit()'); 
     }
 }
 
@@ -880,8 +903,10 @@
  * Gets the kind of grid fitting set on this text object
  */ 
 function getGridFit() {
-    if (this.sprite.capabilities.advancedfonts) {
+    if (this.capabilities.advancedfonts) {
         return this.gridFit; 
+    } else if ($debug) {
+        this.__warnCapability('text.getGridFit()'); 
     }
 }
 
@@ -892,13 +917,15 @@
  * @param sharpness -400 to 400
  */
 function setSharpness( sharpness ){
-    if (this.sprite.capabilities.advancedfonts) {
+    if (this.capabilities.advancedfonts) {
         if  ((sharpness >= -400) && (sharpness <= 400)) {
             this.sharpness = sharpness; 
             this.sprite.setSharpness(sharpness);
         } else if ($debug) {
             Debug.warn("sharpness out of range, must be -400 to 400");
         }        
+    } else if ($debug) {
+        this.__warnCapability('text.setSharpness()'); 
     }
 }
 
@@ -906,8 +933,10 @@
  * Gets the sharpness rendering property of this text object
  */ 
 function getSharpness() {
-    if (this.sprite.capabilities.advancedfonts) {    
+    if (this.capabilities.advancedfonts) {    
         return this.sharpness; 
+    } else if ($debug) {
+        this.__warnCapability('text.getSharpness()'); 
     }
 }
 
@@ -918,13 +947,15 @@
  * @param thickness -200 to 200
  */
 function setThickness( thickness ){
-    if (this.sprite.capabilities.advancedfonts) {
+    if (this.capabilities.advancedfonts) {
         if  ((thickness >= -200) && (thickness <= 200)) {
             this.thickness = thickness;
             this.sprite.setThickness(thickness); 
         } else if ($debug) {
             Debug.warn("thickness out of range, must be -200 to 200");
         }
+    } else if ($debug) {
+        this.__warnCapability('text.setThickness()'); 
     }
 }
 
@@ -932,8 +963,10 @@
  * Gets the thickness rendering property of this text object
  */ 
 function getThickness() {
-    if (this.sprite.capabilities.advancedfonts) {    
+    if (this.capabilities.advancedfonts) {    
         return this.thickness;
+    } else if ($debug) {
+        this.__warnCapability('text.getThickness()'); 
     }
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc	2007-09-13 23:38:53 UTC (rev 6473)
@@ -73,6 +73,7 @@
     [a:defaultValue="true"] attribute validate {booleanLiteral}?
   & [a:defaultValue="inherit"] attribute proxied {inheritableBooleanLiteral}? 
   & [a:defaultValue="false"] attribute debug {booleanLiteral}?
+  & [a:defaultValue="false"] attribute backtrace {booleanLiteral}?
   & ## If present, specifies the maximum width in pixels of any output text field.
     ## Text which extends beyond this width will be clipped.
     ## If this attribute is omitted, it defaults to the canvas width.

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/bin/lzc
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/bin/lzc	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/bin/lzc	2007-09-13 23:38:53 UTC (rev 6473)
@@ -22,7 +22,6 @@
 else
   export LPS_HOME
   . "${LPS_HOME}/WEB-INF/lps/server/bin/lzenv"
-  JAVA_OPTS="-Xbatch -Xmx512m"
 fi
 
 "${JAVA_HOME}/bin/java" ${JAVA_OPTS} -DLPS_HOME="${LPS_HOME}" -cp "$LZCP" org.openlaszlo.compiler.Main "$@"

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/sc/src/org/openlaszlo/sc/Parser.jjt
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/sc/src/org/openlaszlo/sc/Parser.jjt	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/sc/src/org/openlaszlo/sc/Parser.jjt	2007-09-13 23:38:53 UTC (rev 6473)
@@ -384,12 +384,11 @@
 
 void PrimarySuffix() #void : {}
 {
-    ((Arguments()) #FunctionCallParameters)
-|   (("[" Expression() "]") #PropertyValueReference)
+    (("[" Expression() "]") #PropertyValueReference)
 |   (("." IdentifierOrKeyword()) #PropertyIdentifierReference)
 }
 
-void Arguments() # void: {}
+void Arguments() #FunctionCallParameters: {}
 {
     "(" [ArgumentList()] ")"
 }
@@ -418,9 +417,23 @@
     (Identifier() | StringLiteral() | NumericLiteral()) ":" AssignmentExpression()
 }
 
+// A member expression is any number of '.' and '[' expressions
+void MemberExpression() #CallExpression(>1) : {}
+{
+  PrimaryExpression() ((LOOKAHEAD("." | "[") PrimarySuffix())*)
+}
+
+// A new expression ends with the first argument list
+void NewExpression() #NewExpression : {}
+{
+  "new" MemberExpression()  ([LOOKAHEAD("(") Arguments()] #EmptyExpression(jjtree.nodeArity()==0))
+}
+
+// Whereas a call expression allows intermingled '.', '[', and '(' expressions
 void CallExpression() #CallExpression(>1) : {}
 {
-  PrimaryExpression() ((PrimarySuffix())*)
+  PrimaryExpression() (PrimarySuffix() | Arguments())*
+  | NewExpression() (PrimarySuffix() | Arguments())*
   | SuperCallExpression()
 }
 
@@ -430,17 +443,9 @@
           ([ LOOKAHEAD("." Identifier(), { "apply".equals(getToken(2).image) || "call".equals(getToken(2).image) })
             "." Identifier()
            ] #EmptyExpression(jjtree.nodeArity()==0))
-          (Arguments() #FunctionCallParameters)
+          Arguments()
 }
 
-
-void LeftHandSideExpression() #NewExpression(>1) : {}
-{
-//   LOOKAHEAD(3)
-   (("new" CallExpression()) #NewExpression) | CallExpression()
-//|  ("new" "super" (Arguments() #FunctionCallParameters))
-}
-
 void PostfixOp() #Operator : {Token t;}
 {
   ("++" | "--")
@@ -449,7 +454,7 @@
 
 void PostfixExpression() #PostfixExpression(>1) : {}
 {
-    LeftHandSideExpression() [PostfixOp()]
+    CallExpression() [PostfixOp()]
 }
 
 void UnaryOp() #Operator : {Token t;}

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cm/CompilationManager.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cm/CompilationManager.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cm/CompilationManager.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -310,8 +310,10 @@
 
         boolean isDebug = "true".equals(props.getProperty("debug"));
         boolean isProfile = "true".equals(props.getProperty("profile"));
+        boolean isBacktrace = "true".equals(props.getProperty("backtrace"));
+        String runtime = props.getProperty(CompilationEnvironment.RUNTIME_PROPERTY);
 
-        String lfc = LPS.getLFCname( "dhtml", isDebug, isProfile);
+        String lfc = LPS.getLFCname( runtime, isDebug, isProfile, isBacktrace);
         String path = LPS.getLFCDirectory();
 
         File lfcfile = new File(path, lfc);
@@ -372,7 +374,6 @@
             }
         }
 
-        String version = props.getProperty(CompilationEnvironment.RUNTIME_PROPERTY);
         return "<info size=\"" + size + 
                "\" debug=\"" + isDebug + 
                "\" encoding=\"" + enc + 
@@ -380,7 +381,7 @@
                "\" debug-up-to-date=\"" + debugUptodate + 
                "\" nondebug-exists=\"" + nondebugExists + 
                "\" nondebug-up-to-date=\"" + nondebugUptodate +
-               "\" runtime=\"" + version +  
+               "\" runtime=\"" + runtime +  
                "\" gzsize=\"" + gzsize + 
                "\" lfcsize=\"" + lfcsize + 
                "\" gzlfcsize=\"" + gzlfcsize + 

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Canvas.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Canvas.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Canvas.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -3,7 +3,7 @@
 * ****************************************************************************/
 
 /* J_LZ_COPYRIGHT_BEGIN *******************************************************
-* Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
 * Use is subject to license terms.                                            *
 * J_LZ_COPYRIGHT_END *********************************************************/
 
@@ -123,6 +123,9 @@
     /** computed debug flag, based on canvas 'debug' attribute + compilation request args **/
     private boolean mDebug = false;
 
+    /** computed backtrace flag, based on canvas 'backtrace' attribute + compilation request args **/
+    private boolean mBacktrace = false;
+
     /** computed profile flag from request args **/
     private boolean mProfile = false;
 
@@ -170,7 +173,14 @@
         return(mDebug);
     }
 
+    public void setBacktrace(boolean val) {
+        mBacktrace = val;
+    }
 
+    public boolean getBacktrace() {
+        return(mBacktrace);
+    }
+
     public void setProfile(boolean val) {
         mProfile = val;
     }
@@ -443,7 +453,7 @@
             "proxied='" + isProxied() + "' " +
             "runtime='" + getRuntime() +"' " +
             "lfc='" + LPS.getProperty("compiler.runtime.dir") +
-            "/" + LPS.getLFCname(getRuntime(), mDebug, mProfile) + "' " +
+            "/" + LPS.getLFCname(getRuntime(), mDebug, mProfile, mBacktrace) + "' " +
             "debug='" + mDebug + "' " +
             "id='" + XMLUtils.escapeXml(getID()) +"' " +
             "accessible='" + XMLUtils.escapeXml(getAccessible() + "") +"' " +

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CanvasCompiler.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CanvasCompiler.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CanvasCompiler.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -46,6 +46,7 @@
 
         canvas.setDebug(mEnv.getBooleanProperty(CompilationEnvironment.DEBUG_PROPERTY));
         canvas.setProfile(mEnv.getBooleanProperty(CompilationEnvironment.PROFILE_PROPERTY));
+        canvas.setBacktrace(mEnv.getBooleanProperty(CompilationEnvironment.BACKTRACE_PROPERTY));
 
         // Set the "proxied" flag for this app.
         // canvas attribute overrides passed in arg, warn for conflict

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CompilationEnvironment.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CompilationEnvironment.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/CompilationEnvironment.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -30,6 +30,10 @@
     public static final String RUNTIME_PROPERTY = "runtime";
     public static final String PROXIED_PROPERTY           = "lzproxied";
     public static final String DEBUG_PROPERTY             = "debug";
+
+    // matches the value of sc.Compiler.DEBUG_BACKTRACE
+    public static final String BACKTRACE_PROPERTY         = "debugBacktrace";
+
     public static final String PROFILE_PROPERTY           = "profile";
     public static final String LINK_PROPERTY              = "link";
     public static final String VALIDATE_PROPERTY          = "validate";

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Compiler.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Compiler.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Compiler.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -300,6 +300,14 @@
             env.setProperty(CompilationEnvironment.DEBUG_PROPERTY, debug);
         }
 
+        String backtrace = props.getProperty(CompilationEnvironment.BACKTRACE_PROPERTY);
+        if (backtrace != null) {
+            if ("true".equals(backtrace)) {
+                env.setProperty(CompilationEnvironment.DEBUG_PROPERTY, "true" );
+            }
+            env.setProperty(CompilationEnvironment.BACKTRACE_PROPERTY, backtrace);
+        }
+
         String validate = props.getProperty(CompilationEnvironment.VALIDATE_PROPERTY,
                                             LPS.getProperty("compiler.validate", "true"));
         if (validate != null) {
@@ -388,6 +396,8 @@
                                          env.getBooleanProperty(CompilationEnvironment.DEBUG_PROPERTY)));
             compileTimeConstants.put("$profile", new Boolean(
                                          env.getBooleanProperty(CompilationEnvironment.PROFILE_PROPERTY)));
+            compileTimeConstants.put("$backtrace", new Boolean(
+                                         env.getBooleanProperty(CompilationEnvironment.BACKTRACE_PROPERTY)));
 
             runtime = env.getProperty(env.RUNTIME_PROPERTY);
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Main.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Main.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/Main.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -43,8 +43,10 @@
         "  Output directory.",
         "-c | --compile",
         "  Compile and assemble, but do not link",
-        "-g | --debug",
-        "  Add debugging information into the output object.",
+        "-g1 | --debug",
+        "  Add debugging support into the output object.",
+        "-g | -g2 | --backtrace",
+        "  Add debugging and backtrace support into the output object.",
         "-p | --profile",
         "  Add profiling information into the output object.",
         "",
@@ -181,8 +183,11 @@
                     if (level != "" && level != null) {
                         thisLogger.setLevel(Level.toLevel(level));
                     }
-                } else if (arg == "-g" || arg == "--debug") {
+                } else if (arg == "-g1" || arg == "--debug") {
                     compiler.setProperty(CompilationEnvironment.DEBUG_PROPERTY, "true");
+                } else if (arg == "-g" || arg == "-g2" || arg == "--backtrace") {
+                    compiler.setProperty(CompilationEnvironment.DEBUG_PROPERTY, "true");
+                    compiler.setProperty(CompilationEnvironment.BACKTRACE_PROPERTY, "true");
                 } else if (arg == "-p" || arg == "--profile") {
                     compiler.setProperty(CompilationEnvironment.PROFILE_PROPERTY, "true");
                 } else if (arg == "-c" || arg == "--compile") {

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ToplevelCompiler.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ToplevelCompiler.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ToplevelCompiler.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -291,7 +291,8 @@
     static String getBaseLibraryName (CompilationEnvironment env) {
       return LPS.getLFCname(env.getRuntime(),
                             env.getBooleanProperty(env.DEBUG_PROPERTY),
-                            env.getBooleanProperty(env.PROFILE_PROPERTY));
+                            env.getBooleanProperty(env.PROFILE_PROPERTY),
+                            env.getBooleanProperty(env.BACKTRACE_PROPERTY));
     }
 
     static void handleAutoincludes(CompilationEnvironment env, Element element) {

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -2048,40 +2048,20 @@
 
   public boolean visitNewExpression(SimpleNode node, boolean isReferenced, SimpleNode[] children) {
     SimpleNode ref = children[0];
-    SimpleNode[] args = new SimpleNode[0];
-    if (ref instanceof ASTCallExpression) {
-      SimpleNode[] cn = ref.getChildren();
-      ref = cn[0];
-      args = cn[1].getChildren();
-    }
-    boolean primitive = false;
-    if (ref instanceof ASTIdentifier) {
-      String name = ((ASTIdentifier)ref).getName();
-      primitive = "Object".equals(name) || "Array".equals(name) || "String".equals(name) ||
-        "Boolean".equals(name) || "Number".equals(name) || "Date".equals(name) ||
-        "Function".equals(name) || "RegExp".equals(name) || "Error".equals(name);
-    }
-    if (primitive || options.getBoolean("passThrough")) {
-      visitCallParameters(node, isReferenced, args);
-      boolean isref = translateReferenceForCall(ref, true, node);
-      if (isref) {
-        if (ref instanceof ASTPropertyIdentifierReference ||
-            ref instanceof ASTPropertyValueReference) {
-          collector.emit(Instructions.NewMethod);
-        } else {
-          collector.emit(Instructions.NEW);
-        }
-      } else {
-        // This is how you invoke a function value
-        collector.push(Values.Undefined);
+    SimpleNode[] args = children[1].getChildren();
+    visitCallParameters(node, isReferenced, args);
+    boolean isref = translateReferenceForCall(ref, true, node);
+    if (isref) {
+      if (ref instanceof ASTPropertyIdentifierReference ||
+          ref instanceof ASTPropertyValueReference) {
         collector.emit(Instructions.NewMethod);
+      } else {
+        collector.emit(Instructions.NEW);
       }
     } else {
-      Map map = new HashMap();
-      map.put("_1", ref);
-      map.put("_2", new Compiler.Splice(args));
-      SimpleNode n = (new Compiler.Parser()).substitute("_1.make(_2)", map);
-      visitCallExpression(n, isReferenced, n.getChildren());
+      // This is how you invoke a function value
+      collector.push(Values.Undefined);
+      collector.emit(Instructions.NewMethod);
     }
     return false;
   }

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -278,14 +278,14 @@
       }
       options.putBoolean(NAME_FUNCTIONS, true);
     }
+
     // TODO: [2005-04-15 ptw] This pretty much sucks, but the debug
     // lfc only sets nameFunctions, not debug.  This can go away
     // when we can turn on debug for the lfc.
     if (options.getBoolean(DEBUG) ||
         options.getBoolean(NAME_FUNCTIONS)) {
       if (! options.containsKey(DEBUG_BACKTRACE)) {
-        options.put(DEBUG_BACKTRACE,
-                    Boolean.valueOf(LPS.getProperty("compiler.debug.backtrace", "false")));
+        options.put(DEBUG_BACKTRACE, Boolean.valueOf("false"));
       }
       // TODO: [2007-02-21 ptw] Remove after Leopard
       options.put("debugSafari", LPS.getProperty("compiler.debug.safari", "false"));
@@ -607,7 +607,7 @@
           SimpleNode prop = node.get(1);
           assert ((prop instanceof ASTPropertyIdentifierReference ||
                    prop instanceof ASTPropertyValueReference) &&
-                  prop.size() > 0 ): prop;
+                  prop.size() > 0 ): (new Compiler.ParseTreePrinter()).visit(prop);
           int size = node.size();
           SimpleNode children[] = new SimpleNode[2];
           children[0] = node.get(0);
@@ -854,9 +854,14 @@
       }
 
       int size = node.size();
+      SimpleNode[] childnodes = node.getChildren();
       String[] children = new String[size];
       for (int i = 0; i < size; i++) {
-        children[i] = visit(node.get(i)) ;
+        SimpleNode n = childnodes[i];
+        if (n instanceof PassThroughNode) {
+          n = childnodes[i] = ((PassThroughNode)n).realNode;
+        }
+        children[i] = visit(n) ;
       }
 
       Class nt = node.getClass();
@@ -1133,12 +1138,10 @@
       return defaultVisitor(node, children);
     }
     public String visitNewExpression(SimpleNode node, String[] children) {
-      // Associativity makes these parens superfluous
-//       int thisPrec = prec(Ops.NEW, true);
-//       SimpleNode c = node.get(0);
-//       children[0] = maybeAddParens(thisPrec, c, children[0]);
-      // Kludge for (new Foo).whatever
-      return "(new " + children[0] + ")";
+      int thisPrec = prec(Ops.NEW, true);
+      SimpleNode c = node.get(0);
+      children[0] = maybeAddParens(thisPrec, c, children[0]);
+      return "new " + children[0] + "(" + children[1] + ")";
     }
     public String visitPragmaDirective(SimpleNode node, String[] children) {
       return "#pragma " + children[0];

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptCompressor.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptCompressor.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptCompressor.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -45,15 +45,6 @@
     return node;
   }
 
-  // Don't transform new calls for compression
-  public SimpleNode visitNewExpression(SimpleNode node, boolean isReferenced, SimpleNode[] children) {
-    for (int i = 0, len = children.length; i < len; i++) {
-      SimpleNode child = children[i];
-      children[i] = visitExpression(child, isReferenced);
-    }
-    return node;
-  }
-
 }
 
 /**

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -1457,29 +1457,10 @@
   }
 
   public SimpleNode visitNewExpression(SimpleNode node, boolean isReferenced, SimpleNode[] children) {
-    SimpleNode ref = children[0];
-    SimpleNode[] args = new SimpleNode[0];
-    if (ref instanceof ASTCallExpression) {
-      SimpleNode[] cn = ref.getChildren();
-      ref = cn[0];
-      args = cn[1].getChildren();
+    for (int i = 0, len = children.length; i < len; i++) {
+      SimpleNode child = children[i];
+      children[i] = visitExpression(child, isReferenced);
     }
-    boolean primitive = false;
-    if (ref instanceof ASTIdentifier) {
-      String name = ((ASTIdentifier)ref).getName();
-      primitive = "Object".equals(name) || "Array".equals(name) || "String".equals(name) ||
-        "Boolean".equals(name) || "Number".equals(name) || "Date".equals(name) ||
-        "Function".equals(name) || "RegExp".equals(name) || "Error".equals(name);
-    }
-    if (primitive || options.getBoolean("passThrough")) {
-      children[0] = visitExpression(children[0]);
-    } else {
-      Map map = new HashMap();
-      map.put("_1", ref);
-      map.put("_2", new Compiler.Splice(args));
-      SimpleNode n = (new Compiler.Parser()).substitute("_1.make(_2)", map);
-      node = visitExpression(n, isReferenced);
-    }
     return node;
   }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/server/LPS.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/server/LPS.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/server/LPS.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -206,7 +206,7 @@
       return HOME() + File.separator + LPS.getProperty("compiler.runtime.dir").replace('/', File.separatorChar);
     }
 
-    public static String getLFCname(String runtime, boolean debug, boolean profile) {
+    public static String getLFCname(String runtime, boolean debug, boolean profile, boolean backtrace) {
       String lfc = "LFC";
       String extension = "js";
       if (runtime == null) {
@@ -224,7 +224,9 @@
         lfc += "-profile";
       }
 
-      if (debug) {
+      if (backtrace) {
+        lfc += "-backtrace";
+      } else if (debug) {
         lfc += "-debug";
       }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderCompile.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderCompile.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderCompile.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -406,6 +406,7 @@
      * <ul>
      * <li> "debug"
      * <li> "logdebug"
+     * <li> "lzbacktrace"
      * <li> "profile"
      * <li> "validate"
      * <li> "sourcelocators"
@@ -465,6 +466,13 @@
             if (profile != null) {
                 props.setProperty(CompilationEnvironment.PROFILE_PROPERTY, profile);
             }
+
+            // Look for "lzbacktrace=true" flag
+            props.setProperty(CompilationEnvironment.BACKTRACE_PROPERTY, "false");
+            String backtrace = req.getParameter("lzbacktrace");
+            if (backtrace != null) {
+                props.setProperty(CompilationEnvironment.BACKTRACE_PROPERTY, backtrace);
+            }
             
         }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderLFC.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderLFC.java	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/servlets/responders/ResponderLFC.java	2007-09-13 23:38:53 UTC (rev 6473)
@@ -3,7 +3,7 @@
  * ****************************************************************************/
 
 /* J_LZ_COPYRIGHT_BEGIN *******************************************************
-* Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
 * Use is subject to license terms.                                            *
 * J_LZ_COPYRIGHT_END *********************************************************/
 
@@ -71,9 +71,10 @@
 
         String lfc = LPS.getLFCname(
           req.getParameter("lzr"),
-          req.getParameter(CompilationEnvironment.DEBUG_PROPERTY) != null || 
+          "true".equals(req.getParameter(CompilationEnvironment.DEBUG_PROPERTY)) || 
             req.getParameter("_canvas_debug") != null,
-          req.getParameter(CompilationEnvironment.PROFILE_PROPERTY) != null);
+          "true".equals(req.getParameter(CompilationEnvironment.PROFILE_PROPERTY)),
+          "true".equals(req.getParameter(CompilationEnvironment.BACKTRACE_PROPERTY)));
         String path = LPS.getLFCDirectory();
 
         File lfcfile = new File(path, lfc);

Modified: openlaszlo/branches/legals/demos/calendar/cal-data.lzx
===================================================================
--- openlaszlo/branches/legals/demos/calendar/cal-data.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/demos/calendar/cal-data.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -8,14 +8,11 @@
      <script>
        var dataloader = null;
      </script>         
-    <datasource name="http">
-        <dataset name="serverdata" 
-                 ondata="if (!dataloader) return; dataloader.run()" />
-    </datasource>
+    <dataset name="serverdata" type="http"/>
 
     <!-- controls loading of server data; once data has loaded calls 
          notifies localdatacontroller -->
-    <datapointer name="dataloader" xpath="serverdata:/*" >
+    <datapointer name="dataloader" xpath="serverdata:/*" ondata="this.run()">
 
         <attribute name="reqq" value="[]"/>
         <attribute name="requestrunning" value="false"/>
@@ -44,8 +41,8 @@
             var nr = this.reqq.shift();
             //Debug.write( "make request "  + nr );
             this.requestrunning = true;
-            http.serverdata.setAttribute( "src", nr );
-            http.serverdata.doRequest();
+            serverdata.setAttribute( "src", nr );
+            serverdata.doRequest();
         </method>
 
         <method name="enqueueRequest" args="r">
@@ -62,7 +59,11 @@
             this.setXPath( "eventdata:/vcalendar/year" + yr + "/month" + mo );
             //this is unfortunate, but there's no easy way to see if this
             //succeeded as v1
-            return this.getNodeName() == "month"+mo;
+            if(this.p != null){
+                return this.getNodeName() == "month"+mo;
+            } else {
+                return false;
+            }
         </method>
     </datapointer>
 
@@ -75,8 +76,11 @@
 
             while ( ptr.getNodeCount() == 1 ){
                 var op = this.p;
-                this.setXPath( ptr.getNodeName() );
-                if ( this.getNodeName() != ptr.getNodeName() ){
+                if(ptr.p != null){
+                    this.setXPath( ptr.getNodeName() );
+                }
+                var thisgnn = (this.p == null ? null : this.getNodeName());
+                if ( thisgnn != ptr.getNodeName() ){
                     this.setPointer ( op );
                     break;
                 }

Modified: openlaszlo/branches/legals/demos/calendar/eventselector.lzx
===================================================================
--- openlaszlo/branches/legals/demos/calendar/eventselector.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/demos/calendar/eventselector.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -118,7 +118,9 @@
             //Debug.write("selectData: "+e);
             //Debug.write ("selectData Deselecting: "+
                             //currenteventDP.serialize());
-            currenteventDP.setNodeAttribute( "selected" , false );
+            if(currenteventDP.p != null){
+                currenteventDP.setNodeAttribute( "selected" , false );
+            }
             e.datapath.setNodeAttribute( "selected" , true );
         </method>
 

Modified: openlaszlo/branches/legals/docs/index.html
===================================================================
--- openlaszlo/branches/legals/docs/index.html	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/docs/index.html	2007-09-13 23:38:53 UTC (rev 6473)
@@ -35,8 +35,9 @@
 </li>
 
 <li>
-<b><a href="./reference/index.html">OpenLaszlo Reference</a></b><br />
+<b><a href="http://www.openlaszlo.org/lps3/docs/reference">OpenLaszlo Reference</a></b><br />
 A complete listing of every public LZX tag and API -- including tag attributes and API methods and parameters.
+(The link above takes you to the OpenLaszlo 3.4 reference on www.openlaszlo.org. <a href="./reference">OpenLaszlo 4 Reference</a> is also available locally, but it is not as polished as the 3.4 reference. We recommend you use the <a href="http://www.openlaszlo.org/lps3/docs/reference">OpenLaszlo 3.4 Reference</a>.) 
 </li>
 
 <li>

Modified: openlaszlo/branches/legals/index.jsp
===================================================================
--- openlaszlo/branches/legals/index.jsp	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/index.jsp	2007-09-13 23:38:53 UTC (rev 6473)
@@ -86,13 +86,13 @@
         <p>Docs</p>
         <ul>
             <li><a href="docs">Docs index</a></li>
-            <li><a href="docs/guide">Software Developer's Guide</a></li>
-            <li><a href="docs/design">UI Designer's Guide</a></li>
-            <li><a href="docs/deploy">Deployer's Guide</a></li>
-            <li><a href="docs/reference">Reference Guide</a></li>
+            <li><a href="docs/developers">Software Developer's Guide</a></li>
+            <li><a href="docs/component-design">UI Designer's Guide</a></li>
+            <li><a href="docs/deployers">Deployer's Guide</a></li>
+            <li><a href="http://www.openlaszlo.org/lps3/docs/reference">Reference Guide (for OL 3.4, served from www.openlaszlo.org)</a> or <a href="docs/reference">Reference Guide (local)</a></li>
             <li><a href="docs/contributors">Contributor's Guide</a></li>
             <li><a href="docs/release-notes.html">Latest Release Notes</a></li>
-        </ul>
+        </ul>        
         <p>OpenLaszlo Admin tools</p>
         <ul>
             <li><a href="lps/admin/console.lzx">Console</a></li>

Modified: openlaszlo/branches/legals/laszlo-explorer/coverpages/documentation_cover.html
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/coverpages/documentation_cover.html	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/laszlo-explorer/coverpages/documentation_cover.html	2007-09-13 23:38:53 UTC (rev 6473)
@@ -15,7 +15,7 @@
 <body>
 <h1>Documentation</h1>
   <div class="desc">
-   <strong><a href="../../docs/guide/index.html" target="laszlo-dguide">Software Developer's Guide to OpenLaszlo Applications</a></strong>
+   <strong><a href="../../docs/developers/index.html" target="laszlo-dguide">Software Developer's Guide to OpenLaszlo Applications</a></strong>
    <p>In depth explanations of OpenLaszlo concepts&#8212;from tutorials through advanced concepts.</p>
   <strong><a href="../../docs/deployers/index.html" target="laszlo-deployers-guide">System Administrator's Guide to Deploying OpenLaszlo Applications</a></strong>
    <p>Information for system administrators about how to deploy the OpenLaszlo Server, including explanations of configuration settings and server
@@ -23,17 +23,17 @@
   <!--strong><a href="../../docs/design/index.html" target="laszlo-designer-guide">Designer's Guide</a></strong>
    <p>An explication of OpenLaszlo for
 graphic designers and information architects.</p-->
-   <strong><a href="../../docs/reference/index.html" target="laszlo-reference">LZX Reference Manual</a></strong>
+   <strong><a href="http://www.openlaszlo.org/lps3/docs/reference/index.html" target="laszlo-reference">LZX Reference Manual</a></strong>
    <p>Comprehensive listing of all LZX tag definitions and APIs&#8212;
-   including tag attributes and API methods and parameters.
+   including tag attributes and API methods and parameters. (We recommend that you use <a href="http://www.openlaszlo.org/lps3/docs/reference/index.html" target="laszlo-reference">the OpenLaszlo 3.4 Reference Manual</a>, because the <a href="../../docs/reference/index.html" target="laszlo-reference">4.0 docs included in this distribution</a> are only at "alpha" status. The 3.4 docs contain the same information as the 4.0 docs, because the API's have not changed from 3.4. Consult  <a href="../../docs/reference/index.html" target="laszlo-reference">the local 4.0 docs</a> only if you are concerned that you are missing 4.0-specific information. 
    </p>
    <strong><a href="../../docs/component-design/index.html" target="laszlo-componentguide">Components Guide</a></strong>
    <p>A visual design guide for the LZ Components, including detailed
    explanations of their construction
    (<a href="../../docs/component-design/component-design-2.0.pdf" target="laszlo-componentguide-pdf">PDF</a>).
    </p>
-   <strong><a href="../../docs/contribref/contribref/index.html" target="laszlo-contributorsguide">Contributor's Guide</a> (beta)</strong>
-   <p>Documentation for use by contributors to the OpenLaszlo platform, including private interfaces and kernel APIs</p>
+   <strong><a href="../../docs/contributors/index.html" target="laszlo-contributorsguide">Contributor's Guide</a> (alpha)</strong>
+   <p>Documentation for use by contributors to the OpenLaszlo platform, including private interfaces and kernel APIs. This is still in "alpha" status.</p>
   <strong><a href="../../index.html" target="lzquickindex">Quick Index</a></strong>
   <p>An list of links to all the content and applications referenced by the OpenLaszlo Explorer.
 </p>

Modified: openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html	2007-09-13 23:38:53 UTC (rev 6473)
@@ -32,7 +32,7 @@
 </head>
 <body>
 <h2>
-Welcome to OpenLaszlo 4.0 
+Welcome to OpenLaszlo 4.0.5 
 </h2>
 <h1 style="margin-top: 2px">
 The open source platform for building rich internet applications
@@ -49,7 +49,7 @@
 <h3>
 It's not just Flash anymore!
 </h3>
-In earlier releases, OpenLaszlo applications were compiled in .swf format to run on Adobe's Flash Player. With OpenLaszlo 4.0 (OL4), we add the option of compilation to DHTML (browser-native JavaScript). OpenLaszlo 4.0 handles browser idiosyncracies so you don't have to.
+Before OpenLaszlo 4.0, OpenLaszlo applications were compiled in .swf format to run on Adobe's Flash Player. With OpenLaszlo 4.0 (OL4), we added the option of compilation to DHTML (browser-native JavaScript). OpenLaszlo 4 handles browser idiosyncracies so you don't have to.
 </div>
 
 
@@ -58,9 +58,9 @@
 <div id="left">
 <div class="column-in">
 <h3>
-This is a fully-qualified release
+OpenLaszlo 4.0.5 is the recommended platform for .swf development
 </h3>
-OpenLaszlo 4.0 has been beta-tested by users world wide and vetted by the Laszlo Systems Quality Assurance team. Hundreds of improvements have been made since OL4B1. We invite you to start developing against it now.  Please see the <a href="../../../docs/release-notes.html" target="_top">release notes</a> for a detailed description of new features in this release, changes since the last major release, and known problems.
+OpenLaszlo 4.0.5 is now the recommended platform for developing OpenLaszlo applications compiled to .swf format. If you've been holding back on OpenLaszlo 3.4, now's the time to move up. Support for applications to DHTML remains at "beta" level; it will be fully supported with OL 4.1. This release has been tested by users world wide and vetted by the Laszlo Systems Quality Assurance team. Hundreds of improvements have been made since OpenLaszlo 4.0.  Please see the <a href="../../../docs/release-notes.html" target="_top">release notes</a> for a detailed description of new features in this release, changes since the last major release, and known problems.
 </div>
 </div>
 

Modified: openlaszlo/branches/legals/laszlo-explorer/explore-nav.lzx
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/explore-nav.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/laszlo-explorer/explore-nav.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -19,6 +19,7 @@
         navset = "nav.xml";
         var lzr = global['lzr'];
         if (lzr &amp;&amp; lzr == 'dhtml') {
+            Debug.info("gonna use dhtml nav."); 
             navset = "nav_dhtml.xml";
         }  
     }
@@ -222,7 +223,7 @@
         }
 
         var action = dp.xpathQuery("@action");
-        if (action == 'popup' || action == 'source') {
+        if (action == 'popup' || action == 'source' || action == 'popupexternal') {
             icon.setResourceNumber(4);
         }
     </handler>
@@ -256,6 +257,12 @@
                   LzBrowser.loadURL('content.jsp?src=' + src + '&tag=' + tagline +
                                     '&title=' + title + '&lzr=' + runtime, 'content');
                 }
+              } else if (action =='popupexternal') {
+                var jsOpenStr = "window.open('" + src + "'," 
+                    + "'" + target + "'," + 
+                    "'scrollbars=yes,resizable=yes,toolbar=yes,location=yes,menubar=yes,width=860,height=600')";
+                LzBrowser.loadJS(jsOpenStr); 
+                
               } else {
                 if (title ==null){
                    title = classroot.name;

Modified: openlaszlo/branches/legals/laszlo-explorer/nav.rnc
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/nav.rnc	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/laszlo-explorer/nav.rnc	2007-09-13 23:38:53 UTC (rev 6473)
@@ -28,7 +28,7 @@
   }
 
 itemAttributes =
-  attribute action { "edit" | "explore" | "popup" | "source" }?,
+  attribute action { "edit" | "explore" | "popup" | "source" | "popupexternal" }?,
   attribute name { text },
   attribute params { string }?,
   attribute popup { xsd:anyURI }?,

Modified: openlaszlo/branches/legals/laszlo-explorer/nav.xml
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/nav.xml	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/laszlo-explorer/nav.xml	2007-09-13 23:38:53 UTC (rev 6473)
@@ -305,12 +305,12 @@
 
   <section name="Documentation" title="Documentation" src="/laszlo-explorer/coverpages/documentation_cover.html" text="Tutorial, advanced, reference">
     <topic src="/docs/installation/index.html" name="Installation" />
-    <topic popup="/docs/reference/index.html" name="LZX Reference" action="popup" target="laszlolzxreference" />
-    <topic popup="/docs/guide/index.html" name="Developer's Guide" action="popup" target="laszlodevguide" />
+    <topic src="http://www.openlaszlo.org/lps3/docs/reference/index.html" name="LZX Reference" action="popupexternal" target="laszlolzxreference" />
+    <topic popup="/docs/developers/index.html" name="Developer's Guide" action="popup" target="laszlodevguide" />
     <topic popup="/docs/deployers/index.html" name="Administrator's Guide" action="popup" target="laszloadminguide" />
     <!--topic popup="/docs/design/index.html" name="UI Designer's Guide" action="popup" target="laszlouiguide" /-->
     <topic popup="/docs/component-design/index.html" name="Components Guide" action="popup" target="laszlocomponentguide" />
-    <topic popup="/docs/contribref/contribref/index.html" name="Contributor's Guide" action="popup" target="laszlocontributorsguide" />
+     <topic popup="/docs/contribref/index.html" name="Contributor's Guide" action="popup" target="laszlocontributorsguide" />
     <topic src="/docs/release-notes.html" name="Release Notes" />
     <topic src="/tools/index.html" name="Developer's Tools" title="Development Tools"  text="Tips for IDEs"/>
   </section>

Modified: openlaszlo/branches/legals/lps/admin/dev-console.lzx
===================================================================
--- openlaszlo/branches/legals/lps/admin/dev-console.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/admin/dev-console.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -69,6 +69,7 @@
          app_runtime = appdata.getPointer().xpathQuery("/request/param[@name = 'lzr']/@value");
        }
        var app_debug = appdata.getPointer().xpathQuery("/request/param[@name = 'debug']/@value");
+       var app_backtrace = appdata.getPointer().xpathQuery("/request/param[@name = 'lzbacktrace']/@value");
        if (app_debug == 'y') app_debug = 'true';
        var app_console_debug = 
               appdata.getPointer().xpathQuery("/request/@console-remote-debug") == 'true';
@@ -137,8 +138,8 @@
       <view name="controls" x="70">
         <view name="firstrow" y="4">
             <text fontsize="11" x="8" y="7"><b>Compile Options:</b></text>
-            <view x="125" width="319" height="32" bgcolor="black">
-                <view x="1" y="1" width="317" height="30" bgcolor="#9494ad"/>
+            <view x="125" width="412" height="32" bgcolor="black">
+                <view x="1" y="1" width="410" height="30" bgcolor="#9494ad"/>
             </view>
             <view x="125" name="compilecontrols">
                 <radiogroup id="rg_runtime" layout="class: simplelayout; axis: x; spacing:4" x="6" y="8.75">
@@ -151,11 +152,24 @@
 
                 </radiogroup>
                 <view height="14" width="1" bgcolor="black" x="173" y="9.5"/>
-                <checkbox id="cb_debug" value="${app_debug}" x="181" y="8.25">Debug</checkbox>
-                <button onclick="canvas.gotoApp()" x="244" y="4">Compile</button>
+                <checkbox id="cb_debug" value="${app_debug == 'true'}"
+                          x="181" y="8.25">Debug</checkbox>
+                <checkbox id="cb_backtrace" 
+                          value="${app_backtrace == 'true'}" x="250" y="8.25">Backtrace</checkbox>
+                <button onclick="canvas.gotoApp()" x="334" y="4">Compile</button>
+                <handler name="onvalue" reference="cb_backtrace">
+                  if (cb_backtrace.value) {
+                     cb_debug.setAttribute('value', true);
+                  }
+                </handler>
+                <handler name="onvalue" reference="cb_debug">
+                  if (cb_debug.value == false) {
+                     cb_backtrace.setAttribute('value', false);
+                  }
+                </handler>
             </view>
             <view width="22" x="450"/>
-            <button onclick="canvas.viewSource()" x="540" y="3">View Source</button>
+            <button onclick="canvas.viewSource()" x="580" y="3">View Source</button>
         </view>
 
         <view bgcolor="black" width="${canvas.width - 70}" height="1" y="39"/>
@@ -185,7 +199,7 @@
 
           -->
 
-          <checkbox y="10" x="700" id="cb_remotedebug" visible="${app_runtime != 'dhtml'}" value="${app_console_debug}">Console Remote Debug</checkbox>
+          <checkbox y="10" x="740" id="cb_remotedebug" visible="${app_runtime != 'dhtml'}" value="${app_console_debug}">Console Remote Debug</checkbox>
 
 
           <!-- <checkbox id="cb_popup" value="${app_floating_window}">in separate window</checkbox> -->
@@ -261,6 +275,7 @@
     <![CDATA[
     var qruntime = rg_runtime.value;
     var qdebug = cb_debug.value;
+    var qbacktrace = cb_backtrace.value;
     var consoledebug = cb_remotedebug.value;
     
     // parse original app query string, override with user settings
@@ -270,6 +285,7 @@
     var qitems = LzParam.prototype.parseQueryString(app_query);
     // override debug,runtime args
     qitems['debug'] = qdebug;
+    qitems['lzbacktrace'] = qbacktrace;
     qitems['lzr'] = qruntime;
 
     /*
@@ -394,7 +410,7 @@
 
 </canvas>
 <!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
 * Use is subject to license terms.                                            *
 * X_LZ_COPYRIGHT_END ****************************************************** -->
 <!-- @LZX_VERSION@                                                         -->

Modified: openlaszlo/branches/legals/lps/admin/dev-console.lzx.js
===================================================================
--- openlaszlo/branches/legals/lps/admin/dev-console.lzx.js	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/admin/dev-console.lzx.js	2007-09-13 23:38:53 UTC (rev 6473)
@@ -69,72 +69,6 @@
 $modules.lz=$modules.runtime
 $modules.user=$modules.lz
 var global=$modules.user
-Debug={}
-Debug.write=function($1){
-
-}
-Debug.trace=function($1){
-
-}
-Debug.monitor=function($1){
-
-}
-Debug.warn=function($1){
-
-}
-Debug.error=function($1){
-
-}
-Debug.info=function($1){
-
-}
-Debug.debug=function($1){
-
-}
-var black=0
-var green=32768
-var silver=12632256
-var lime=65280
-var gray=8421504
-var olive=8421376
-var white=16777215
-var yellow=16776960
-var maroon=8388608
-var navy=128
-var red=16711680
-var blue=255
-var purple=8388736
-var teal=32896
-var fuchsia=16711935
-var aqua=65535
-var LzDeclaredEvent={}
-LzDeclaredEvent.sendEvent=function(){
-
-}
-LzDeclaredEvent.toString=function(){
-return "Declared event"
-}
-function DeclareEvent($1,$2){
-$1[$2]=LzDeclaredEvent
-}
-function DeclareEvents($1,$2){
-for(var $3 in $2){
-$1[$2[$3]]=LzDeclaredEvent
-}
-}
-var LzInheritedHash={make:function($1){
-var $2
-$2=function(){
-
-}
-if($1){
-$2.prototype=$1
-return(new $2())
-}
-return(new Object)
-}}
-var ConstructorMap={}
-var lz=ConstructorMap
 var Instance=function(){
 this.constructor=arguments.callee
 }
@@ -344,10 +278,422 @@
 this.allTraits[$1]=$5
 return $5
 }}
+var LzMessage=Class.make("LzMessage",null,{message:"",appendInternal:function($1,$2){
+this.message+=$1
+},append:function($1){
+var $2=arguments.length
+for(var $3=0;$3<$2;$3++){
+this.appendInternal(String(arguments[$3]))
+}
+},toString:function(){
+return this.message
+},toHTML:function(){
+return this.toString()
+}},{initialize:function($1){
+this.message=$1
+}})
+var LzFormatter=Trait.make("LzFormatter",null,{pad:function($1,$2,$3,$4,$5,$6,$7){
+switch(arguments.length){
+case 0:
+$1=""
+case 1:
+$2=null
+case 2:
+$3=null
+case 3:
+$4=" "
+case 4:
+$5="-"
+case 5:
+$6=10
+case 6:
+$7=false
+
+}
+var $8=typeof $1=="number"
+if($8){
+if($3!=null){
+var $9=Math.pow(10,-$3)
+$1=Math.round($1/$9)*$9
+}
+$1=Number($1).toString($6)
+if($5!="-"){
+if($1.indexOf("-")!=0){
+if($1!=0){
+$1=$5+$1
+}else{
+$1=" "+$1
+}
+}
+}
+}else{
+$1=""+$1
+}
+var $10=$1.length
+if($3!=null){
+if($8){
+var $11=$1.lastIndexOf(".")
+if($11==-1){
+var $12=0
+if($7||$3>0){
+$1+="."
+}
+}else{
+var $12=$10-($11+1)
+}
+for(var $13=$12;$13<$3;$13++){
+$1+="0"
+}
+}else{
+$1=$1.substring(0,$3)
+}
+}
+$10=$1.length
+if(!$2){
+$2=0
+}
+var $14=false
+if($2<0){
+$2=-$2
+$14=true
+}
+if($10>=$2){
+return $1
+}
+if($14){
+for(var $13=$10;$13<$2;$13++){
+$1=$1+" "
+}
+}else{
+$5=null
+if($4!=" "){
+if(" +-".indexOf($1.substring(0,1))>=0){
+$5=$1.substring(0,1)
+$1=$1.substring(1)
+}
+}
+for(var $13=$10;$13<$2;$13++){
+$1=$4+$1
+}
+if($5!=null){
+$1=$5+$1
+}
+}
+return $1
+},formatToString:function(control,$1){
+var $8
+$8=function($1){
+if($1>=al){
+return null
+}
+return arglist[$1]
+}
+var al=arguments.length
+if(!(typeof control=="string"||control instanceof String)||al>1!=control.indexOf("%")>=0){
+var $2=LzMessage.make()
+for(var $3=0;$3<al;$3++){
+var $4=arguments[$3]
+var $5=$3==al-1?"\n":" "
+$2.append($4)
+$2.appendInternal($5)
+}
+return $2
+}
+if(al<1){
+control=""
+}
+var $6=""+control
+var $7=1
+var arglist=arguments
+var $9=0
+var $10=$6.length
+var $11=0
+var $12=0
+var $2=LzMessage.make()
+while($11<$10){
+$12=$6.indexOf("%")
+if($12==-1){
+$2.append($6.substring($11,$10))
+break
+}
+$2.append($6.substring($11,$12))
+$9=$12
+$11=$12+1
+$12=$12+2
+var $13="-"
+var $14=" "
+var $15=false
+var $16=""
+var $17=null
+var $18=null
+while($11<$10&&$18==null){
+var $19=$6.substring($11,$12)
+$11=$12++
+switch($19){
+case "-":
+$16=$19
+break
+case "+":
+case " ":
+$13=$19
+break
+case "#":
+$15=true
+break
+case "0":
+if($16===""&&$17===null){
+$14=$19
+break
+}
+case "1":
+case "2":
+case "3":
+case "4":
+case "5":
+case "6":
+case "7":
+case "8":
+case "9":
+if($17!==null){
+$17+=$19
+}else{
+$16+=$19
+}
+break
+case "$":
+$7=$16
+$16=""
+break
+case "*":
+if($17!==null){
+$17=$8($7)
+$7++
+}else{
+$16=$8($7)
+$7++
+}
+break
+case ".":
+$17=""
+break
+case "h":
+case "l":
+break
+default:
+$18=$19
+break
+
+}
+}
+var $20=$8($7)
+var $21=null
+var $22=false
+if($17!==null){
+$21=1*$17
+}else{
+switch($18){
+case "F":
+case "E":
+case "G":
+case "f":
+case "e":
+case "g":
+$21=6
+$22=$15
+break
+case "O":
+case "o":
+if($15&&$20!=0){
+$2.append("0")
+}
+break
+case "X":
+case "x":
+if($15&&$20!=0){
+$2.append("0"+$18)
+}
+break
+
+}
+}
+var $23=10
+switch($18){
+case "o":
+case "O":
+$23=8
+break
+case "x":
+case "X":
+$23=16
+break
+
+}
+switch($18){
+case "U":
+case "O":
+case "X":
+case "u":
+case "o":
+case "x":
+if($20<0){
+$20=-$20
+var $24=Math.abs(parseInt($16))
+if(isNaN($24)){
+$24=Number($20).toString($23).length
+}
+var $25=Math.pow($23,$24)
+$20=$25-$20
+}
+
+}
+switch($18){
+case "D":
+case "U":
+case "I":
+case "O":
+case "X":
+case "F":
+case "E":
+case "G":
+$20=Number($20)
+$2.append(this.pad($20,$16,$21,$14,$13,$23,$22).toUpperCase())
+$7++
+break
+case "c":
+$20=String.fromCharCode($20)
+case "w":
+
+case "s":
+var $27
+if($20 instanceof Function){
+if(!$27){
+$27="function () {...}"
+}
+}else{
+if(typeof $20=="number"){
+$27=Number($20).toString($23)
+}else{
+$27=""+$20
+}
+}
+$2.appendInternal(this.pad($27,$16,$21,$14,$13,$23,$22),$20)
+$7++
+break
+case "d":
+case "u":
+case "i":
+case "o":
+case "x":
+case "f":
+case "e":
+case "g":
+$20=Number($20)
+$2.append(this.pad($20,$16,$21,$14,$13,$23,$22))
+$7++
+break
+case "%":
+$2.append("%")
+break
+default:
+$2.append($6.substring($9,$11))
+break
+
+}
+$6=$6.substring($11,$10)
+$9=0,$10=$6.length
+$11=0,$12=0
+}
+if($7<al){
+$2.appendInternal(" ")
+for(;$7<al;$7++){
+var $4=$8($7)
+var $5=$7==al-1?"\n":" "
+$2.append($4)
+$2.appendInternal($5)
+}
+}
+return $2
+}},null)
+Debug={}
+Debug.write=function($1){
+
+}
+Debug.trace=function($1){
+
+}
+Debug.monitor=function($1){
+
+}
+Debug.warn=function($1){
+
+}
+Debug.error=function($1){
+
+}
+Debug.info=function($1){
+
+}
+Debug.debug=function($1){
+
+}
+var black=0
+var green=32768
+var silver=12632256
+var lime=65280
+var gray=8421504
+var olive=8421376
+var white=16777215
+var yellow=16776960
+var maroon=8388608
+var navy=128
+var red=16711680
+var blue=255
+var purple=8388736
+var teal=32896
+var fuchsia=16711935
+var aqua=65535
+var LzDeclaredEvent={}
+LzDeclaredEvent.sendEvent=function(){
+
+}
+LzDeclaredEvent.clearDelegates=function(){
+
+}
+LzDeclaredEvent.removeDelegate=function(){
+
+}
+LzDeclaredEvent.getDelegateCount=function(){
+return 0
+}
+LzDeclaredEvent.toString=function(){
+return "LzDeclaredEvent"
+}
+LzDeclaredEvent.ready=false
+function DeclareEvent($1,$2){
+$1[$2]=LzDeclaredEvent
+}
+function DeclareEvents($1,$2){
+for(var $3 in $2){
+$1[$2[$3]]=LzDeclaredEvent
+}
+}
+var LzInheritedHash={make:function($1){
+var $2
+$2=function(){
+
+}
+if($1){
+$2.prototype=$1
+return(new $2())
+}
+return(new Object)
+}}
+var ConstructorMap={}
+var lz=ConstructorMap
 var LzNode=Class.make("LzNode",null,{initialize:function($1,$2,$3,$4){
+this.__LZUID="__U"+ ++LzNode.__UIDs
 this.__LZdeferDelegates=true
-var $5=LzDelegate.__LZdelegatesQueue.length
-this.nextMethod(arguments.callee,"initialize").apply(this,arguments)
+var $5=LzDelegate.__LZdelegatesQueue.length;(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
 var $7
 if($2&&$2["$hasdefaultattrs"]){
 $7=$2
@@ -389,7 +735,7 @@
 if(!$7.hasOwnProperty("$refs")){
 $7.$refs=LzInheritedHash.make($9)
 }
-var $16=this._ignoreAttribute
+var $16=LzNode._ignoreAttribute
 for(var $11 in $10){
 $7.$refs[$11]=$16
 }
@@ -425,12 +771,16 @@
 if($19){
 this.__LZstyleConstraints=this.__LZapplyStyleMap($19,$2)
 }
+if(this.constructWithArgs){
 this.constructWithArgs($17)
+}
 delete this.__LZdeferDelegates
 if($5!=LzDelegate.__LZdelegatesQueue.length){
 LzDelegate.__LZdrainDelegatesQueue($5)
 }
+if(this.onconstruct.ready){
 this.onconstruct.sendEvent(this)
+}
 if($3&&$3.length){
 this.createChildren($3)
 }else{
@@ -439,31 +789,35 @@
 },__LZlateinit:null,__LZpreventSubInit:null,__LZresolveDict:null,__LZsourceLocation:null,__LZUID:null,__LZdelegates:null,defaultattrs:{$hasdefaultattrs:true},isinited:false,subnodes:null,datapath:null,initstage:null,$isstate:false,doneClassRoot:false,parent:null,children:null,cloneManager:null,name:null,id:null,defaultplacement:null,placement:null,$cfn:0,__LZdeleted:false,immediateparent:null,dependencies:null,classroot:null,nodeLevel:null,$styles:function(){
 return null
 },__LZapplyStyleMap:function($1,$2){
-for(var $3 in $1){
-var $4=LzCSSStyle.getPropertyValueFor(this,$1[$3])
-if(typeof $4=="string"&&!isNaN($4)){
-$4=Number($4)
+var $3={}
+for(var $4 in $1){
+if($2[$4]!=null){
+continue
 }
-if(!($3 in $2)){
-if($4 instanceof Function){
-styleConstraints[$3]=$4
+var $5=LzCSSStyle.getPropertyValueFor(this,$1[$4])
+if(typeof $5=="string"&&!isNaN($5)){
+$5=Number($5)
+}
+if(!($4 in $2)){
+if($5 instanceof Function){
+if(this[$4]==null){
+$3[$4]=$5
+}
 }else{
-if($4!=null){
-this.setAttribute($3,$4)
+if($5!=null){
+this.setAttribute($4,$5)
 }
 }
 }
 }
-return styleConstraints
+return $3
 },__LZapplyStyleConstraints:function(){
-if(this.hasOwnProperty("__LZstyleConstraints")){
 var $1=this.__LZstyleConstraints
 for(var $2 in $1){
 var $3=$1[$2]
 var $4=$3.call(this)
 this.setAttribute($2,$4)
 }
-}
 },construct:function($1,$2){
 var $3=$1
 this.parent=$3
@@ -502,8 +856,6 @@
 }else{
 this.nodeLevel=1
 }
-},constructWithArgs:function($1,$2){
-
 },init:function(){
 return
 },__LZinstantiationDone:function(){
@@ -526,7 +878,9 @@
 }
 this.isinited=true
 this.__LZresolveReferences()
+if(this.__LZstyleConstraints){
 this.__LZapplyStyleConstraints()
+}
 var $1=this.subnodes
 if($1){
 var $2=0
@@ -548,7 +902,9 @@
 }
 }
 this.init()
+if(this.oninit.ready){
 this.oninit.sendEvent(this)
+}
 if(this.datapath&&this.datapath.__LZApplyDataOnInit){
 this.datapath.__LZApplyDataOnInit()
 }
@@ -562,9 +918,7 @@
 LzInstantiator.completeTrickle(this)
 }
 }
-},_ignoreAttribute:{toString:function(){
-return "_ignoreAttribute"
-}},__LZapplyArgs:function($1,$2){
+},__LZapplyArgs:function($1,$2){
 var $3={}
 var $4=[]
 var $5=null
@@ -573,7 +927,7 @@
 }
 var $6=this.setters
 for(var $7 in $1){
-if($3[$7]||$1[$7]===this._ignoreAttribute){
+if($3[$7]||$1[$7]===LzNode._ignoreAttribute){
 continue
 }
 $3[$7]=true
@@ -582,9 +936,11 @@
 if(!$2){
 var $8="on"+$7
 if($8 in this){
+if(this[$8].ready){
 this[$8].sendEvent($1[$7])
 }
 }
+}
 }else{
 if($6&&$6[$7]!=-1){
 if(this.earlySetters&&this.earlySetters[$7]){
@@ -636,6 +992,9 @@
 return this[this.getters[$1]]()
 }
 },setAttribute:function($1,$2){
+if(this.__LZdeleted){
+return
+}
 var $3=this.setters
 if($3&&$1 in $3){
 this[$3[$1]]($2)
@@ -646,9 +1005,11 @@
 this[$1]=$2
 var $4="on"+$1
 if($4 in this){
+if(this[$4].ready){
 this[$4].sendEvent($2)
 }
 }
+}
 },setProp:function($1,$2){
 this.setAttribute($1,$2)
 },getExpectedAttribute:function($1){
@@ -746,8 +1107,7 @@
 }
 },__LZstoreRefs:function($1,$2){
 for(var $3 in $1){
-var $4=this[$3]
-if($4==null&&!$4){
+if(!($3 in this)){
 this[$3]=null
 }
 }
@@ -817,16 +1177,16 @@
 this.__LZdelegates.push(LzDelegate.make(this,$6,$5,$1[$3]))
 }
 },applyConstraint:function($1,$2,$3){
-if($3.length){
+var $4=$3.length
+if($4){
 if(!this.__LZdelegates){
 this.__LZdelegates=[]
 }
-var $4="$cf"+this.$cfn++
-this[$4]=$2
-var $5=$3.length
+var $5="$cf"+this.$cfn++
+this[$5]=$2
 var $6
-for(var $7=0;$7<$5;$7+=2){
-var $8=LzDelegate.make(this,$4)
+for(var $7=0;$7<$4;$7+=2){
+var $8=LzDelegate.make(this,$5)
 this.__LZdelegates.push($8)
 $6=$3[$7]
 if($6){
@@ -870,11 +1230,18 @@
 
 }
 },setDatapath:function($1){
-if(null!=this.datapath){
+if(null!=this.datapath&&$1!=LzNode._ignoreAttribute){
 this.datapath.setXPath($1)
 }else{
 LzDatapath.make(this,{xpath:$1})
 }
+},setData:function($1){
+this.data=$1
+var $2=this.datapath!=null?this.datapath:LzDatapath.make(this)
+$2.setPointer($1)
+if(this.ondata.ready){
+this.ondata.sendEvent($1)
+}
 },__LZsetEvents:function($1){
 var $2=$1.length
 for(var $3=0;$3<$2;$3++){
@@ -942,10 +1309,15 @@
 }
 }
 return null
+},searchParents:function($1){
+var $2=this
+do{
+$2=$2.immediateparent
+if($2[$1]!=null){
+return $2
+}
+}while($2!=canvas)
 },getUID:function(){
-if(this.__LZUID==null){
-this.__LZUID="__U"+ ++LzNode.UIDs
-}
 return this.__LZUID
 },childOf:function($1){
 if($1==null){
@@ -964,7 +1336,9 @@
 return
 }
 this.__LZdeleted=true
+if(this.ondestroy.ready){
 this.ondestroy.sendEvent(this)
+}
 this.__LZinstantiationDone=null
 this.setters=null
 if(this.subnodes!=null){
@@ -1075,8 +1449,6 @@
 
 }
 this.makeChild($1,true)
-},constructWithArgs:function($1,$2){
-
 }},{tagname:"node",initialize:function($1){
 if(this.hasOwnProperty("tagname")){
 var $2=this.tagname
@@ -1091,7 +1463,9 @@
 $1[$3]=LzInheritedHash.make($1[$3])
 }
 }
-},UIDs:0});(function(){
+},_ignoreAttribute:{toString:function(){
+return "_ignoreAttribute"
+}},__UIDs:0});(function(){
 with(LzNode){
 with(LzNode.prototype){
 DeclareEvent(prototype,"oninit")
@@ -1135,7 +1509,6 @@
 }
 var $12=$11.prototype
 delete $5.name
-$12.addProperty("userclass",true)
 var $13
 if("classChildren" in $7.prototype&&$7.prototype.classChildren.length){
 $13=$7.prototype.classChildren.concat()
@@ -1143,7 +1516,6 @@
 $13=[]
 }
 if("children" in $3&&$3.children.length){
-LzFixTags($3)
 $13=$13.concat($3.children)
 }
 if("defaultplacement" in $5&&$5.defaultplacement!=null){
@@ -1218,7 +1590,7 @@
 if(!$22.hasOwnProperty("$refs")){
 $22.$refs=LzInheritedHash.make($23)
 }
-var $31=LzNode.prototype._ignoreAttribute
+var $31=LzNode._ignoreAttribute
 for(var $17 in $24){
 $22.$refs[$17]=$31
 }
@@ -1229,7 +1601,7 @@
 $1.defaultplacement=$2
 }
 var LzDelegate=Class.make("LzDelegate",null,{initialize:function($1,$2,$3,$4){
-this.nextMethod(arguments.callee,"initialize").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
 this.c=$1
 this.f=$2
 if($3!=null){
@@ -1273,7 +1645,8 @@
 this[$3]=null
 }
 this.lastevent=0
-for(var $3=0;$3<$2.length;$3++){
+var $5=$2.length
+for(var $3=0;$3<$5;$3++){
 this[this.lastevent++]=$2[$3]
 }
 },disable:function(){
@@ -1289,13 +1662,15 @@
 while($4<$3){
 var $5=$2[$4]
 var $6=$2[$4+1]
+if($5.c[$5.f]){
 $5.c[$5.f]($6)
+}
 $4+=2
 }
 $2.length=$1
 }})
 var LzEvent=Class.make("LzEvent",null,{initialize:function($1,$2,$3){
-this.nextMethod(arguments.callee,"initialize").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
 var $4=$1._events
 if($4==null){
 $1._events=[this]
@@ -1305,10 +1680,12 @@
 $1[$2]=this
 if($3){
 this.delegateList=[$3]
+this.ready=true
 }else{
 this.delegateList=[]
 }
-},locked:false,addDelegate:function($1){
+},locked:false,ready:false,addDelegate:function($1){
+this.ready=true
 this.delegateList.push($1)
 },sendEvent:function($1){
 if(this.locked){
@@ -1329,14 +1706,15 @@
 $4.push($5)
 if($5.enabled&&$5.c){
 if($5.c.__LZdeferDelegates){
-$6[$6.length]=$5
-$6[$6.length]=$1
+$6.push($5,$1)
 }else{
+if($5.c[$5.f]){
 $5.c[$5.f]($1)
 }
 }
 }
 }
+}
 while($5=$4.pop()){
 $5.event_called=false
 }
@@ -1350,13 +1728,13 @@
 }
 }
 if(this.delegateList.length==0){
-this.hasNoDelegates=true
+this.ready=false
 }
 },clearDelegates:function(){
 while(this.delegateList.length){
 this.delegateList[0].unregisterFrom(this)
 }
-this.hasNoDelegates=true
+this.ready=false
 },getDelegateCount:function(){
 return this.delegateList.length
 },toString:function(){
@@ -1408,7 +1786,24 @@
 }
 delete $1.__callbacks
 }
-}},color:{hextoint:function($1){
+}},dectohex:function($1,$2){
+if(typeof $1=="number"){
+var $3="0123456789ABCDEF"
+var $4=$3.substr($1&15,1)
+while($1>15){
+$1>>=4
+$4=$3.substr($1&15,1)+$4
+}
+var $2=$2-$4.length
+while($2>0){
+$4="0"+$4
+$2--
+}
+return $4
+}else{
+return $1
+}
+},color:{hextoint:function($1){
 if(typeof $1!="string"){
 return $1
 }
@@ -1433,19 +1828,9 @@
 $1=$1*1
 }
 if(typeof $1=="number"){
-var $2="0123456789ABCDEF"
-var $3=$2.substr($1&15,1)
-while($1>15){
-$1>>=4
-$3=$2.substr($1&15,1)+$3
+var $2=LzUtils.dectohex($1,6)
+$1="#"+$2
 }
-var $4=6-$3.length
-while($4>0){
-$3="0"+$3
-$4--
-}
-$1="#"+$3
-}
 return $1
 },torgb:function($1){
 if(typeof $1=="number"){
@@ -1459,6 +1844,14 @@
 }
 return "rgb("+parseInt($1.substring(1,3),16)+","+parseInt($1.substring(3,5),16)+","+parseInt($1.substring(5,7),16)+($1.length>7?","+parseInt($1.substring(7,9),16):"")+")"
 }}}
+var LzLibraryCleanup=Class.make("LzLibraryCleanup",LzNode,{initialize:function($1,$2){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
+var $3=LzLibrary.findLibrary($2.libname)
+$3.loading=false
+if($3.onload.ready){
+$3.onload.sendEvent(true)
+}
+}},{tagname:"__libraryloadercomplete"})
 var LzResourceLibrary={}
 var getTimer=function(){
 return(new Date()).valueOf()-getTimer.startTime
@@ -1659,7 +2052,7 @@
 document.onmousedown=LzMouseKernel.__mouseEvent
 document.onmouseup=LzMouseKernel.__mouseEvent
 document.oncontextmenu=LzMouseKernel.__mouseEvent
-},showHandCursor:function($1){
+},__showhand:"pointer",showHandCursor:function($1){
 var $2=$1==true?"pointer":"default"
 this.__showhand=$2
 LzMouseKernel.setCursorGlobal($2)
@@ -1703,7 +2096,7 @@
 if($4.height){
 $3.style.height=$4.height
 }
-if($4.width&&$4.width.indexOf("%")==-1&&$4.height&&$4.height.indexOf("%")==-1){
+if(this.quirks.canvas_div_cannot_be_clipped==false&&$4.width&&$4.width.indexOf("%")==-1&&$4.height&&$4.height.indexOf("%")==-1){
 $3.style.clip="rect(0px "+$4.width+" "+$4.height+" 0px)"
 $3.style.overflow="hidden"
 }
@@ -1758,57 +2151,71 @@
 }}
 LzSprite.prototype.__defaultStyles["#lzcontextmenu a"]={color:"#000",display:"block",textDecoration:"none"}
 LzSprite.prototype.__defaultStyles["#lzcontextmenu a:hover"]={color:"#FFF",backgroundColor:"#333"}
-LzSprite.prototype.__defaultStyles["#lzcontextmenu"]={position:"absolute",zIndex:10000000,backgroundColor:"#CCC",border:"2px outset #999",padding:"4px",fontFamily:"Verdana,Vera,sans-serif",fontSize:"14px",margin:"2px",color:"#999"}
+LzSprite.prototype.__defaultStyles["#lzcontextmenu"]={position:"absolute",zIndex:10000000,backgroundColor:"#CCC",border:"1px outset #999",padding:"4px",fontFamily:"Verdana,Vera,sans-serif",fontSize:"13px",margin:"2px",color:"#999"}
 LzSprite.prototype.uid=0
-LzSprite.prototype.quirks={fix_clickable:true,fix_ie_background_height:false,fix_ie_clickable:false,ie_alpha_image_loader:false,ie_leak_prevention:false,invisible_parent_image_sizing_fix:false,emulate_flash_font_metrics:true,inner_html_strips_newlines:true,inner_html_no_entity_apos:false,css_hide_canvas_during_init:true,firefox_autocomplete_bug:false,hand_pointer_for_clickable:true,alt_key_sends_control:false,safari_textarea_subtract_scrollbar_height:false,safari_avoid_clip_position_input_text:false,reverse_mouse_wheel:false,no_cursor_colresize:false,safari_visibility_instead_of_display:false,preload_images_only_once:false,absolute_position_accounts_for_offset:false}
-LzSprite.prototype.capabilities={rotation:false,scalecanvastopercentage:true,opacity:true,colortransform:false,audio:false,accessibility:false}
+LzSprite.prototype.quirks={fix_clickable:true,fix_ie_background_height:false,fix_ie_clickable:false,ie_alpha_image_loader:false,ie_leak_prevention:false,invisible_parent_image_sizing_fix:false,emulate_flash_font_metrics:true,inner_html_strips_newlines:true,inner_html_no_entity_apos:false,css_hide_canvas_during_init:true,firefox_autocomplete_bug:false,hand_pointer_for_clickable:true,alt_key_sends_control:false,safari_textarea_subtract_scrollbar_height:false,safari_avoid_clip_position_input_text:false,reverse_mouse_wheel:false,no_cursor_colresize:false,safari_visibility_instead_of_display:false,preload_images_only_once:false,absolute_position_accounts_for_offset:false,canvas_div_cannot_be_clipped:false,inputtext_parents_cannot_contain_clip:false,minimize_opacity_changes:false,set_height_for_multiline_inputtext:false,ie_offset_position_by_2:false}
+LzSprite.prototype.capabilities={rotation:false,scalecanvastopercentage:true,opacity:true,colortransform:false,audio:false,accessibility:false,htmlinputtext:false,advancedfonts:false}
+LzSprite.prototype.__updateQuirks=function(){
 if(window["Lz"]&&Lz.__BrowserDetect){
 Lz.__BrowserDetect.init()
-if(LzSprite.prototype.quirks["inner_html_strips_newlines"]==true){
+if(this.quirks["inner_html_strips_newlines"]==true){
 LzSprite.prototype.inner_html_strips_newlines_re=RegExp("$","mg")
 }
-if(Lz.__BrowserDetect.browser=="Explorer"){
-LzSprite.prototype.quirks["ie_alpha_image_loader"]=true
-LzSprite.prototype.quirks["ie_leak_prevention"]=true
-LzSprite.prototype.quirks["fix_ie_clickable"]=true
-LzSprite.prototype.quirks["fix_ie_background_height"]=true
-LzSprite.prototype.quirks["inner_html_no_entity_apos"]=true
+if(Lz.__BrowserDetect.isIE){
+this.quirks["ie_alpha_image_loader"]=true
+this.quirks["ie_leak_prevention"]=true
+this.quirks["fix_ie_clickable"]=true
+this.quirks["fix_ie_background_height"]=true
+this.quirks["inner_html_no_entity_apos"]=true
+this.quirks["inputtext_parents_cannot_contain_clip"]=true
+this.quirks["minimize_opacity_changes"]=true
+this.quirks["set_height_for_multiline_inputtext"]=true
+if(Lz.__BrowserDetect.version>6){
+this.quirks["ie_offset_position_by_2"]=true
 }
-if(Lz.__BrowserDetect.browser=="Safari"){
-LzSprite.prototype.quirks["invisible_parent_image_sizing_fix"]=true
-LzSprite.prototype.quirks["alt_key_sends_control"]=true
-LzSprite.prototype.quirks["safari_textarea_subtract_scrollbar_height"]=true
-LzSprite.prototype.quirks["safari_avoid_clip_position_input_text"]=true
-LzSprite.prototype.quirks["safari_visibility_instead_of_display"]=true
-LzSprite.prototype.quirks["absolute_position_accounts_for_offset"]=true
+}else{
+if(Lz.__BrowserDetect.isSafari){
+this.quirks["invisible_parent_image_sizing_fix"]=true
+this.quirks["alt_key_sends_control"]=true
+this.quirks["safari_textarea_subtract_scrollbar_height"]=true
+this.quirks["safari_avoid_clip_position_input_text"]=true
+this.quirks["safari_visibility_instead_of_display"]=true
+this.quirks["absolute_position_accounts_for_offset"]=true
+this.quirks["canvas_div_cannot_be_clipped"]=true
+}else{
+if(Lz.__BrowserDetect.isOpera){
+this.quirks["invisible_parent_image_sizing_fix"]=true
+this.quirks["reverse_mouse_wheel"]=true
+this.quirks["no_cursor_colresize"]=true
+this.quirks["absolute_position_accounts_for_offset"]=true
+this.quirks["canvas_div_cannot_be_clipped"]=true
+}else{
+if(Lz.__BrowserDetect.isFirefox&&Lz.__BrowserDetect.version<2){
+this.quirks["firefox_autocomplete_bug"]=true
 }
-if(Lz.__BrowserDetect.browser=="Opera"){
-LzSprite.prototype.quirks["invisible_parent_image_sizing_fix"]=true
-LzSprite.prototype.quirks["reverse_mouse_wheel"]=true
-LzSprite.prototype.quirks["no_cursor_colresize"]=true
-LzSprite.prototype.quirks["absolute_position_accounts_for_offset"]=true
 }
-if(Lz.__BrowserDetect.browser=="Firefox"&&Lz.__BrowserDetect.version<2){
-LzSprite.prototype.quirks["firefox_autocomplete_bug"]=true
 }
 }
-if(LzSprite.prototype.quirks["safari_avoid_clip_position_input_text"]){
-LzSprite.prototype.__defaultStyles.lzswfinputtext.marginTop="0px"
-LzSprite.prototype.__defaultStyles.lzswfinputtext.marginLeft="0px"
-LzSprite.prototype.__defaultStyles.lzswfinputtextmultiline.marginTop="0px"
-LzSprite.prototype.__defaultStyles.lzswfinputtextmultiline.marginLeft="0px"
 }
-if(LzSprite.prototype.quirks["css_hide_canvas_during_init"]){
-if(LzSprite.prototype.quirks["safari_visibility_instead_of_display"]){
+if(this.quirks["safari_avoid_clip_position_input_text"]){
+LzSprite.prototype.__defaultStyles.lzswfinputtext.marginTop="-2px"
+LzSprite.prototype.__defaultStyles.lzswfinputtext.marginLeft="-2px"
+LzSprite.prototype.__defaultStyles.lzswfinputtextmultiline.marginTop="-2px"
+LzSprite.prototype.__defaultStyles.lzswfinputtextmultiline.marginLeft="-2px"
+}
+if(this.quirks["css_hide_canvas_during_init"]){
+if(this.quirks["safari_visibility_instead_of_display"]){
 LzSprite.prototype.__defaultStyles.lzcanvasdiv.visibility="hidden"
 }else{
 LzSprite.prototype.__defaultStyles.lzcanvasdiv.display="none"
 }
 LzSprite.prototype.__defaultStyles.lzcanvasclickdiv.display="none"
 }
-if(LzSprite.prototype.quirks["hand_pointer_for_clickable"]){
+if(this.quirks["hand_pointer_for_clickable"]){
 LzSprite.prototype.__defaultStyles.lzclickdiv.cursor="pointer"
 }
+}
+LzSprite.prototype.__updateQuirks()
 LzSprite.prototype.__defaultStyles.writeCSS()
 LzSprite.prototype.__LZdiv=null
 LzSprite.prototype.__LZimg=null
@@ -2109,17 +2516,24 @@
 }
 this.__poscachedirty=true
 this.x=$1
-this.__LZdiv.style.left=this.CSSDimension($1)
+$1=this.CSSDimension($1)
+if(this._x!=$1){
+this._x=$1
+this.__LZdiv.style.left=$1
 if(this.quirks.fix_clickable){
-this.__LZclickdiv.style.left=this.__LZdiv.style.left
+this.__LZclickdiv.style.left=$1
 }
 }
+}
 LzSprite.prototype.setWidth=function($1){
 if($1==null||$1<0||isNaN($1)||this.width==$1){
 return
 }
 this.width=$1
-this.__LZdiv.style.width=this.CSSDimension($1)
+$1=this.CSSDimension($1)
+if(this._w!=$1){
+this._w=$1
+this.__LZdiv.style.width=$1
 if(this.clip){
 this.__updateClip()
 }
@@ -2127,26 +2541,34 @@
 this.__updateStretches()
 }
 if(this.__LZclick){
-this.__LZclick.style.width=this.__LZdiv.style.width
+this.__LZclick.style.width=$1
 }
 }
+}
 LzSprite.prototype.setY=function($1){
 if($1==null||$1==this.y||isNaN($1)){
 return
 }
 this.__poscachedirty=true
 this.y=$1
-this.__LZdiv.style.top=this.CSSDimension($1)
+$1=this.CSSDimension($1)
+if(this._y!=$1){
+this._y=$1
+this.__LZdiv.style.top=$1
 if(this.quirks.fix_clickable){
-this.__LZclickdiv.style.top=this.__LZdiv.style.top
+this.__LZclickdiv.style.top=$1
 }
 }
+}
 LzSprite.prototype.setHeight=function($1){
 if($1==null||$1<0||isNaN($1)||this.height==$1){
 return
 }
 this.height=$1
-this.__LZdiv.style.height=this.CSSDimension($1)
+$1=this.CSSDimension($1)
+if(this._h!=$1){
+this._h=$1
+this.__LZdiv.style.height=$1
 if(this.clip){
 this.__updateClip()
 }
@@ -2154,9 +2576,10 @@
 this.__updateStretches()
 }
 if(this.__LZclick){
-this.__LZclick.style.height=this.__LZdiv.style.height
+this.__LZclick.style.height=$1
 }
 }
+}
 LzSprite.prototype.setMaxLength=function($1){
 
 }
@@ -2192,7 +2615,7 @@
 return
 }
 this.bgcolor=$1
-this.__LZdiv.style.backgroundColor=LzUtils.color.inttohex($1)
+this.__LZdiv.style.backgroundColor=$1==null?"transparent":LzUtils.color.inttohex($1)
 if(this.quirks.fix_ie_background_height){
 if(this.height!=null&&this.height<2){
 this.setSource(LzSprite.prototype.blankimage,true)
@@ -2278,17 +2701,16 @@
 }
 LzSprite.prototype.__findParents=function($1){
 var $2=[]
-var $3=this.owner
+var $3=this
 if($3[$1]!=null){
-$2.push($3.sprite)
+$2.push($3)
 }
 do{
-var $4=$3
-var $3=$3.searchParents($1)
-if($3){
-$2.push($3.sprite)
+$3=$3.__parent
+if($3[$1]!=null){
+$2.push($3)
 }
-}while($3!=LzSprite.__rootSprite.owner)
+}while($3!=LzSprite.__rootSprite)
 return $2
 }
 LzSprite.prototype.__imgonload=function($1){
@@ -2441,9 +2863,10 @@
 }
 LzSprite.prototype.__updateClip=function(){
 if(this.clip&&this.width!=null&&this.width>=0&&this.height!=null&&this.height>=0){
-this.__LZdiv.style.clip="rect(0px "+this.CSSDimension(this.width)+" "+this.CSSDimension(this.height)+" 0px)"
+var $1="rect(0px "+this._w+" "+this._h+" 0px)"
+this.__LZdiv.style.clip=$1
 if(this.quirks.fix_clickable){
-this.__LZclickdiv.style.clip="rect(0px "+this.CSSDimension(this.width)+" "+this.CSSDimension(this.height)+" 0px)"
+this.__LZclickdiv.style.clip=$1
 }
 }else{
 if(this.__LZdiv.style.clip){
@@ -2534,22 +2957,15 @@
 this.__ImgPool=null
 this.destroyed=true
 }
-LzSprite.prototype.getMouse=function($1){
-var $2=this.__getPos()
+LzSprite.prototype.getMouse=function(){
+var $1=this.__getPos()
 if(this.isroot){
-if($1=="x"){
-return LzMouseKernel.__x-$2.x
+return {x:LzMouseKernel.__x-$1.x,y:LzMouseKernel.__y-$1.y}
 }else{
-return LzMouseKernel.__y-$2.y
+var $2=LzSprite.__rootSprite.getMouse()
+return {x:$2.x-$1.x,y:$2.y-$1.y}
 }
-}else{
-if($1=="x"){
-return LzSprite.__rootSprite.getMouse("x")-$2.x
-}else{
-return LzSprite.__rootSprite.getMouse("y")-$2.y
 }
-}
-}
 LzSprite.prototype.__poscache=null
 LzSprite.prototype.__poscachedirty=true
 LzSprite.prototype.__getPos=function(){
@@ -2569,10 +2985,14 @@
 var $4=null
 var $5={}
 var $6
-if($3.getBoundingClientRect){
+if(Lz.__BrowserDetect.isIE){
 $6=$3.getBoundingClientRect()
 var $7=document.documentElement.scrollTop||document.body.scrollTop
 var $8=document.documentElement.scrollLeft||document.body.scrollLeft
+if(this.quirks["ie_offset_position_by_2"]){
+$8-=2
+$7-=2
+}
 return {x:$6.left+$8,y:$6.top+$7}
 }else{
 if(document.getBoxObjectFor){
@@ -2608,8 +3028,10 @@
 }
 }
 var $2=this
-while($2!=this.__rootSprite){
+while($2&&$2!=this.__rootSprite){
+if($2.__parent){
 $2.__poscachedirty=false
+}
 $2=$2.__parent
 }
 this.__poscache=$5
@@ -2794,6 +3216,9 @@
 LzSprite.prototype.setContextMenu=function($1){
 this.__contextmenu=$1
 }
+LzSprite.prototype.getContextMenu=function(){
+return this.__contextmenu
+}
 if(LzSprite.prototype.quirks.ie_leak_prevention){
 LzSprite.prototype.__sprites={}
 function __cleanUpForIE(){
@@ -2822,6 +3247,42 @@
 }
 window.onbeforeunload=__cleanUpForIE
 }
+var LzLibrary=Class.make("LzLibrary",LzNode,{construct:function($1,$2){
+this.stage=$2.stage;(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
+this.sprite=LzSprite.make(this,false,$2)
+LzLibrary.libraries[$2.name]=this
+},init:function(){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).apply(this,arguments)
+if(this.stage=="late"){
+this.load()
+}
+},loaded:false,loading:false,toString:function(){
+return "Library "+this.href+" named "+this.name
+},load:function(){
+Lz.__dhtmlLoadLibrary(this.href)
+}},{tagname:"import",libraries:[],findLibrary:function($1){
+return LzLibrary.libraries[$1]
+},__LZsnippetLoaded:function($1){
+var $2=null
+var $3=LzLibrary.libraries
+for(var $4 in $3){
+if($3[$4].href==$1){
+$2=$3[$4].name
+break
+}
+}
+if($2==null){
+Debug.error("could not find library with href",$1)
+}
+LzInstantiateView({attrs:{libname:$2},name:"__libraryloadercomplete"},1)
+canvas.initDone()
+}});(function(){
+with(LzLibrary){
+with(LzLibrary.prototype){
+DeclareEvent(prototype,"onload")
+}
+}
+})()
 var LzTextSprite=function($1){
 if($1==null){
 return
@@ -3029,6 +3490,7 @@
 }else{
 var $3="position: absolute"
 $3+=";visibility: hidden"
+$3+=";top: 4000px"
 $3+=";font-size: "+this._fontSize
 $3+=";font-style: "+this._fontStyle
 $3+=";font-weight: "+this._fontWeight
@@ -3158,23 +3620,28 @@
 }
 LzTextSprite.prototype.__setWidth=LzSprite.prototype.setWidth
 LzTextSprite.prototype.setWidth=function($1){
-if($1>0){
-var $2=this.CSSDimension($1-this.__wpadding)
+if($1==null||$1<0||isNaN($1)||this.width==$1){
+return
+}
+var $2=this.CSSDimension($1>=this.__wpadding?$1-this.__wpadding:0)
 this.__LZtextdiv.style.width=$2
-this.__LZtextdiv.style.clip="rect(0px "+$2+" "+this.CSSDimension(this.height-this.__hpadding)+" 0px)"
-}
+this.__LZtextdiv.style.clip="rect(0px "+$2+" "+this.CSSDimension(this.height>=this.__hpadding?this.height-this.__hpadding:0)+" 0px)"
 this.__setWidth($1)
 this._styledirty=true
 }
 LzTextSprite.prototype.__setHeight=LzSprite.prototype.setHeight
 LzTextSprite.prototype.setHeight=function($1){
-if($1>0){
-var $2=this.CSSDimension($1-this.__hpadding)
+if($1==null||$1<0||isNaN($1)||this.height==$1){
+return
+}
+var $2=this.CSSDimension($1>=this.__hpadding?$1-this.__hpadding:0)
 this.__LZtextdiv.style.height=$2
-this.__LZtextdiv.style.clip="rect(0px "+this.CSSDimension(this.width-this.__wpadding)+" "+$2+" 0px)"
-}
+this.__LZtextdiv.style.clip="rect(0px "+this.CSSDimension(this.width>=this.__wpadding?this.width-this.__wpadding:0)+" "+$2+" 0px)"
 this.__setHeight($1)
+if(this.multiline){
+this._styledirty=true
 }
+}
 document.onselectstart=function(){
 return false
 }
@@ -3264,6 +3731,21 @@
 LzInputTextSprite.prototype.__lastshown=this
 this.__shown=true
 this.__LzInputDiv=this.__LZdiv.removeChild(this.__LzInputDiv)
+if(this.quirks["inputtext_parents_cannot_contain_clip"]){
+var $1=this.__findParents("clip")
+var $2=$1.length
+if($2>1){
+if(this._shownclipvals==null){
+this._shownclipvals=[]
+this._shownclippedsprites=$1
+for(var $3=0;$3<$2;$3++){
+var $4=$1[$3]
+this._shownclipvals[$3]=$4.__LZclickdiv.style.clip
+$4.__LZclickdiv.style.clip="rect(auto auto auto auto)"
+}
+}
+}
+}
 if(this.quirks.fix_ie_clickable){
 this.__LZclickdiv.appendChild(this.__LzInputDiv)
 this.__setCSSClassProperty(".lzclickdiv","display","none")
@@ -3285,6 +3767,16 @@
 }
 LzInputTextSprite.prototype.__lastshown=null
 this.__shown=false
+if(this.quirks["inputtext_parents_cannot_contain_clip"]){
+if(this._shownclipvals!=null){
+for(var $1=0;$1<this._shownclipvals.length;$1++){
+var $2=this._shownclippedsprites[$1]
+$2.__LZclickdiv.style.clip=this._shownclipvals[$1]
+}
+this._shownclipvals=null
+this._shownclippedsprites=null
+}
+}
 if(this.quirks.fix_ie_clickable){
 this.__setCSSClassProperty(".lzclickdiv","display","")
 this.__LzInputDiv=this.__LZclickdiv.removeChild(this.__LzInputDiv)
@@ -3382,8 +3874,15 @@
 }
 if(this.owner){
 this.owner.inputtextevent($2,$3)
+if($2=="onkeydown"||$2=="onkeyup"){
+var $4=this.__LzInputDiv.value
+if($4!=this.text){
+this.text=$4
+this.owner.inputtextevent("onchange",$4)
 }
 }
+}
+}
 LzInputTextSprite.prototype.setEnabled=function($1){
 this.disabled=!$1
 this.__LzInputDiv.disabled=this.disabled
@@ -3397,7 +3896,9 @@
 LzInputTextSprite.prototype.select=function($1,$2){
 this._cancelblur=true
 this.__show()
-this.__LzInputDiv.select()
+this.__LzInputDiv.focus()
+LzInputTextSprite.__lastfocus=this
+setTimeout("LzInputTextSprite.__lastfocus.__LzInputDiv.select()",50)
 if(window["LzKeyboardKernel"]){
 LzKeyboardKernel.__cancelKeys=false
 }
@@ -3446,6 +3947,9 @@
 }
 }
 LzInputTextSprite.prototype.setWidth=function($1){
+if($1==null||$1<0||isNaN($1)||this.width==$1){
+return
+}
 this.__setWidth($1-this.____wpadding)
 if(this.quirks.fix_clickable){
 var $1=this.CSSDimension(this.width)
@@ -3454,13 +3958,19 @@
 }
 }
 LzInputTextSprite.prototype.setHeight=function($1){
+if($1==null||$1<0||isNaN($1)||this.height==$1){
+return
+}
 this.__setHeight($1)
 if(this.quirks.fix_clickable){
 var $1=this.CSSDimension(this.height)
 this.__LZclickdiv.style.height=$1
 this.__LZinputclickdiv.style.height=$1
+if(this.multiline&&this.quirks.set_height_for_multiline_inputtext){
+this.__LzInputDiv.style.height=this.CSSDimension(this.height-this.____hpadding*2)
 }
 }
+}
 LzInputTextSprite.prototype.setColor=function($1){
 if(this.color==$1){
 return
@@ -3541,61 +4051,74 @@
 }
 var LzXMLTranslator=(new Object)
 LzXMLTranslator.copyXML=function($1,$2,$3){
-var $4=LzXMLTranslator.copyBrowserXML($1,true,$2)
+var $4=LzXMLTranslator.copyBrowserXML($1,true,$2,$3)
 return $4
 }
 LzXMLTranslator.whitespacePat=(new RegExp("^[\t\n\r ]*$"))
 LzXMLTranslator.stringTrimPat=(new RegExp("(^[\t\n\r ]*|[\t\n\r ]*$)","g"))
 LzXMLTranslator.slashPat=(new RegExp("/","g"))
-LzXMLTranslator.copyBrowserXML=function($1,$2,$3){
+LzXMLTranslator.copyBrowserXML=function($1,$2,$3,$4){
 if(!$1){
 return $1
 }
-var $4=$1.nodeValue
-var $5=null
+var $5=$1.nodeValue
+var $6=null
 if($1.nodeType==3||$1.nodeType==4){
-if($2&&LzXMLTranslator.whitespacePat.test($4)){
+if($2&&LzXMLTranslator.whitespacePat.test($5)){
 return null
 }
 if($3){
-var $6=$4
-$4=$4.replace(LzXMLTranslator.stringTrimPat,"")
+var $7=$5
+$5=$5.replace(LzXMLTranslator.stringTrimPat,"")
 }
-$5=LzDataText.make($4)
-return $5
+$6=LzDataText.make($5)
+return $6
 }else{
 if($1.nodeType==1||$1.nodeType==9){
-var $7=$1.attributes
-var $8={}
-if($7){
-for(var $9=0;$9<$7.length;$9++){
-var $10=$7.item($9)
-if($10){
-var $11=$10.name
-var $12=$10.value
-$8[$11]=$12
+var $8=$1.attributes
+var $9={}
+if($8){
+for(var $10=0;$10<$8.length;$10++){
+var $11=$8.item($10)
+if($11){
+var $12=$11.name
+var $13=$11.value
+var $14=$12
+if(!$4){
+var $15=$12.indexOf(":")
+if($15>=0){
+$14=$12.substring($15+1)
 }
 }
+$9[$14]=$13
 }
-$5=LzDataElement.make($1.nodeName,$8)
-var $13=$1.childNodes
-var $14=[]
-for(var $15=0;$15<$13.length;$15++){
-var $16=$13[$15]
-var $17=LzXMLTranslator.copyBrowserXML($16,$2,$3)
-if($17!=null){
-$14.push($17)
 }
 }
-$5.setChildNodes($14)
-return $5
+var $16=$1.nodeName
+if($16&&!$4){
+var $17=$16.indexOf(":")
+if($17>=0){
+$16=$16.substring($17+1)
+}
+}
+$6=LzDataElement.make($16,$9)
+var $18=$1.childNodes
+var $19=[]
+for(var $20=0;$20<$18.length;$20++){
+var $21=$18[$20]
+var $22=LzXMLTranslator.copyBrowserXML($21,$2,$3,$4)
+if($22!=null){
+$19.push($22)
+}
+}
+$6.setChildNodes($19)
+return $6
 }else{
 return null
 }
 }
 }
-var LzHTTPLoader=function($1,$2,$3){
-this.dataset=$3
+var LzHTTPLoader=function($1,$2){
 this.owner=$1
 this.options={parsexml:true}
 this.requestheaders={}
@@ -3643,7 +4166,7 @@
 this.querystring=$1
 }
 LzHTTPLoader.prototype.setQueueing=function($1){
-
+this.setOption("queuing",$1)
 }
 LzHTTPLoader.prototype.getResponseHeader=function($1){
 return this.req.getResponseHeader($1)
@@ -3659,7 +4182,7 @@
 }
 LzHTTPLoader.prototype.makeProxiedURL=function($1,$2,$3,$4){
 var $5=LzBrowser.getBaseURL()
-var $6={lzt:$3!=null?$3:"xmldata",reqtype:$2,sendheaders:this.options.sendheaders,trimwhitespace:this.options.trimwhitespace,nsprefix:this.options.trimwhitespace,url:LzBrowser.toAbsoluteURL($1,this.secure),timeout:this.timeout,cache:this.options.cacheable,ccache:this.options.ccache}
+var $6={lzt:$3!=null?$3:"xmldata",reqtype:$2,sendheaders:this.options.sendheaders,trimwhitespace:this.options.trimwhitespace,nsprefix:this.options.nsprefix,url:LzBrowser.toAbsoluteURL($1,this.secure),timeout:this.timeout,cache:this.options.cacheable,ccache:this.options.ccache}
 var $7
 var $8=""
 if($4!=null){
@@ -3678,7 +4201,7 @@
 for(var $10 in $6){
 var $11=$6[$10]
 if(typeof $11=="string"){
-$11=escape($11)
+$11=encodeURIComponent($11)
 $11=$11.replace(LzDataset.slashPat,"%2F")
 }
 $5+=$9+$10+"="+$11
@@ -3690,7 +4213,7 @@
 this.loadXMLDoc(this.requestmethod,this.requesturl,this.requestheaders,$1,true,true)
 }
 LzHTTPLoader.activeRequests=[]
-LzHTTPLoader.prototype.timeout=30*1000
+LzHTTPLoader.prototype.timeout=Infinity
 LzHTTPLoader.prototype.setTimeout=function($1){
 this.timeout=$1
 }
@@ -3827,7 +4350,9 @@
 $1.setAttribute("style","display: none")
 document.body.appendChild($1)
 }
+if(this.onmenuopen.ready){
 this.onmenuopen.sendEvent(this)
+}
 var $2=""
 for(var $3=0;$3<this.items.length;$3++){
 var $4=this.items[$3].cmenuitem
@@ -3887,7 +4412,9 @@
 },setDelegate:function($1){
 this._delegate=$1
 },__select:function(){
+if(this.onselect.ready){
 this.onselect.sendEvent(this)
+}
 if(this._delegate!=null){
 if(this._delegate instanceof LzDelegate){
 this._delegate.execute(this)
@@ -3914,8 +4441,8 @@
 }
 }
 })()
-var LzView=Class.make("LzView",LzNode,{construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").call(this,$1?$1:canvas,$2)
+var LzView=Class.make("LzView",LzNode,{DOUBLE_CLICK_TIME:500,construct:function($1,$2){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).call(this,$1?$1:canvas,$2)
 var $3=this.immediateparent
 this.mask=$3.mask
 this.__makeSprite($2)
@@ -3930,7 +4457,7 @@
 var $4=null
 if("resource" in $2&&$2["resource"]!=null){
 $4=$2.resource
-$2.resource=this._ignoreAttribute
+$2.resource=LzNode._ignoreAttribute
 }
 if("clip" in $2&&$2["clip"]){
 if(this.sprite){
@@ -3971,11 +4498,12 @@
 if(this.__LZcheckheight){
 this.__LZcheckheightFunction($1)
 }
+if(this.onaddsubview.ready){
 this.onaddsubview.sendEvent($1)
+}
 },__LZinstantiationDone:function(){
-this.immediateparent.addSubview(this)
-this.nextMethod(arguments.callee,"__LZinstantiationDone").apply(this,arguments)
-},mask:null,focusable:false,focustrap:null,fontstyle:null,fontsize:null,sprite:null,visible:true,__LZvisibleSet:null,__LZvizO:true,__LZvizDat:true,__LZvizLoad:true,opacity:1,bgcolor:null,x:0,y:0,rotation:0,width:0,height:0,unstretchedwidth:0,unstretchedheight:0,subviews:[],__LZclickregion:"LzMouseEvents",xoffset:0,yoffset:0,__LZrsin:0,__LZrcos:1,__LZcaloffset:false,_xscale:1,_yscale:1,totalframes:0,frame:0,loadperc:0,framesloadratio:0,loadratio:0,hassetheight:false,hassetwidth:false,__LZisView:true,addedToParent:null,checkPlayStatusDel:null,masked:false,pixellock:null,setButtonSize:null,showhandcursor:null,updatePlayDel:null,resource:null,resourcewidth:null,resourceheight:null,__LZbgColorO:null,__LZbgRef:null,__LZbuttonRef:null,__LZcheckwidth:true,__LZcheckheight:true,__LZhasoffset:null,__LZisBackgrounded:null,__LZmaskClip:null,__LZmovieClipRef:null,__LZoutlieheight:null,__LZoutliewidth:null,__LZsubUniqueNum:null,setLayout:function($1){
+this.immediateparent.addSubview(this);(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZinstantiationDone"]:this.nextMethod(arguments.callee,"__LZinstantiationDone")).apply(this,arguments)
+},mask:null,focusable:false,focustrap:null,fontstyle:null,fontsize:null,sprite:null,visible:true,visibility:"collapse",__LZvizO:true,__LZvizDat:true,__LZvizLoad:true,opacity:1,bgcolor:null,x:0,y:0,rotation:0,width:0,height:0,unstretchedwidth:0,unstretchedheight:0,subviews:[],__LZclickregion:"LzMouseEvents",xoffset:0,yoffset:0,__LZrsin:0,__LZrcos:1,__LZcaloffset:false,_xscale:1,_yscale:1,totalframes:0,frame:0,loadperc:0,framesloadratio:0,loadratio:0,hassetheight:false,hassetwidth:false,__LZisView:true,addedToParent:null,checkPlayStatusDel:null,masked:false,pixellock:null,setButtonSize:null,clickable:false,showhandcursor:null,updatePlayDel:null,resource:null,resourcewidth:null,resourceheight:null,__LZbgColorO:null,__LZbgRef:null,__LZbuttonRef:null,__LZcheckwidth:true,__LZcheckheight:true,__LZhasoffset:null,__LZisBackgrounded:null,__LZmaskClip:null,__LZmovieClipRef:null,__LZoutlieheight:null,__LZoutliewidth:null,__LZsubUniqueNum:null,setLayout:function($1){
 if(!this.isinited){
 this.__LZstoreAttr($1,"layout")
 return
@@ -4023,14 +4551,6 @@
 }
 }
 return null
-},searchParents:function($1){
-var $2=this
-do{
-$2=$2.immediateparent
-if($2[$1]!=null){
-return $2
-}
-}while($2!=canvas)
 },searchimmediateparents:function($1){
 return this.searchParents($1)
 },layouts:null,releaseLayouts:function(){
@@ -4040,23 +4560,33 @@
 }
 }
 },setResource:function($1){
+if($1==null||$1==this._resource){
+return
+}
 if($1!="empty"){
 this.sprite.setResource($1)
 }
 this.__LZhaser=$1=="empty"
 this.resource=$1
+if(this.onresource.ready){
 this.onresource.sendEvent($1)
+}
+this._resource=this.resource
 return this.sprite.__LZmovieClipRef
 },resourceload:function($1){
 if("resource" in $1){
 this.resource=$1.resource
+if(this.onresource.ready){
 this.onresource.sendEvent($1.resource)
 }
+}
 if(this.resourcewidth!=$1.width){
 if("width" in $1){
 this.resourcewidth=$1.width
+if(this.onresourcewidth.ready){
 this.onresourcewidth.sendEvent($1.width)
 }
+}
 if(!this.hassetwidth&&this.resourcewidth!=this.width||this._setrescwidth&&this.unstretchedwidth!=this.resourcewidth){
 this.updateWidth(this.resourcewidth)
 }
@@ -4064,30 +4594,52 @@
 if(this.resourceheight!=$1.height){
 if("height" in $1){
 this.resourceheight=$1.height
+if(this.onresourceheight.ready){
 this.onresourceheight.sendEvent($1.height)
 }
+}
 if(!this.hassetheight&&this.resourceheight!=this.height||this._setrescheight&&this.unstretchedheight!=this.resourceheight){
 this.updateHeight(this.resourceheight)
 }
 }
 if($1.skiponload!=true){
+if(this.onload.ready){
 this.onload.sendEvent(this)
 }
+}
 },resourceloaderror:function(){
 this.resourcewidth=0
 this.resourceheight=0
+if(this.onresourcewidth.ready){
+this.onresourcewidth.sendEvent(0)
+}
+if(this.onresourceheight.ready){
+this.onresourceheight.sendEvent(0)
+}
 this.reevaluateSize()
+if(this.onerror.ready){
 this.onerror.sendEvent()
+}
 },resourceloadtimeout:function(){
 this.resourcewidth=0
 this.resourceheight=0
+if(this.onresourcewidth.ready){
+this.onresourcewidth.sendEvent(0)
+}
+if(this.onresourceheight.ready){
+this.onresourceheight.sendEvent(0)
+}
 this.reevaluateSize()
+if(this.ontimeout.ready){
 this.ontimeout.sendEvent()
+}
 },setTotalFrames:function($1){
 if($1!=null&&this.totalframes!=$1){
 this.totalframes=$1
+if(this.ontotalframes.ready){
 this.ontotalframes.sendEvent(this.totalframes)
 }
+}
 },destroy:function($1){
 if(this.__LZdeleted){
 return
@@ -4105,15 +4657,14 @@
 }
 }
 }
-}
-this.nextMethod(arguments.callee,"destroy").apply(this,arguments)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).apply(this,arguments)
 if($1==true){
 return
 }
 if(this.sprite){
 this.sprite.destroy($1)
 }
-this.setVisible(false)
+this.setVisibility("hidden")
 if(this.addedToParent){
 if("__LZoutliewidth" in this.immediateparent&&this.immediateparent.__LZoutliewidth==this){
 this.immediateparent.__LZoutliewidth=null
@@ -4122,19 +4673,46 @@
 this.immediateparent.__LZoutlieheight=null
 }
 if("onremovesubview" in this.immediateparent){
+if(this.immediateparent.onremovesubview.ready){
 this.immediateparent.onremovesubview.sendEvent(this)
 }
 }
+}
 },deleteView:function($1){
 this.destroy()
 },setVisible:function($1){
-this.__LZvisibleSet=$1
+if(this._visible==$1){
+return
+}
+this._visible=$1
+if($1){
+var $2="visible"
+}else{
+if($1==null){
+var $2="collapse"
+}else{
+var $2="hidden"
+}
+}
+this.visibility=$2
+if(this.onvisibility.ready){
+this.onvisibility.sendEvent(this.visibility)
+}
 this.__LZupdateShown()
+},setVisibility:function($1){
+if(this.visibility==$1){
+return
+}
+this.visibility=$1
+this.__LZupdateShown()
+if(this.onvisibility.ready){
+this.onvisibility.sendEvent($1)
+}
 },__LZupdateShown:function(){
-if(this.__LZvisibleSet==null){
+if(this.visibility=="collapse"){
 var $1=this.__LZvizO&&this.__LZvizDat&&this.__LZvizLoad
 }else{
-var $1=this.__LZvisibleSet
+var $1=this.visibility=="visible"
 }
 if($1!=this.visible){
 this.visible=$1
@@ -4148,9 +4726,13 @@
 if($2&&$2.__LZcheckheight){
 $2.__LZcheckheightFunction(this)
 }
+if(this.onvisible.ready){
 this.onvisible.sendEvent($1)
 }
+}
 },setWidth:function($1){
+if(this._width!=$1){
+this._width=$1
 this.sprite.setWidth($1)
 if($1==null){
 this.hassetwidth=false
@@ -4176,8 +4758,13 @@
 if(this.immediateparent.__LZcheckwidth){
 this.immediateparent.__LZcheckwidthFunction(this)
 }
+if(this.onwidth.ready){
 this.onwidth.sendEvent($1)
+}
+}
 },setHeight:function($1){
+if(this._height!=$1){
+this._height=$1
 this.sprite.setHeight($1)
 if($1==null){
 this.hassetheight=false
@@ -4203,13 +4790,18 @@
 if(this.immediateparent.__LZcheckheight){
 this.immediateparent.__LZcheckheightFunction(this)
 }
+if(this.onheight.ready){
 this.onheight.sendEvent($1)
+}
+}
 },setOpacity:function($1){
 if(this.sprite.capabilities.opacity){
 this.sprite.setOpacity($1)
 }
 this.opacity=$1
+if(this.onopacity.ready){
 this.onopacity.sendEvent($1)
+}
 var $2=this.__LZvizO
 var $3=$1!=0
 if($2!=$3){
@@ -4217,6 +4809,8 @@
 this.__LZupdateShown()
 }
 },setX:function($1){
+if(this._x!=$1){
+this._x=$1
 this.x=$1
 if(this.__LZhasoffset){
 if(this.sprite.capabilities.rotation){
@@ -4232,8 +4826,13 @@
 if(this.immediateparent.__LZcheckwidth){
 this.immediateparent.__LZcheckwidthFunction(this)
 }
+if(this.onx.ready){
 this.onx.sendEvent(this.x)
+}
+}
 },setY:function($1){
+if(this._y!=$1){
+this._y=$1
 this.y=$1
 if(this.__LZhasoffset){
 if(this.sprite.capabilities.rotation){
@@ -4249,7 +4848,10 @@
 if(this.immediateparent.__LZcheckheight){
 this.immediateparent.__LZcheckheightFunction(this)
 }
+if(this.ony.ready){
 this.ony.sendEvent(this.y)
+}
+}
 },setRotation:function($1){
 if(this.sprite.capabilities.rotation){
 this.sprite.setRotation($1)
@@ -4258,7 +4860,9 @@
 var $2=Math.PI/180*this.rotation
 this.__LZrsin=Math.sin($2)
 this.__LZrcos=Math.cos($2)
+if(this.onrotation.ready){
 this.onrotation.sendEvent($1)
+}
 if(this.__LZhasoffset){
 this.setX(this.x)
 this.setY(this.y)
@@ -4293,13 +4897,17 @@
 this.xoffset=$1
 this.setX(this.x)
 this.setY(this.y)
+if(this.onxoffset.ready){
 this.onxoffset.sendEvent($1)
+}
 },setYOffset:function($1){
 this.__LZhasoffset=$1!=0
 this.yoffset=$1
 this.setX(this.x)
 this.setY(this.y)
+if(this.onyoffset.ready){
 this.onyoffset.sendEvent($1)
+}
 },getBounds:function(){
 var $1=[-this.xoffset,-this.yoffset,this.width-this.xoffset,-this.yoffset,-this.xoffset,this.height-this.yoffset,this.width-this.xoffset,this.height-this.yoffset,this.rotation,this.x,this.y]
 var $2=$1.length-1
@@ -4426,12 +5034,14 @@
 var $2=this.width/$1
 this._xscale=$2
 }
+if(this.onunstretchedwidth.ready){
 this.onunstretchedwidth.sendEvent($1)
 }
+}
 if(!this.hassetwidth){
 this.width=$1
 this.sprite.setWidth($1)
-if(this.isinited&&this.onwidth){
+if(this.onwidth.ready){
 this.onwidth.sendEvent($1)
 }
 if(this.immediateparent.__LZcheckwidth){
@@ -4446,13 +5056,15 @@
 this._yscale=$2
 }
 if(this.onunstretchedheight){
+if(this.onunstretchedheight.ready){
 this.onunstretchedheight.sendEvent($1)
 }
 }
+}
 if(!this.hassetheight){
 this.height=$1
 this.sprite.setHeight($1)
-if(this.isinited&&this.onheight){
+if(this.onheight.ready){
 this.onheight.sendEvent($1)
 }
 if(this.immediateparent.__LZcheckheight){
@@ -4534,11 +5146,18 @@
 }
 return this.__LZviewLinks[$2]
 },mouseevent:function($1){
-if(this[$1]){
+if(this[$1]&&this[$1].ready){
 this[$1].sendEvent(this)
 }
 },getMouse:function($1){
-return this.sprite.getMouse($1)
+if(this.__movecounter!=LzGlobalMouse.__movecounter){
+this.__movecounter=LzGlobalMouse.__movecounter
+this.__mousecache=this.sprite.getMouse($1)
+}
+if($1==null){
+return this.__mousecache
+}
+return this.__mousecache[$1]
 },containsPt:function($1,$2){
 return this.getAttribute("height")>=$2&&$2>=0&&(this.getAttribute("width")>=$1&&$1>=0)
 },bringToFront:function(){
@@ -4574,7 +5193,9 @@
 this.__lzcheckframe=$1
 this.frame=$1
 this.stop($1)
+if(this.onframe.ready){
 this.onframe.sendEvent($1)
+}
 },stretchResource:function($1){
 this.sprite.stretchResource($1)
 if($1==null||$1=="x"||$1=="width"||$1=="both"){
@@ -4592,7 +5213,9 @@
 if($1!=null){
 this.bgcolor=Number($1)
 }
+if(this.onbgcolor.ready){
 this.onbgcolor.sendEvent($1)
+}
 },setSource:function($1,$2,$3){
 this.sprite.setSource($1,$2,$3)
 },unload:function(){
@@ -4614,7 +5237,9 @@
 },setClickable:function($1){
 this.sprite.setClickable($1)
 this.clickable=$1
+if(this.onclickable.ready){
 this.onclickable.sendEvent($1)
+}
 },setCursor:function($1){
 this.sprite.setCursor($1)
 },setPlay:function($1){
@@ -4708,11 +5333,10 @@
 }
 },shouldYieldFocus:function(){
 return true
-},setContextMenu:function($1){
-this.contextMenu=$1
+},blurring:false,setContextMenu:function($1){
 this.sprite.setContextMenu($1)
 },getContextMenu:function(){
-return this.contextMenu
+return this.sprite.getContextMenu()
 }},{tagname:"view",__LZproxypolicies:[],__LZcheckProxyPolicy:function($1){
 var $2=LzView.__LZproxypolicies
 for(var $3=$2.length-1;$3>=0;$3--){
@@ -4771,6 +5395,7 @@
 DeclareEvent(prototype,"onunstretchedheight")
 DeclareEvent(prototype,"onunstretchedwidth")
 DeclareEvent(prototype,"onvisible")
+DeclareEvent(prototype,"onvisibility")
 DeclareEvent(prototype,"onwidth")
 DeclareEvent(prototype,"onx")
 DeclareEvent(prototype,"onxoffset")
@@ -4784,6 +5409,7 @@
 setters.opacity="setOpacity"
 setters.alpha="setOpacity"
 setters.visible="setVisible"
+setters.visibility="setVisibility"
 setters.align="setAlign"
 setters.valign="setValign"
 setters.source="setSource"
@@ -4877,7 +5503,7 @@
 return $7
 }
 prototype.getMouse.dependencies=function(){
-return [LzGlobalMouse,"mousemove"]
+return [LzIdle,"idle"]
 }
 prototype.getCurrentTime.dependencies=function($1,$2){
 return [$2,"frame"]
@@ -4920,22 +5546,28 @@
 var $2=1
 var $3=0
 var $4="_"+$1+"scale"
+if(this.uplinkArray){
 var $5=this.uplinkArray.length
 for(var $6=0;$6<$5;$6++){
 var $7=this.uplinkArray[$6]
 $2*=$7[$4]
 $3+=$7[$1]/$2
 }
+}
+if(this.downlinkArray){
 for(var $6=this.downlinkArray.length-1;$6>=0;$6--){
 var $7=this.downlinkArray[$6]
 $3-=$7[$1]/$2
 $2/=$7[$4]
 }
+}
 this.scale[$1]=$2
 this.offset[$1]=$3
 }},null)
-var LzText=Class.make("LzText",LzView,{scroll:0,maxscroll:0,hscroll:0,maxhscroll:0,multiline:null,resize:true,text:null,colorstring:"#000000",init:function(){
-this.nextMethod(arguments.callee,"init").apply(this,arguments)
+var LzText=Class.make("LzText",[LzFormatter,LzView],{scroll:0,maxscroll:0,hscroll:0,maxhscroll:0,getDefaultWidth:function(){
+return 0
+},multiline:null,resize:true,text:null,colorstring:"#000000",init:function(){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).apply(this,arguments)
 if(this.sizeToHeight){
 var $1=this.sprite.getTextfieldHeight()
 if($1>0){
@@ -4944,8 +5576,7 @@
 }
 },construct:function($1,$2){
 this.password="password" in $2&&$2.password?true:false
-this.multiline="multiline" in $2?$2.multiline:null
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+this.multiline="multiline" in $2?$2.multiline:null;(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.sizeToHeight=false
 this.fontname="font" in $2?$2.font:this.searchParents("fontname").fontname
 this.fontsize="fontsize" in $2?$2.fontsize:this.searchParents("fontsize").fontsize
@@ -4954,9 +5585,9 @@
 $2.fontsize=this.fontsize
 $2.fontstyle=this.fontstyle
 this.sprite.__initTextProperties($2)
-$2.font=this._ignoreAttribute
-$2.fontsize=this._ignoreAttribute
-$2.fontstyle=this._ignoreAttribute
+$2.font=LzNode._ignoreAttribute
+$2.fontsize=LzNode._ignoreAttribute
+$2.fontstyle=LzNode._ignoreAttribute
 this.yscroll=0
 this.xscroll=0
 this.resize="resize" in $2?$2.resize==true:this.resize
@@ -4965,16 +5596,19 @@
 this.setMultiline(this.multiline)
 this.sprite.setText(this.text)
 if($2.width==null){
+if(this.multiline){
+$2.width=this.parent.width
+}else{
 if(this.text!=null&&this.text!=""&&this.text.length>0){
 $2.width=this.getTextWidth()
 }else{
-$2.width=this.DEFAULT_WIDTH
+$2.width=this.getDefaultWidth()
 }
 }
-if($2.width==null){
-$2.width=100
+}else{
+this.setResize(false)
 }
-if(!("height" in $2)||$2.height==null){
+if(!this.hassetheight){
 this.sizeToHeight=true
 }else{
 this.setHeight($2.height)
@@ -4986,6 +5620,26 @@
 if("pattern" in $2&&$2.pattern!=null){
 this.setPattern($2.pattern)
 }
+if("antiAliasType" in $2&&$2.antiAliasType!=null){
+this.setAntiAliasType($2.antiAliasType)
+}else{
+this.setAntiAliasType("normal")
+}
+if("gridFit" in $2&&$2.gridFit!=null){
+this.setGridFit($2.gridFit)
+}else{
+this.setGridFit("subpixel")
+}
+if("sharpness" in $2&&$2.sharpness!=null){
+this.setSharpness($2.sharpness)
+}else{
+this.setSharpness(0)
+}
+if("thickness" in $2&&$2.thickness!=null){
+this.setThickness($2.thickness)
+}else{
+this.setThickness(0)
+}
 },__makeSprite:function($1){
 this.sprite=LzTextSprite.make(this,$1)
 },getMCRef:function(){
@@ -4994,8 +5648,7 @@
 this.sprite.setResize($1)
 this.resize=$1
 },setWidth:function($1){
-this.sprite.setWidth($1)
-this.nextMethod(arguments.callee,"setWidth").apply(this,arguments)
+this.sprite.setWidth($1);(arguments.callee.superclass?arguments.callee.superclass.prototype["setWidth"]:this.nextMethod(arguments.callee,"setWidth")).apply(this,arguments)
 if(this.sizeToHeight){
 var $2=this.sprite.getTextfieldHeight()
 if($2>0){
@@ -5012,14 +5665,18 @@
 }
 this.sprite.setMaxLength($1)
 this.maxlength=$1
+if(this.onmaxlength.ready){
 this.onmaxlength.sendEvent($1)
+}
 },setPattern:function($1){
 if($1==null||$1==""){
 return
 }
 this.sprite.setPattern($1)
 this.pattern=$1
+if(this.onpattern.ready){
 this.onpattern.sendEvent($1)
+}
 },getTextWidth:function(){
 return this.sprite.getTextWidth()
 },getTextHeight:function(){
@@ -5129,6 +5786,9 @@
 return $4
 },setText:function($1){
 $1+=""
+if($1==this.text){
+return
+}
 if(this.visible){
 this.sprite.setVisible(this.visible)
 }
@@ -5146,7 +5806,11 @@
 this.setHeight($3)
 }
 }
+if(this.ontext.ready){
 this.ontext.sendEvent($1)
+}
+},format:function($1,$2){
+this.setText(this.formatToString.apply(this,arguments))
 },updateMaxLines:function(){
 var $1=Math.floor(this.height/(this.font.height-1))
 if($1!=this.maxlines){
@@ -5186,23 +5850,58 @@
 this.sprite.setWordWrap($1)
 },setEmbedFonts:function($1){
 this.sprite.setEmbedFonts($1)
-},__updatefieldsize:function(){
-if(this.__control.scroll!=this.scroll){
-this.__control.scroll=this.scroll
-this.__control.onscroll.sendEvent(this.scroll)
+},setAntiAliasType:function($1){
+if(this.sprite.capabilities.advancedfonts){
+if($1=="normal"||$1=="advanced"){
+this.antiAliasType=$1
+this.sprite.setAntiAliasType($1)
+}else{
+
 }
-if(this.__control.maxscroll!=this.maxscroll){
-this.__control.maxscroll=this.maxscroll
-this.__control.onmaxscroll.sendEvent(this.maxscroll)
 }
-if(this.__control.hscroll!=this.hscroll){
-this.__control.hscroll=this.hscroll
-this.__control.onmaxscroll.sendEvent(this.hscroll)
+},getAntiAliasType:function(){
+if(this.sprite.capabilities.advancedfonts){
+return this.antiAliasType
 }
-if(this.__control.maxhscroll!=this.maxhscroll){
-this.__control.maxhscroll=this.maxhscroll
-this.__control.onmaxscroll.sendEvent(this.maxhscroll)
+},setGridFit:function($1){
+if(this.sprite.capabilities.advancedfonts){
+if($1=="none"||$1=="pixel"||$1=="subpixel"){
+this.gridFit=$1
+this.sprite.setGridFit($1)
+}else{
+
 }
+}
+},getGridFit:function(){
+if(this.sprite.capabilities.advancedfonts){
+return this.gridFit
+}
+},setSharpness:function($1){
+if(this.sprite.capabilities.advancedfonts){
+if($1>=-400&&$1<=400){
+this.sharpness=$1
+this.sprite.setSharpness($1)
+}else{
+
+}
+}
+},getSharpness:function(){
+if(this.sprite.capabilities.advancedfonts){
+return this.sharpness
+}
+},setThickness:function($1){
+if(this.sprite.capabilities.advancedfonts){
+if($1>=-200&&$1<=200){
+this.thickness=$1
+this.sprite.setThickness($1)
+}else{
+
+}
+}
+},getThickness:function(){
+if(this.sprite.capabilities.advancedfonts){
+return this.thickness
+}
 },setScroll:function($1){
 this.sprite.setScroll($1)
 },setHScroll:function($1){
@@ -5213,7 +5912,7 @@
 return this.sprite.getSelectionPosition()
 },getSelectionSize:function(){
 return this.sprite.getSelectionSize()
-}},{tagname:"text",DEFAULT_WIDTH:100,PAD_TEXTWIDTH:4,DEFAULT_SIZE:8,escapeChars:{">":"&gt;","<":"&lt;"}});(function(){
+}},{tagname:"text",escapeChars:{">":"&gt;","<":"&lt;"}});(function(){
 with(LzText){
 with(LzText.prototype){
 DeclareEvent(prototype,"ontext")
@@ -5232,6 +5931,14 @@
 setters.maxlength="setMaxLength"
 setters.pattern="setPattern"
 defaultattrs.clip=true
+setters.antiAliasType="setAntiAliasType"
+defaultattrs.antiAliasType="normal"
+setters.gridFit="setGridFit"
+defaultattrs.gridfit="subpixel"
+setters.sharpness="setSharpness"
+defaultattrs.sharpness=0
+setters.thickness="setThickness"
+defaultattrs.thickness=0
 setters.font="setFontName"
 setters.fontsize="setFontSize"
 setters.fontstyle="setFontStyle"
@@ -5250,8 +5957,10 @@
 }
 }
 })()
-var LzInputText=Class.make("LzInputText",LzText,{construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+var LzInputText=Class.make("LzInputText",LzText,{getDefaultWidth:function(){
+return 100
+},construct:function($1,$2){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this._onfocusDel=LzDelegate.make(this,"_gotFocusEvent",this,"onfocus")
 this._onblurDel=LzDelegate.make(this,"_gotBlurEvent",this,"onblur")
 },__makeSprite:function($1){
@@ -5271,30 +5980,46 @@
 if(this.multiline&&this.sizeToHeight&&this.height!=this.sprite.getTextHeight()){
 this.setHeight(this.sprite.getTextfieldHeight())
 }
-this.ontext.sendEvent(this.getText())
+if(this.ontext.ready){
+this.ontext.sendEvent($2)
+}
 return
 }
 }
+if(this[$1].ready){
 this[$1].sendEvent($2)
+}
 },focusable:true,updateData:function(){
 return this.sprite.text
 },setEnabled:function($1){
+this.setAttribute("focusable",$1)
+this.enabled=$1
 this.sprite.setEnabled($1)
+if(this.onenabled.ready){
 this.onenabled.sendEvent($1)
+}
 },setHTML:function($1){
-this.__LZtextclip.html=$1
+if(this.sprite.capabilities["htmlinputtext"]){
+this.sprite.setHTML($1)
+}else{
+
+}
 },setText:function($1){
 $1+=""
 this.sprite.setText($1)
 this.text=$1
 if(this.height<9||this.sizeToHeight){
 this.height=this.sprite.getTextfieldHeight()
+if(this.onheight.ready){
 this.onheight.sendEvent()
+}
 if(this.height>0){
 this.setHeight(this.height)
 }
 }
+if(this.ontext.ready){
 this.ontext.sendEvent($1)
+}
 },getText:function(){
 return this.sprite.getText()
 }},{tagname:"inputtext"});(function(){
@@ -5306,8 +6031,11 @@
 defaultattrs.selectable=true
 defaultattrs.enabled=true
 setters.enabled="setEnabled"
+prototype.getText.dependencies=function($1,$2){
+return [$2,"text"]
 }
 }
+}
 })()
 var LzCanvas=Class.make("LzCanvas",LzView,{initialize:function($1){
 this.hasdatapath=true
@@ -5390,11 +6118,17 @@
 this.__LZmousemoveDel=LzDelegate.make(this,"__LZmousemove",LzGlobalMouse,"onmousemove")
 LzPlatform.initCanvas(this)
 },__LZmouseup:function(){
+if(this.onmouseup.ready){
 this.onmouseup.sendEvent()
+}
 },__LZmousemove:function(){
+if(this.onmousemove.ready){
 this.onmousemove.sendEvent()
+}
 },__LZmousedown:function(){
+if(this.onmousedown.ready){
 this.onmousedown.sendEvent()
+}
 },__makeSprite:function($1){
 this.sprite=LzSprite.make(this,true,$1)
 },initdelay:0,lpsversion:null,lpsrelease:null,version:null,__LZlfcversion:"0",nodeLevel:0,proxied:true,dataloadtimeout:30000,medialoadtimeout:30000,percentcreated:null,datasets:null,proxied:null,compareVersion:function($1,$2){
@@ -5442,7 +6176,9 @@
 },__LZinstantiationDone:function(){
 this.percentcreated=1
 this.updatePercentCreated=null
+if(this.onpercentcreated.ready){
 this.onpercentcreated.sendEvent(this.percentcreated)
+}
 if(this.initdelay>0){
 LzInstantiator.halt()
 this.initokdel=LzDelegate.make(this,"okToInit")
@@ -5456,7 +6192,9 @@
 },updatePercentCreated:function(){
 this.percentcreated=Math.max(this.percentcreated,this.creatednodes/this.totalnodes)
 this.percentcreated=Math.min(0.99,this.percentcreated)
+if(this.onpercentcreated.ready){
 this.onpercentcreated.sendEvent(this.percentcreated)
+}
 },initiatorAddNode:function($1,$2){
 this.totalnodes+=$2
 this._lzinitialsubviews.push($1)
@@ -5488,7 +6226,9 @@
 }
 this.init()
 this.sprite.init(true)
+if(this.oninit.ready){
 this.oninit.sendEvent(this)
+}
 if(this.datapath&&this.datapath.__LZApplyDataOnInit){
 this.datapath.__LZApplyDataOnInit()
 }
@@ -5503,16 +6243,21 @@
 },setY:function(){
 
 },setDefaultContextMenu:function($1){
+this.setContextMenu($1)
 this.sprite.setDefaultContextMenu($1)
 },__windowResize:function($1){
 if(this.__canvaswidthratio!=null){
 this.width=Math.floor($1.width*this.__canvaswidthratio)
+if(this.onwidth.ready){
 this.onwidth.sendEvent(this.width)
+}
 this.sprite.setWidth(this.width)
 }
 if(this.__canvasheightratio!=null){
 this.height=Math.floor($1.height*this.__canvasheightratio)
+if(this.onheight.ready){
 this.onheight.sendEvent(this.height)
+}
 this.sprite.setHeight(this.height)
 }
 }},{tagname:"canvas",versionInfoString:function(){
@@ -5561,11 +6306,11 @@
 }
 }
 var LzScript=Class.make("LzScript",LzNode,{initialize:function($1,$2){
-this.nextMethod(arguments.callee,"initialize").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
 $2.script()
 }},{tagname:"script"})
 var LzAnimatorGroup=Class.make("LzAnimatorGroup",LzNode,{attribute:null,start:true,from:null,to:null,duration:null,indirect:false,relative:false,motion:"easeboth",repeat:null,paused:false,started:null,target:null,process:"sequential",target:null,paused:null,animatorProps:{attribute:true,from:true,duration:true,to:true,relative:true,target:true},construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 if(this.immediateparent instanceof LzAnimatorGroup){
 for(var $3 in this.animatorProps){
 if($2[$3]==null){
@@ -5577,7 +6322,7 @@
 }else{
 this.immediateparent.animators.push(this)
 }
-$2.start=this._ignoreAttribute
+$2.start=LzNode._ignoreAttribute
 }else{
 this.target=this.immediateparent
 }
@@ -5590,8 +6335,7 @@
 }
 if(this.started){
 this.doStart()
-}
-this.nextMethod(arguments.callee,"init").apply(this,arguments)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).apply(this,arguments)
 },setTarget:function($1){
 this.target=$1
 var $2=this.subnodes
@@ -5602,10 +6346,14 @@
 }
 }
 }
+if(this.ontarget.ready){
 this.ontarget.sendEvent($1)
+}
 },setStart:function($1){
 this.started=$1
+if(this.onstarted.ready){
 this.onstarted.sendEvent($1)
+}
 if(!this.isinited){
 return
 }
@@ -5618,7 +6366,9 @@
 if(this.isactive){
 return false
 }
+if(this.onstart.ready){
 this.onstart.sendEvent((new Date()).getTime())
+}
 this.isactive=true
 this.crepeat=this.repeat
 this.prepareStart()
@@ -5637,13 +6387,17 @@
 this.animators[$1].needsrestart=true
 }
 },update:function($1){
-var $2=this.process=="simultaneous"?this.actAnim.length-1:0
+var $2=this.actAnim.length-1
+if($2>0&&this.process=="sequential"){
+$2=0
+}
 if(this.paused){
 return
 }
 for(var $3=$2;$3>=0;$3--){
 var $4=this.actAnim[$3]
 if($4.notstarted){
+$4.isactive=true
 $4.prepareStart()
 $4.notstarted=false
 }else{
@@ -5672,25 +6426,36 @@
 }
 }
 this.paused=$1
+if(this.onpaused.ready){
 this.onpaused.sendEvent($1)
+}
 },__LZaddToStartTime:function($1){
 this.startTime+=$1
 for(var $2=0;$2<this.actAnim.length;$2++){
 this.actAnim[$2].__LZaddToStartTime($1)
 }
 },stop:function(){
-var $1=this.process=="simultaneous"?this.actAnim.length-1:0
+if(this.actAnim){
+var $1=this.actAnim.length-1
+if($1>0&&this.process=="sequential"){
+$1=0
+}
 for(var $2=$1;$2>=0;$2--){
 this.actAnim[$2].stop()
 }
+}
 this.__LZhalt()
 },__LZfinalizeAnim:function(){
 this.__LZhalt()
 },__LZhalt:function(){
 this.isactive=false
 this.updateDel.unregisterAll()
+if(this.onfinish.ready){
 this.onfinish.sendEvent(this)
+}
+if(this.onstop.ready){
 this.onstop.sendEvent((new Date()).getTime())
+}
 },checkRepeat:function(){
 if(this.crepeat==null||this.crepeat==1){
 this.__LZfinalizeAnim()
@@ -5698,8 +6463,10 @@
 }
 if(this.crepeat>0){
 this.crepeat--
+if(this.onrepeat.ready){
 this.onrepeat.sendEvent((new Date()).getTime())
 }
+}
 this.resetAnimator()
 },destroy:function(){
 this.stop()
@@ -5719,8 +6486,7 @@
 break
 }
 }
-}
-this.nextMethod(arguments.callee,"destroy").apply(this,arguments)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).apply(this,arguments)
 },toString:function(){
 return "GroupAnimator length = "+this.animators.length
 }},{tagname:"animatorgroup"});(function(){
@@ -5743,7 +6509,7 @@
 }
 })()
 var LzAnimator=Class.make("LzAnimator",LzAnimatorGroup,{beginPoleDelta:0.25,endPoleDelta:0.25,attribute:null,construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.primary_K=1
 },setMotion:function($1){
 if($1=="linear"){
@@ -5815,7 +6581,9 @@
 },beginAnimator:function($1){
 this.startTime=$1
 this.lastIterationTime=$1
+if(this.onstart.ready){
 this.onstart.sendEvent($1)
+}
 this.doBegin=false
 },stop:function(){
 if(!this.isactive){
@@ -5894,7 +6662,7 @@
 }
 })()
 var LzLayout=Class.make("LzLayout",LzNode,{locked:2,subviews:null,updateDelegate:null,delegates:null,construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.subviews=(new Array)
 if(this.immediateparent.layouts==null){
 this.immediateparent.layouts=[this]
@@ -5917,8 +6685,7 @@
 this.gotNewSubview(this.immediateparent.subviews[$3])
 }
 },destroy:function(){
-this.releaseLayout()
-this.nextMethod(arguments.callee,"destroy").apply(this,arguments)
+this.releaseLayout();(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).apply(this,arguments)
 },reset:function($1){
 if(this.locked){
 return
@@ -5973,14 +6740,18 @@
 }
 }
 },releaseLayout:function(){
+if(this.delegates){
 for(var $1=this.delegates.length-1;$1>=0;$1--){
 this.delegates[$1].unregisterAll()
 }
+}
+if(this.immediateparent&&this.immediateparent.layouts){
 for(var $1=this.immediateparent.layouts.length-1;$1>=0;$1--){
 if(this.immediateparent.layouts[$1]==this){
 this.immediateparent.layouts.splice($1,1)
 }
 }
+}
 },setLayoutOrder:function($1,$2){
 for(var $3=this.subviews.length-1;$3>=0;$3--){
 if(this.subviews[$3]==$2){
@@ -6036,7 +6807,7 @@
 }
 })()
 var LzFont=Class.make("LzFont",null,{style:null,name:null,height:null,ascent:null,descent:null,advancetable:null,lsbtable:null,rsbtable:null,initialize:function($1,$2,$3){
-this.nextMethod(arguments.callee,"initialize").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
 this.name=$1.name
 this.style=$3
 this.fontobject=$1
@@ -6054,7 +6825,7 @@
 return "Font style "+this.style+" of name "+this.name
 }},null)
 var LzSelectionManager=Class.make("LzSelectionManager",LzNode,{sel:null,selectedHash:null,selected:null,construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.toggle=$2.toggle==true
 this.sel=$2.selFuncName==null?"setSelected":$2.selFuncName
 this.selected=(new Array)
@@ -6238,8 +7009,10 @@
 LzKeys.callOnKeyCombo(this,$1)
 },execute:function($1){
 if(this.active){
+if(this.onselect.ready){
 this.onselect.sendEvent($1)
 }
+}
 },keysToString:function(){
 var $1={control:"Ctrl",shift:"Shift",alt:"Alt"}
 var $2=""
@@ -6266,8 +7039,8 @@
 }
 }
 })()
-var LzState=Class.make("LzState",LzNode,{staterefs:{apply:true},stateevents:{onremove:true,onapply:true},asyncnew:false,subh:null,pooling:false,construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+var LzState=Class.make("LzState",LzNode,{asyncnew:false,subh:null,pooling:false,construct:function($1,$2){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.heldArgs={}
 this.appliedChildren=[]
 this.isapplied=false
@@ -6276,7 +7049,7 @@
 this.__LZinstantiationDone()
 },setApply:function($1){
 if(typeof $1=="function"){
-this.apply=$1
+this.addProperty("apply",$1)
 return
 }
 if($1){
@@ -6313,12 +7086,16 @@
 this.parent.__LZresolveReferences()
 this.__LZstatedelegates=this.parent.__LZdelegates
 this.parent.__LZdelegates=$1
+if(this.onapply.ready){
 this.onapply.sendEvent(this)
+}
 },remove:function(){
 if(!this.isapplied){
 return
 }
+if(this.onremove.ready){
 this.onremove.sendEvent(this)
+}
 this.isapplied=false
 if(this.__LZstatedelegates){
 for(var $1=0;$1<this.__LZstatedelegates.length;$1++){
@@ -6344,38 +7121,36 @@
 this.appliedChildren=[]
 },destroy:function(){
 this.pooling=false
-this.remove()
-this.nextMethod(arguments.callee,"destroy").apply(this,arguments)
+this.remove();(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).apply(this,arguments)
 },__LZapplyArgs:function($1){
 var $2=this.addProperty
 this.addProperty=function($1,$2){
 this.heldArgs[$1]=$2
-}
-this.nextMethod(arguments.callee,"__LZapplyArgs").call(this,$1)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZapplyArgs"]:this.nextMethod(arguments.callee,"__LZapplyArgs")).call(this,$1)
 this.addProperty=$2
-},checkRefs:function($1){
-var $2={}
+},__LZstoreRefs:function($1,$2){
 var $3={}
-for(var $4 in $1){
-if(this.staterefs[$4]){
-$3[$4]=$1[$4]
-var $5=true
+var $4={}
+for(var $5 in $1){
+if(LzState.staterefs[$5]){
+$4[$5]=$1[$5]
+var $6=true
 }else{
-$2[$4]=$1[$4]
-var $6=true
+$3[$5]=$1[$5]
+var $7=true
 }
 }
-if($5){
-this.__LZstoreRefs($3,"$refs")
-}
 if($6){
-this.heldArgs.$refs=$2
+(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZstoreRefs"]:this.nextMethod(arguments.callee,"__LZstoreRefs")).call(this,$4,$2)
 }
-},checkDelegates:function($1){
+if($7){
+this.heldArgs[$2]=$3
+}
+},__LZstoreDelegates:function($1){
 var $2=[]
 var $3=[]
 for(var $4=0;$4<$1.length;$4+=3){
-if(this.stateevents[$1[$4]]&&!$1[$4+2]){
+if(LzState.stateevents[$1[$4]]&&!$1[$4+2]){
 var $5=$3
 var $6=$1[$4+1]
 if(this.heldArgs[$6]){
@@ -6389,30 +7164,26 @@
 $5.push($1[$4],$1[$4+1],$1[$4+2])
 }
 if($3.length){
-this.__LZstoreAttr($3,"$delegates")
+(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZstoreDelegates"]:this.nextMethod(arguments.callee,"__LZstoreDelegates")).call(this,$3)
 }
 if($2.length){
 this.heldArgs.$delegates=$2
 }
 },__LZsetProperty:function($1,$2){
 this[$2]=$1
-},__LZstoreDelegates:function($1){
-this.heldArgs.$delegates=$1
 },__LZdetach:function($1){
 $1.setVisible(false)
 return $1
 },__LZretach:function($1){
 $1.setVisible(true)
 return $1
-}},{tagname:"state"});(function(){
+}},{tagname:"state",staterefs:{apply:true},stateevents:{onremove:true,onapply:true}});(function(){
 with(LzState){
 with(LzState.prototype){
 DeclareEvent(prototype,"onapply")
 DeclareEvent(prototype,"onremove")
 setters.apply="setApply"
 setters.$setters=null
-setters.$refs="checkRefs"
-setters.$delegates="checkDelegates"
 prototype.$isstate=true
 setters.asyncnew="__LZsetProperty"
 setters.pooling="__LZsetProperty"
@@ -6428,6 +7199,16 @@
 this.parentNode.__LZupdateCO()
 }
 return this.parentNode.childNodes[this.__LZo-1]
+},getParent:function(){
+return this.parentNode
+},getOffset:function(){
+if(!this.parentNode){
+return 0
+}
+if(this.parentNode.__LZcoDirty){
+this.parentNode.__LZupdateCO()
+}
+return this.__LZo
 },getNextSibling:function(){
 if(!this.parentNode){
 return null
@@ -6452,7 +7233,7 @@
 this.childNodes[$2].setOwnerDocument($1)
 }
 }
-if(this.onownerDocument){
+if(this.onownerDocument&&this.onownerDocument.ready){
 this.onownerDocument.sendEvent($1)
 }
 },__LZXMLescape:function($1){
@@ -6462,13 +7243,18 @@
 var $2=$1.length
 var $3=""
 for(var $4=0;$4<$2;$4++){
-var $5=$1.charAt($4)
-if(LzDataNode.__LZescapechars[$5]!=null){
-$3+=LzDataNode.__LZescapechars[$5]
+var $5=$1.charCodeAt($4)
+if($5<32){
+$3+="&#x"+LzUtils.dectohex($5,0)+";"
 }else{
-$3+=$5
+var $6=$1.charAt($4)
+if(LzDataNode.__LZescapechars[$6]!=null){
+$3+=LzDataNode.__LZescapechars[$6]
+}else{
+$3+=$6
 }
 }
+}
 return $3
 },__LZlockFromUpdate:function($1){
 this.ownerDocument.__LZdoLock($1)
@@ -6523,8 +7309,12 @@
 this.childNodes.splice($3,0,$1)
 $1.setOwnerDocument(this.ownerDocument)
 $1.parentNode=this
+if($1.onparentNode.ready){
 $1.onparentNode.sendEvent(this)
+}
+if(this.onchildNodes.ready){
 this.onchildNodes.sendEvent($1)
+}
 this.ownerDocument.handleDocumentChange("insertBefore",this,0)
 return $1
 }
@@ -6537,8 +7327,12 @@
 this.childNodes[$3]=$1
 $1.setOwnerDocument(this.ownerDocument)
 $1.parentNode=this
+if($1.onparentNode.ready){
 $1.onparentNode.sendEvent(this)
+}
+if(this.onchildNodes.ready){
 this.onchildNodes.sendEvent($1)
+}
 this.ownerDocument.handleDocumentChange("childNodes",this,0,$1)
 return $1
 }
@@ -6550,7 +7344,9 @@
 for(var $3=0;$3<this.childNodes.length;$3++){
 if(this.childNodes[$3]==$1){
 this.childNodes.splice($3,1)
+if(this.onchildNodes.ready){
 this.onchildNodes.sendEvent($1)
+}
 $2=$1
 this.ownerDocument.handleDocumentChange("removeChild",this,0,$1)
 }
@@ -6564,9 +7360,13 @@
 }
 $1.setOwnerDocument(this.ownerDocument)
 $1.parentNode=this
+if($1.onparentNode.ready){
 $1.onparentNode.sendEvent(this)
+}
 $1.__LZo=this.childNodes.length-1
+if(this.onchildNodes.ready){
 this.onchildNodes.sendEvent($1)
+}
 this.ownerDocument.handleDocumentChange("appendChild",this,0,$1)
 return $1
 },hasChildNodes:function(){
@@ -6581,19 +7381,25 @@
 }
 return $2
 },getAttr:function($1){
+if(this.attributes){
 return this.attributes[$1]
+}
 },setAttr:function($1,$2){
 if(!this.attributes){
 this.attributes={}
 }
 this.attributes[$1]=$2
+if(this.onattributes.ready){
 this.onattributes.sendEvent($1)
+}
 this.ownerDocument.handleDocumentChange("attributes",this,1,{name:$1,value:$2,type:"set"})
 return $2
 },removeAttr:function($1){
 var $2=this.attributes[$1]
 delete this.attributes[$1]
+if(this.onattributes.ready){
 this.onattributes.sendEvent($1)
+}
 this.ownerDocument.handleDocumentChange("attributes",this,1,{name:$1,value:$2,type:"remove"})
 return $2
 },hasAttr:function($1){
@@ -6607,21 +7413,15 @@
 this.childNodes[$1].__LZo=$1
 }
 this.__LZcoDirty=false
-},getOffset:function(){
-if(!this.parentNode){
-return 0
-}
-if(this.parentNode.__LZcoDirty){
-this.parentNode.__LZupdateCO()
-}
-return this.__LZo
 },setAttrs:function($1){
 var $2={}
 for(var $3 in $1){
 $2[$3]=$1[$3]
 }
 this.attributes=$2
+if(this.onattributes.ready){
 this.onattributes.sendEvent($2)
+}
 if(this.ownerDocument){
 this.ownerDocument.handleDocumentChange("attributes",this,1)
 }
@@ -6632,22 +7432,32 @@
 $3.setOwnerDocument(this.ownerDocument)
 $3.parentNode=this
 if($3.onparentNode){
+if($3.onparentNode.ready){
 $3.onparentNode.sendEvent(this)
 }
+}
 $3.__LZo=$2
 }
 this.__LZcoDirty=false
 if(this.onchildNodes){
+if(this.onchildNodes.ready){
 this.onchildNodes.sendEvent($1)
 }
+}
 this.ownerDocument.handleDocumentChange("childNodes",this,0)
 },setNodeName:function($1){
 this.nodeName=$1
+if(this.onnodeName.ready){
 this.onnodeName.sendEvent($1)
+}
 if(this.parentNode){
+if(this.parentNode.onchildNodes.ready){
 this.parentNode.onchildNodes.sendEvent(this)
+}
+if(this.parentNode.onchildNode.ready){
 this.parentNode.onchildNode.sendEvent(this)
 }
+}
 this.ownerDocument.handleDocumentChange("childNodeName",this.parentNode,0)
 this.ownerDocument.handleDocumentChange("nodeName",this,1)
 },__LZgetText:function(){
@@ -6706,8 +7516,10 @@
 if(this.__LZchangeQ){
 this.__LZchangeQ.push($5)
 }else{
+if(this.onDocumentChange.ready){
 this.onDocumentChange.sendEvent($5)
 }
+}
 },toString:function(){
 var $1=this.serialize()
 return $1
@@ -6738,36 +7550,42 @@
 }
 }
 }
+}},{initialize:function($1){
+if($1.hasOwnProperty("setters")){
+$1.setters.attributes="setAttrs"
+$1.setters.childNodes="setChildNodes"
+$1.setters.nodeName="setNodeName"
+$1.setters.ownerDocument="setOwnerDocument"
+}
 },valueToElement:function($1){
-var $2=LzDataElement.make("element",{},this.__LZv2E($1))
+var $2=LzDataElement.make("element",{},LzDataElementTrait.__LZv2E($1))
 return $2
 },__LZv2E:function($1){
 var $2=typeof $1
 $2.toLowerCase()
 var $3=[]
 if($2=="object"){
-var $4=$1.constructor.prototype
-if($4==LzDataElement.prototype||$4==LzDataNode.prototype){
+if($1 instanceof LzDataElement||$1 instanceof LzDataText){
 $3[0]=$1
 }else{
-if($4==Date.prototype){
+if($1 instanceof Date){
 $2="date"
 }else{
-if($4==Array.prototype){
+if($1 instanceof Array){
 $2="array"
-var $5=$1.__LZtag!=null?$1.__LZtag:"item"
-for(var $6=0;$6<$1.length;$6++){
-var $7=this.__LZv2E($1[$6])
-$3[$6]=LzDataElement.make($5,null,$7)
+var $4=$1.__LZtag!=null?$1.__LZtag:"item"
+for(var $5=0;$5<$1.length;$5++){
+var $6=this.__LZv2E($1[$5])
+$3[$5]=LzDataElement.make($4,null,$6)
 }
 }else{
 $2="struct"
-var $6=0
-for(var $8 in $1){
-if($8.indexOf("__LZ")==0){
+var $5=0
+for(var $7 in $1){
+if($7.indexOf("__LZ")==0){
 continue
 }
-$3[$6++]=LzDataElement.make($8,null,this.__LZv2E($1[$8]))
+$3[$5++]=LzDataElement.make($7,null,this.__LZv2E($1[$7]))
 }
 }
 }
@@ -6781,19 +7599,6 @@
 $3=null
 }
 return $3
-},makeNodeList:function($1,$2){
-var $3=[]
-for(var $4=0;$4<$1;$4++){
-$3[$4]=LzDataElement.make($2,{},null)
-return $3
-}
-}},{initialize:function($1){
-if($1.hasOwnProperty("setters")){
-$1.setters.attributes="setAttrs"
-$1.setters.childNodes="setChildNodes"
-$1.setters.nodeName="setNodeName"
-$1.setters.ownerDocument="setOwnerDocument"
-}
 }});(function(){
 with(LzDataElementTrait){
 with(LzDataElementTrait.prototype){
@@ -6824,7 +7629,7 @@
 }
 }})
 var LzDataElement=Class.make("LzDataElement",[LzDataElementTrait,LzDataNode,LzMiniNode],{initialize:function($1,$2,$3){
-this.nextMethod(arguments.callee,"initialize").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
 this.nodeName=$1
 this.attributes=$2
 this.ownerDocument=this
@@ -6833,13 +7638,19 @@
 }else{
 this.setChildNodes($3)
 }
-},nodeName:null,nodeType:LzDataNode.ELEMENT_NODE,childNodes:null,attributes:null},null)
+},nodeName:null,nodeType:LzDataNode.ELEMENT_NODE,childNodes:null,attributes:null},{makeNodeList:function($1,$2){
+var $3=[]
+for(var $4=0;$4<$1;$4++){
+$3[$4]=LzDataElement.make($2,{},null)
+}
+return $3
+},valueToElement:LzDataElementTrait.valueToElement})
 var LzDataText=Class.make("LzDataText",[LzDataNode,LzMiniNode],{initialize:function($1){
-this.nextMethod(arguments.callee,"initialize").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
 this.data=$1
 },nodeType:LzDataNode.TEXT_NODE,data:"",length:0,setData:function($1){
 this.data=$1
-if(this.ondata){
+if(this.ondata&&this.ondata.ready){
 this.ondata.sendEvent($1)
 }
 if(this.ownerDocument){
@@ -6865,21 +7676,182 @@
 }
 }
 })()
-var LzDataset=Class.make("LzDataset",[LzDataElementTrait,LzDataNode,LzNode],{timeout:30000,acceptencodings:false,nsprefix:false,getresponseheaders:false,trimwhitespace:false,nodeType:LzDataNode.DOCUMENT_NODE,cacheable:false,autorequest:false,headers:null,proxied:null,responseheaders:null,construct:function($1,$2){
+var LzDataRequest=Class.make("LzDataRequest",LzNode,{requestor:null,src:null,timeout:Infinity,status:null,rawdata:null,error:null,initialize:function($1){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
+this.requestor=$1
+}},{tagname:"datarequest",SUCCESS:"success",TIMEOUT:"timeout",ERROR:"error",READY:"ready"});(function(){
+with(LzDataRequest){
+with(LzDataRequest.prototype){
+DeclareEvent(prototype,"onstatus")
+}
+}
+})()
+var LzDataProvider=Class.make("LzDataProvider",LzNode,{doRequest:function($1){
+
+}},{tagname:"dataprovider"})
+var LzHTTPDataProvider=Class.make("LzHTTPDataProvider",LzDataProvider,{makeLoader:function($1){
+var $2=$1.proxied
+var $3=LzHTTPLoader.make(this,$2)
+$1.loader=$3
+$3.loadSuccess=this.loadSuccess
+$3.loadError=this.loadError
+$3.loadTimeout=this.loadTimeout
+$3.setProxied($2)
+var $4="secure" in $1?$1.secure:null
+if($4==null){
+if($1.src.substring(0,5)=="https"){
+$4=true
+}
+}
+if($4){
+$3.baserequest=LzBrowser.getBaseURL($4,$1.secureport)
+}
+$3.secure=$4
+if($4){
+$3.secureport=$1.secureport
+}
+return $3
+},abortLoadForRequest:function($1){
+$1.loader.abort()
+},doRequest:function($1){
+var $2=$1.proxied
+var $3=$1.loader
+if($3==null||$1.multirequest==true||$1.queuerequests==true){
+$3=this.makeLoader($1)
+}
+$3.dataRequest=$1
+$3.setQueueing($1.queuerequests)
+$3.setTimeout($1.timeout)
+$3.setOption("cacheable",$1.cacheable==true)
+$3.setOption("timeout",$1.timeout)
+$3.setOption("trimwhitespace",$1.trimwhitespace==true)
+$3.setOption("nsprefix",$1.nsprefix==true)
+$3.setOption("sendheaders",$1.getresponseheaders==true)
+if($1.clientcacheable!=null){
+$3.setOption("ccache",$1.clientcacheable)
+}
+var $4={}
+var $5=$1.requestheaders
+if($5!=null){
+var $6=$5.getNames()
+for(var $7=0;$7<$6.length;$7++){
+var $8=$6[$7]
+var $9=$5.getValue($8)
+if($2){
+$4[$8]=$9
+}else{
+$3.setRequestHeader($8,$9)
+}
+}
+}
+var $10=$1.queryparams
+var $11=$1.querystring
+var $12=""
+var $13="?"
+var $14=$1.postbody
+if($10!=null){
+var $15=$10.getNames()
+for(var $7 in $15){
+var $16=$15[$7]
+if(!$2&&$16=="lzpostbody"){
+$14=$10.getValue($16)
+}else{
+$13+=$12+$16+"="+encodeURIComponent($10.getValue($16))
+$12="&"
+}
+}
+}
+if($11!=null&&$11.length>0){
+if($13.length>0){
+$13+=$12+$11
+}else{
+$13=$11
+}
+}
+var $17=$1.src
+if($13=="?"){
+
+}else{
+if($17.indexOf("?")>=0){
+$17=$17+"&"+$13
+}else{
+$17=$17+$13
+}
+}
+if($2){
+$17=$3.makeProxiedURL($17,$1.method,"xmldata",$4)
+}else{
+if(!$1.clientcacheable){
+var $18="__lzbc__="+(new Date()).getTime()
+if($17.indexOf("?")>=0){
+$17=$17+"&"+$18
+}else{
+$17=$17+"?"+$18
+}
+}
+}
+$1.status="loading"
+$3.open($2?"POST":$1.method,$17,null,null)
+$3.send($14)
+},loadSuccess:function($1,$2){
+var $3=$1.dataRequest
+$3.status="success"
+$1.owner.loadResponse($3,$2)
+},loadError:function($1,$2){
+var $3=$1.dataRequest
+$3.status="error"
+$1.owner.loadResponse($3,$2)
+},loadTimeout:function($1,$2){
+var $3=$1.dataRequest
+$3.status="timeout"
+$1.owner.loadResponse($3,$2)
+},setRequestError:function($1,$2){
+$1.error=$2
+$1.status=$1.ERROR
+},loadResponse:function($1,$2){
+var $3=LzParam.make()
+var $4=null
+if($2==null){
+this.setRequestError($1,"client could not parse XML from server")
+$1.onstatus.sendEvent($1)
+return
+}
+var $5=$1.proxied
+if($2.childNodes[0].nodeName=="error"){
+this.setRequestError($1,$2.childNodes[0].attributes["msg"])
+$1.onstatus.sendEvent($1)
+return
+}
+if($5){
+var $6="childNodes" in $2.childNodes[1]?$2.childNodes[1].childNodes:null
+if($6!=null){
+for(var $7=0;$7<$6.length;$7++){
+var $8=$6[$7]
+if($8.attributes){
+$3.addValue($8.attributes.name,$8.attributes.value)
+}
+}
+}
+if($2.childNodes[0].childNodes){
+$4=$2.childNodes[0].childNodes[0]
+}
+}else{
+$4=$2
+}
+$1.xmldata=$4
+$1.responseheaders=$3
+$1.rawdata=$1.loader.getResponse()
+$1.onstatus.sendEvent($1)
+}},null)
+var LzHTTPDataRequest=Class.make("LzHTTPDataRequest",LzDataRequest,{method:"GET",postbody:null,proxied:null,multirequest:false,queuerequests:false,queryparams:null,querystring:"",requestheaders:null,getresponsheaders:false,responseheaders:null,cacheable:false,clientcacheable:null,trimwhitespace:false,nsprefix:false,xmldata:null,loadtime:0,secure:false,secureport:null,loader:null},null)
+var httpdataprovider=LzHTTPDataProvider.make()
+var defaultdataprovider=httpdataprovider
+var LzDataset=Class.make("LzDataset",[LzDataElementTrait,LzDataNode,LzNode],{dataprovider:defaultdataprovider,multirequest:false,dataRequest:null,dataRequestClass:LzHTTPDataRequest,timeout:60000,postbody:null,acceptencodings:false,params:null,nsprefix:false,getresponseheaders:false,querytype:"GET",trimwhitespace:false,nodeType:LzDataNode.DOCUMENT_NODE,cacheable:false,querystring:null,autorequest:false,headers:null,proxied:null,responseheaders:null,construct:function($1,$2){
 this.queuerequests=false
-this._createdParent=null
-if(!($1 instanceof LzDatasource)){
 this.oncanvas=$1==canvas||$1==null
-this._dsrc=LzHTTPDatasource.make(canvas,{name:"anonHTTPDS"+LzDataset.anonDatasourceNum++})
-this._dsrc.repset=true
-this._createdParent=this._dsrc
 if(this._instanceAttrs["name"]==null){
 this._instanceAttrs["name"]="localdata"
 }
-}else{
-this._dsrc=$1
-this.oncanvas=true
-}
 if("port" in $2&&$2.port&&!("secureport" in $2&&$2.secureport)){
 $2.secureport=$2.port
 }
@@ -6889,17 +7861,16 @@
 if("src" in $2&&$2.src){
 this.src=$2.src
 }else{
-this.src="src" in this._dsrc?this._dsrc.src:null
+this.src=null
 }
 this.ownerDocument=this
 if("timeout" in $2&&$2.timeout){
 this.timeout=$2.timeout
 }else{
 this.timeout=canvas.dataloadtimeout
-}
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 },setName:function($1){
-this.nextMethod(arguments.callee,"setName").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["setName"]:this.nextMethod(arguments.callee,"setName")).apply(this,arguments)
 this.nodeName=$1
 if(!("datasets" in canvas)||null==canvas.datasets){
 canvas.datasets={}
@@ -6928,13 +7899,7 @@
 }
 if(canvas.datasets[$2]===this){
 delete canvas.datasets[$2]
-}
-var $3=this.getOption("dsloader")
-$3.destroy()
-this.nextMethod(arguments.callee,"destroy").apply(this,arguments)
-if(this._createdParent){
-this._createdParent.destroy($1)
-}
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).apply(this,arguments)
 },getSrc:function(){
 return this.src
 },getQueryString:function(){
@@ -6944,14 +7909,12 @@
 return this.querystring
 }
 },getParams:function(){
-if(typeof this.params=="undefined"){
+if(this.params==null){
 LzParam.make(this,{name:"params"})
 }
 return this.params
 },getStatusCode:function(){
 return 200
-},gotRawData:function($1){
-this._dsrc.processRawData(this,$1)
 },setData:function($1,$2){
 if($1==null){
 return
@@ -6966,12 +7929,18 @@
 this.responseheaders.destroy()
 }
 this.responseheaders=$2
+if(this.ondata.ready){
 this.ondata.sendEvent(this)
+}
 },gotError:function($1){
 this.errorstring=$1
+if(this.onerror.ready){
 this.onerror.sendEvent(this)
+}
 },gotTimeout:function(){
+if(this.ontimeout.ready){
 this.ontimeout.sendEvent(this)
+}
 },getContext:function(){
 return this
 },getDataset:function(){
@@ -6981,6 +7950,7 @@
 $1.p=this.getContext()
 return $1
 },setQueryString:function($1){
+this.params=null
 if(typeof $1=="object"){
 if($1 instanceof LzParam){
 this.querystring=$1.toString()
@@ -6999,13 +7969,13 @@
 this.doRequest()
 }
 },setSrc:function($1){
-this.src=$1
-this._dsrc.setAttribute("src",$1)
+var $2=LzURL.make($1)
+this.querystring=$2.query
+$2.query=null
+this.src=$2.toString()
 if(this.autorequest){
 this.doRequest()
 }
-},setURL:function($1){
-this.setSrc($1)
 },setProxyRequests:function($1){
 if(typeof $1!="string"){
 
@@ -7020,8 +7990,9 @@
 this.reqOnInitDel=LzDelegate.make(this,"doRequest",this,"oninit")
 }
 },getLoadTime:function(){
-return this._dsrc.getLoadTimeForDataset(this)
+
 },setQueryParam:function($1,$2){
+this.querystring=null
 if(!this.params){
 LzParam.make(this,{name:"params"})
 }
@@ -7030,6 +8001,7 @@
 this.doRequest()
 }
 },setQueryParams:function($1){
+this.querystring=null
 if(!this.params){
 this.params=LzParam.make(this,{name:"params"})
 }
@@ -7043,8 +8015,56 @@
 if($1&&this.autorequest){
 this.doRequest()
 }
+},isProxied:function(){
+var $1=canvas.proxied
+if(this.proxied!=null&&this.proxied!="inherit"){
+$1=this.proxied=="true"
+}
+if(this.proxied!=null&&this.proxied!="inherit"){
+$1=this.proxied=="true"
+}
+return $1
 },doRequest:function(){
-this._dsrc.doRequest(this)
+if(this.multirequest||this.dataRequest==null){
+this.dataRequest=this.dataRequestClass.make(this)
+}
+var $1=this.dataRequest
+$1.src=this.src
+$1.timeout=this.timeout
+$1.status=$1.READY
+$1.method=this.querytype
+var $2=null
+if(this.params){
+$2=this.params.getValue("lzpostbody")
+}
+if($2!=null){
+$1.postbody=$2
+}
+$1.proxied=this.isProxied()
+$1.queuerequests=this.queuerequests
+$1.queryparams=this.params
+$1.querystring=this.querystring
+$1.requestheaders=this.headers
+$1.getresponseheaders=this.getresponseheaders
+$1.secureport=this.secureport
+$1.cacheable=this.cacheable
+$1.clientcacheable=this.clientcacheable
+$1.trimwhitespace=this.trimwhitespace
+$1.nsprefix=this.nsprefix
+this.dsloadDel=LzDelegate.make(this,"handleDataResponse",$1,"onstatus")
+this.dataprovider.doRequest($1)
+},handleDataResponse:function($1){
+if($1.status==LzDataRequest.SUCCESS){
+this.setData($1.xmldata,$1.responseheaders)
+}else{
+if($1.status==LzDataRequest.ERROR){
+this.gotError($1.error)
+}else{
+if($1.status==LzDataRequest.TIMEOUT){
+this.gotTimeout()
+}
+}
+}
 },setAutorequest:function($1){
 this.autorequest=$1
 this.setRequest($1)
@@ -7057,11 +8077,13 @@
 this.headers.remove()
 }
 },getResponseHeader:function($1){
-return this.responseheaders.getValueNoCase($1)
+return this.dataRequest.responseheaders[$1]
 },setQueryType:function($1){
-this._dsrc.setQueryType($1.toUpperCase())
+this.querytype=$1.toUpperCase()
+},setPostBody:function($1){
+this.postbody=$1
 },abort:function(){
-this._dsrc.abortLoadForDataset(this)
+this.dataprovider.abortLoadForRequest(this.dataRequest)
 },getAllResponseHeaders:function(){
 return this.responseheaders
 },setHeader:function($1,$2){
@@ -7070,14 +8092,13 @@
 }
 this.headers.setValue($1,$2)
 },setInitialData:function($1){
-this.initialdata=$1
 if($1!=null){
 var $2=LzDataNode.stringToLzData($1,this.trimwhitespace,this.nsprefix)
 this.setData($2.childNodes)
 }
 },toString:function(){
 return "LzDataset "+":"+this.name
-}},{tagname:"dataset",anonDatasourceNum:0});(function(){
+}},{tagname:"dataset"});(function(){
 with(LzDataset){
 with(LzDataset.prototype){
 DeclareEvent(prototype,"ondata")
@@ -7134,9 +8155,13 @@
 $2=$2.$p
 }while($2&&$2.$n<=this.p.$n)
 },gotError:function($1){
+if(this.onerror.ready){
 this.onerror.sendEvent($1)
+}
 },gotTimeout:function($1){
+if(this.ontimeout.ready){
 this.ontimeout.sendEvent($1)
+}
 },getXPath:function($1){
 var $2=this.xpathQuery($1)
 var $3
@@ -7292,8 +8317,10 @@
 this.__LZoldOndataWarn=true
 }
 this.p=this.context
+if(this.ondata.ready){
 this.ondata.sendEvent(this.p)
 }
+}
 return
 }
 this.__LZsendUpdate()
@@ -7342,14 +8369,20 @@
 return false
 }
 if(this.__LZdchanged){
+if(this.ondata.ready){
 this.ondata.sendEvent(this.data)
+}
 this.__LZdchanged=false
 }
 if(this.__LZpchanged){
+if(this.onp.ready){
 this.onp.sendEvent(this.p)
+}
 this.__LZpchanged=false
+if(this.onDocumentChange.ready){
 this.onDocumentChange.sendEvent({who:this.p,type:2,what:"context"})
 }
+}
 return true
 },isValid:function(){
 return this.p!=null
@@ -7362,6 +8395,9 @@
 }
 this.__LZsendUpdate($2)
 },ppcache:{},parsePath:function($1){
+if($1 instanceof LzDatapath){
+$1=$1.xpath
+}
 var $2=this.ppcache[$1]
 if($2){
 var $3=$2["islocaldata"]
@@ -7421,7 +8457,6 @@
 }
 }
 }
-continue
 }else{
 if(!$9){
 $4=this.nodeByName($8,$11,$2)
@@ -7486,7 +8521,7 @@
 $2=$4[0]
 }
 }
-if($2==null){
+if(!$2){
 return false
 }
 }
@@ -7500,7 +8535,7 @@
 if(!$3){
 var $3=this.p
 if(!this.p){
-return
+return null
 }
 }
 if($3.childNodes){
@@ -7519,62 +8554,32 @@
 return $4
 },__LZsetRerunXPath:function($1){
 this.rerunxpath=$1
+if(this.onrerunxpath.ready){
 this.onrerunxpath.sendEvent($1)
+}
 },dupePointer:function(){
 var $1=LzDatapointer.make()
 $1.setFromPointer(this)
 return $1
-},selectNext:function($1){
-$1=$1?$1:1
-var $2=this.p
-while($1--){
-if(!$2){
-return false
+},__LZdoSelect:function($1,$2){
+$2=$2?$2:1
+var $3=this.p
+for(;$3!=null&&$2>0;$2--){
+$3=$3[$1]()
 }
-$2=$2.getNextSibling()
+if($3!=null){
+this.setPointer($3)
+return true
 }
-if($2==null){
 return false
-}else{
-this.setPointer($2)
-return true
-}
+},selectNext:function($1){
+return this.__LZdoSelect("getNextSibling",$1)
 },selectPrev:function($1){
-$1=$1?$1:1
-var $2=this.p
-while($1--){
-$2=$2.getPreviousSibling()
-}
-if($2==null){
-return false
-}else{
-this.setPointer($2)
-return true
-}
+return this.__LZdoSelect("getPreviousSibling",$1)
 },selectChild:function($1){
-$1=$1?$1:1
-var $2=this.p
-while($1--){
-$2=$2.getFirstChild()
-}
-if($2==null){
-return false
-}else{
-this.setPointer($2)
-return true
-}
+return this.__LZdoSelect("getFirstChild",$1)
 },selectParent:function($1){
-$1=$1?$1:1
-var $2=this.p
-while($1--){
-$2=$2.parentNode
-}
-if($2==null){
-return false
-}else{
-this.setPointer($2)
-return true
-}
+return this.__LZdoSelect("getParent",$1)
 },selectNextParent:function(){
 var $1=this.p
 if(this.selectParent()&&this.selectNext()){
@@ -7650,7 +8655,7 @@
 }
 },getNodeCount:function(){
 if(!this.p){
-return
+return 0
 }
 return this.p.childNodes.length||0
 },addNode:function($1,$2,$3){
@@ -7698,7 +8703,12 @@
 if($2.operatorArgs!=null){
 return $1[$2.operator]($2.operatorArgs)
 }
-var $4=$2.operator.split(".")
+var $4
+if($2.operator.indexOf("attributes.")==0){
+$4=["attributes",$2.operator.substr(11)]
+}else{
+$4=$2.operator.split(".")
+}
 var $5=$1
 for(var $6=0;$6<$4.length;$6++){
 var $7=$4[$6]
@@ -7797,7 +8807,7 @@
 }
 $4=$4.parentNode
 }while($4&&$4!=$2.ownerDocument)
-if($3){
+if($3&&this.ondata.ready){
 this.ondata.sendEvent(this.data)
 }
 return $3
@@ -7824,8 +8834,7 @@
 delete this.data
 delete this.__LZlastdotdot
 delete this.context
-delete this.__LZtracking
-this.nextMethod(arguments.callee,"destroy").apply(this,arguments)
+delete this.__LZtracking;(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).apply(this,arguments)
 },__LZsetTracking:function($1,$2){
 var $3=this.__LZtracking
 var $4=this.__LZtrackDel
@@ -7866,23 +8875,20 @@
 DeclareEvent(prototype,"onerror")
 DeclareEvent(prototype,"ontimeout")
 DeclareEvent(prototype,"onrerunxpath")
-getXPath.dependencies=function($1,$2,$3){
-var $4=this.parsePath($3)
-return [$4.hasDotDot?$2.context.getContext().ownerDocument:$2,"DocumentChange"]
-}
 xpathQuery.dependencies=function($1,$2,$3){
 if(this.parsePath){
 var $4=this.parsePath($3)
 return [$4.hasDotDot?$2.context.getContext().ownerDocument:$2,"DocumentChange"]
 }else{
-return null
+return [$2,"DocumentChange"]
 }
 }
+getXPath.dependencies=xpathQuery.dependencies
 }
 }
 })()
 var LzParam=Class.make("LzParam",LzNode,{construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.d={}
 },parseQueryString:function($1){
 var $2=$1.split("&")
@@ -7923,7 +8929,7 @@
 }
 },setValue:function($1,$2,$3){
 if($3){
-$2=escape($2)
+$2=encodeURIComponent($2)
 }
 var $4=this.d[$1]
 if($4==null){
@@ -7938,7 +8944,7 @@
 }
 },addValue:function($1,$2,$3){
 if($3){
-$2=escape($2)
+$2=encodeURIComponent($2)
 }
 var $4=this.d[$1]
 if($4==null){
@@ -8007,7 +9013,7 @@
 $5+=$4
 }
 $5+=$8[$9]+$1
-$5+=$3?escape($8[$9+1]):$8[$9+1]
+$5+=$3?encodeURIComponent($8[$9+1]):$8[$9+1]
 $6=true
 }
 }
@@ -8208,7 +9214,7 @@
 return $1
 },noncontext:true},null)
 var LzDatapath=Class.make("LzDatapath",LzDatapointer,{datacontrolsvisibility:true,__LZtakeDPSlot:true,pooling:null,replication:null,sortpath:null,sortorder:null,construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 if(!("data" in this.immediateparent)){
 this.immediateparent.data=null
 }
@@ -8268,7 +9274,7 @@
 }
 },__LZsendUpdate:function($1,$2){
 var $3=this.__LZpchanged
-if(!this.nextMethod(arguments.callee,"__LZsendUpdate").apply(this,arguments)){
+if(!(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZsendUpdate"]:this.nextMethod(arguments.callee,"__LZsendUpdate")).apply(this,arguments)){
 return false
 }
 if(this.immediateparent.isinited){
@@ -8293,7 +9299,7 @@
 var $3=$1||$2.data!=this.data||this.parsedPath&&this.parsedPath.operator=="attributes"
 this.data=this.data==null?null:this.data
 $2.data=this.data
-if($3){
+if($3&&$2.ondata.ready){
 $2.ondata.sendEvent(this.data)
 }
 if(this.parsedPath&&(this.parsedPath.operator!=null||this.parsedPath.aggOperator!=null)&&$3){
@@ -8328,8 +9334,7 @@
 }
 }
 }
-}
-this.nextMethod(arguments.callee,"setDataContext").call(this,$1)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["setDataContext"]:this.nextMethod(arguments.callee,"setDataContext")).call(this,$1)
 },destroy:function($1){
 this.setName=null
 this.__LZupdateLocked=true
@@ -8345,7 +9350,7 @@
 }
 }
 if(!this.immediateparent.__LZdeleted){
-if(this.__LZdepChildren.length){
+if(this.__LZdepChildren!=null&&this.__LZdepChildren.length){
 var $4=this.immediateparent.searchParents("datapath").datapath
 for(var $3=0;$3<this.__LZdepChildren.length;$3++){
 this.__LZdepChildren[$3].setDataContext($4,true)
@@ -8354,8 +9359,7 @@
 }
 if(this.immediateparent.datapath==this){
 delete this.immediateparent.datapath
-}
-this.nextMethod(arguments.callee,"destroy").apply(this,arguments)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).apply(this,arguments)
 },updateData:function(){
 if(!arguments[0]&&this.p){
 this.p.__LZlockFromUpdate(this)
@@ -8388,15 +9392,19 @@
 },retrieveData:function(){
 return this.updateData()
 },__LZHandleDocChange:function($1){
-if(this.nextMethod(arguments.callee,"__LZHandleDocChange").apply(this,arguments)){
+if((arguments.callee.superclass?arguments.callee.superclass.prototype["__LZHandleDocChange"]:this.nextMethod(arguments.callee,"__LZHandleDocChange")).apply(this,arguments)){
+if(this.immediateparent.ondata.ready){
 this.immediateparent.ondata.sendEvent(this.data)
+}
+if(this.onDocumentChange.ready){
 this.onDocumentChange.sendEvent($1)
 }
+}
 },toString:function(){
 return "Datapath for "+this.immediateparent
 },_dpevents:["ondata","onerror","ontimeout"],__LZcheckChange:function($1){
-if(!this.nextMethod(arguments.callee,"__LZcheckChange").apply(this,arguments)){
-if($1.who.childOf(this.p,true)){
+if(!(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZcheckChange"]:this.nextMethod(arguments.callee,"__LZcheckChange")).apply(this,arguments)){
+if($1.who.childOf(this.p,true)&&this.onDocumentChange.ready){
 this.onDocumentChange.sendEvent($1)
 }
 }
@@ -8404,7 +9412,7 @@
 var $4
 var $5
 if(!$1||!$2){
-return this.nextMethod(arguments.callee,"__LZsetTracking").call(this,$1,true)
+return(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZsetTracking"]:this.nextMethod(arguments.callee,"__LZsetTracking")).call(this,$1,true)
 }
 $4=this.__LZtracking
 $5=this.__LZtrackDel
@@ -8495,7 +9503,7 @@
 if(global[$5] instanceof LzNode){
 global[$5]=null
 }
-$2.xpath=this._ignoreAttribute
+$2.xpath=LzNode._ignoreAttribute
 if($1.sortpath!=null){
 $2.sortpath=$1.sortpath
 }
@@ -8509,8 +9517,7 @@
 $1.__LZdotdotCheckDel.unregisterAll()
 }
 delete $1.__LZspecialDotDot
-}
-this.nextMethod(arguments.callee,"construct").call(this,$3.parent,$2)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).call(this,$3.parent,$2)
 if($3.parent!=$3.immediateparent){
 $3.immediateparent[$2.name]=this
 }
@@ -8519,15 +9526,15 @@
 this.cloneClass=$3.constructor
 this.cloneParent=$3.parent
 this.cloneAttrs=LzInheritedHash.make($3._instanceAttrs)
-this.cloneAttrs.datapath=this._ignoreAttribute
+this.cloneAttrs.datapath=LzNode._ignoreAttribute
 this.cloneAttrs.$datapath={name:"datapath"}
 this.cloneAttrs.$datapath.attrs={datacontrolsvisibility:$1.datacontrolsvisibility,__LZmanager:this}
-this.cloneAttrs.id=this._ignoreAttribute
-this.cloneAttrs.name=this._ignoreAttribute
+this.cloneAttrs.id=LzNode._ignoreAttribute
+this.cloneAttrs.name=LzNode._ignoreAttribute
 var $6=false
 if($3._instanceAttrs.$refs&&$3._instanceAttrs.$refs.datapath){
 this.cloneAttrs.$refs=LzInheritedHash.make(this.cloneAttrs.$refs)
-this.cloneAttrs.$refs.datapath=this._ignoreAttribute
+this.cloneAttrs.$refs.datapath=LzNode._ignoreAttribute
 var $7=$3._instanceAttrs.$refs.datapath
 this._t=$7.dependencies
 $6=true
@@ -8552,7 +9559,7 @@
 }else{
 this.cloneChildren=[]
 }
-this.visible=$1.datacontrolsvisibility||$3.visible
+this.visible=$1.datacontrolsvisibility||(!$3.isinited&&"visible" in $3._instanceAttrs?$3._instanceAttrs.visible:$3.visible)
 if($2.pooling!=null){
 this.pooling=$2.pooling
 }
@@ -8578,9 +9585,10 @@
 }
 },getNodeOffset:function($1){
 if(this.nodes!=null){
-for(var $2=0;$2<this.nodes.length;$2++){
-if($1==this.nodes[$2]){
-return $2
+var $2=this.nodes.length
+for(var $3=0;$3<$2;$3++){
+if($1==this.nodes[$3]){
+return $3
 }
 }
 }
@@ -8630,27 +9638,41 @@
 }
 return $7
 },__LZHandleMultiNodes:function($1){
+var $2=this.parent&&this.parent.layouts?this.parent.layouts:[]
+for(var $3 in $2){
+$2[$3].lock()
+}
 this.hasdata=true
-var $2=this.nodes
+var $4=this.nodes
 this.nodes=$1
+if(this.onnodes.ready){
 this.onnodes.sendEvent(this.nodes)
+}
 if(this.__LZspecialDotDot){
 this.__LZsetupDotDot($1[0])
 }
 if(this.orderpath!=null){
 this.nodes=this.mergesort(this.nodes,0,this.nodes.length-1)
 }
-this.__LZadjustVisibleClones($2,true)
-for(var $3=0;$3<this.clones.length;$3++){
-var $4=this.clones[$3]
-var $5=$3+this.__LZdataoffset
-$4.clonenumber=$5
+this.__LZadjustVisibleClones($4,true)
+var $5=this.clones.length
+for(var $3=0;$3<$5;$3++){
+var $6=this.clones[$3]
+var $7=$3+this.__LZdataoffset
+$6.clonenumber=$7
 if(this.nodes){
-$4.datapath.setClonePointer(this.nodes[$5])
+$6.datapath.setClonePointer(this.nodes[$7])
 }
-$4.onclonenumber.sendEvent($5)
+if($6.onclonenumber.ready){
+$6.onclonenumber.sendEvent($7)
 }
+}
+if(this.onclones.ready){
 this.onclones.sendEvent(this.clones)
+}
+for(var $3 in $2){
+$2[$3].unlock()
+}
 },__LZadjustVisibleClones:function($1,$2){
 var $3=this.__LZdiffArrays($1,this.nodes)
 if(!this.pooling){
@@ -8661,7 +9683,7 @@
 }
 LzInstantiator.enableDataReplicationQueuing()
 while(this.nodes.length>this.clones.length){
-this.clones[this.clones.length]=this.getNewClone()
+this.clones.push(this.getNewClone())
 }
 LzInstantiator.clearDataReplicationQueue()
 while(this.nodes.length<this.clones.length){
@@ -8734,8 +9756,7 @@
 },setXPath:function($1){
 if(this.__LZpreventXPathUpdate){
 return
-}
-this.nextMethod(arguments.callee,"setXPath").apply(this,arguments)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["setXPath"]:this.nextMethod(arguments.callee,"setXPath")).apply(this,arguments)
 },handleDeletedNode:function($1){
 var $2=this.clones[$1]
 if(this.pooling){
@@ -8747,39 +9768,45 @@
 this.nodes.splice($1,1)
 this.clones.splice($1,1)
 },getCloneForNode:function($1){
-for(var $2=0;$2<this.clones.length;$2++){
-if(this.clones[$2].datapath.p==$1){
-return this.clones[$2]
+var $2=this.clones.length
+for(var $3=0;$3<$2;$3++){
+if(this.clones[$3].datapath.p==$1){
+return this.clones[$3]
 }
 }
 },toString:function(){
 return "ReplicationManager in "+this.immediateparent
 },setVisible:function($1){
 this.visible=$1
-for(var $2=0;$2<this.clones.length;$2++){
-this.clones[$2].setVisible($1)
+var $2=this.clones.length
+for(var $3=0;$3<$2;$3++){
+this.clones[$3].setVisible($1)
 }
+if(this.onvisible.ready){
 this.onvisible.sendEvent($1)
+}
 },__LZHandleDocChange:function($1){
-this.p=this.context.getContext()
-this.nextMethod(arguments.callee,"__LZHandleDocChange").apply(this,arguments)
+this.p=this.context.getContext();(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZHandleDocChange"]:this.nextMethod(arguments.callee,"__LZHandleDocChange")).apply(this,arguments)
 delete this.p
 },__LZcheckChange:function($1){
 this.p=this.nodes[0]
-var $2=this.nextMethod(arguments.callee,"__LZcheckChange").apply(this,arguments)
+var $2=(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZcheckChange"]:this.nextMethod(arguments.callee,"__LZcheckChange")).apply(this,arguments)
 delete this.p
 if(!$2){
 var $3=$1.who
-for(var $4=0;$4<this.clones.length;$4++){
-var $5=this.clones[$4]
-if($5.datapath.__LZneedsOpUpdate($1)){
-$5.datapath.__LZsetData()
+var $4=this.clones.length
+for(var $5=0;$5<$4;$5++){
+var $6=this.clones[$5]
+if($6.datapath.__LZneedsOpUpdate($1)){
+$6.datapath.__LZsetData()
 }
-if($3.childOf($5.datapath.p,true)){
-$5.datapath.onDocumentChange.sendEvent($1)
+if($3.childOf($6.datapath.p,true)){
+if($6.datapath.onDocumentChange.ready){
+$6.datapath.onDocumentChange.sendEvent($1)
 }
 }
 }
+}
 },__LZneedsOpUpdate:function(){
 return false
 },getContext:function($1){
@@ -8798,7 +9825,9 @@
 }
 }
 $1.datapath.__LZtrackDel.unregisterAll()
+if($1.immediateparent.onremovesubview.ready){
 $1.immediateparent.onremovesubview.sendEvent($1)
+}
 $1.isdetatchedclone=true
 $1.p=null
 },reattachClone:function($1){
@@ -8821,8 +9850,9 @@
 }
 return $3
 },updateData:function($1,$2){
-for(var $3=0;$3<this.clones.length;$3++){
-this.clones[$3].datapath.updateData()
+var $3=this.clones.length
+for(var $4=0;$4<$3;$4++){
+this.clones[$4].datapath.updateData()
 }
 }},{__LZemptyFuntion:function(){
 return
@@ -8849,6 +9879,7 @@
 if(!$3){
 $3=LzHTTPLoader.make(this,$2,$1)
 $1.setOption("dsloader",$3)
+$3.setQueueing($1.queuerequests)
 $3.loadSuccess=this.loadSuccess
 $3.loadError=this.loadError
 $3.loadTimeout=this.loadTimeout
@@ -8924,11 +9955,11 @@
 if(!$2&&$16=="lzpostbody"){
 $14=$10.getValue($16)
 }else{
-$13+=$12+$16+"="+escape($10.getValue($16))
+$13+=$12+$16+"="+encodeURIComponent($10.getValue($16))
 $12="&"
 }
 }
-if($11.length>0){
+if($11!=null&&$11.length>0){
 if($13.length>0){
 $13+=$12+$11
 }else{
@@ -9005,7 +10036,7 @@
 }
 },$pathbinding:true,__LZsendUpdate:function($1,$2){
 var $3=this.__LZpchanged
-if(!this.nextMethod(arguments.callee,"__LZsendUpdate").apply(this,arguments)){
+if(!(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZsendUpdate"]:this.nextMethod(arguments.callee,"__LZsendUpdate")).apply(this,arguments)){
 return
 }
 if($3||this.node[this.setAttr]!=this.data||this.parsedPath.operator=="attributes"){
@@ -9023,7 +10054,7 @@
 }
 this.destroy()
 },setDataContext:function($1){
-this.nextMethod(arguments.callee,"setDataContext").call(this,$1||this.pathparent)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["setDataContext"]:this.nextMethod(arguments.callee,"setDataContext")).call(this,$1||this.pathparent)
 },updateData:function(){
 var $1=this.node[this.setAttr]
 if(this.data==$1){
@@ -9061,8 +10092,7 @@
 if($2.axis!=null){
 this.axis=$2.axis
 }
-this.sizeAxis=this.axis=="x"?"width":"height"
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+this.sizeAxis=this.axis=="x"?"width":"height";(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.mask=$1.immediateparent.immediateparent.mask
 var $3={ignorelayout:true}
 if(this.cloneAttrs.options!=null){
@@ -9166,7 +10196,9 @@
 if(this.nodes){
 $12.datapath.setClonePointer(this.nodes[$4+$11])
 }
+if($12.onclonenumber.ready){
 $12.onclonenumber.sendEvent($11)
+}
 }else{
 this.clones[$11]=$10[$11+$7]
 }
@@ -9186,7 +10218,7 @@
 },toString:function(){
 return "Lazy clone manager in "+this.cloneimmediateparent
 },getCloneForNode:function($1,$2){
-var $3=this.nextMethod(arguments.callee,"getCloneForNode").call(this,$1)||null
+var $3=(arguments.callee.superclass?arguments.callee.superclass.prototype["getCloneForNode"]:this.nextMethod(arguments.callee,"getCloneForNode")).call(this,$1)||null
 if(!$3&&!$2){
 $3=this.getNewClone()
 $3.datapath.setClonePointer($1)
@@ -9204,10 +10236,10 @@
 }
 })()
 var LzResizeReplicationManager=Class.make("LzResizeReplicationManager",LzLazyReplicationManager,{construct:function($1,$2){
-this.nextMethod(arguments.callee,"construct").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
 this.datasizevar="$"+this.getUID()+"track"
 },__LZsetCloneAttrs:function(){
-this.nextMethod(arguments.callee,"__LZsetCloneAttrs").apply(this,arguments)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["__LZsetCloneAttrs"]:this.nextMethod(arguments.callee,"__LZsetCloneAttrs")).apply(this,arguments)
 this.cloneAttrs.setHeight=LzResizeReplicationManager.__LZResizeSetSize
 },getPositionByNode:function($1){
 var $2=-this.spacing
@@ -9306,7 +10338,9 @@
 $23=this.getNewClone()
 $23.clonenumber=$14+$6
 $23.datapath.setClonePointer($15)
+if($23.onclonenumber.ready){
 $23.onclonenumber.sendEvent($14+$6)
+}
 this.clones[$14]=$23
 }
 this.clones[$14]=$23
@@ -9332,7 +10366,7 @@
 with(LzResizeReplicationManager.prototype){
 prototype.pooling=false
 LzResizeReplicationManager.__LZResizeSetSize=function($1,$2){
-this.nextMethod(arguments.callee,"setHeight").call(this,$1)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["setHeight"]:this.nextMethod(arguments.callee,"setHeight")).call(this,$1)
 if($2!=true){
 this.cloneManager.__LZHandleCloneResize(this,$1)
 }
@@ -9507,11 +10541,15 @@
 DeclareEvent(LzGlobalMouse,"onmousemove")
 DeclareEvent(LzGlobalMouse,"onmouseup")
 DeclareEvent(LzGlobalMouse,"onmousedown")
-LzGlobalMouse.__mouseEvent=function($1){
-if(LzGlobalMouse[$1]){
-LzGlobalMouse[$1].sendEvent()
+LzGlobalMouse.__movecounter=0
+LzGlobalMouse.__mouseEvent=function($1,$2){
+if($1=="onmousemove"){
+LzGlobalMouse.__movecounter++
 }
+if(LzGlobalMouse[$1]&&LzGlobalMouse[$1].ready){
+LzGlobalMouse[$1].sendEvent($2)
 }
+}
 var LzModeManager=(new Object())
 DeclareEvent(LzModeManager,"onmode")
 LzModeManager.onmode=null
@@ -9524,7 +10562,9 @@
 }
 LzModeManager.makeModal=function($1){
 this.modeArray.push($1)
+if(this.onmode.ready){
 this.onmode.sendEvent($1)
+}
 var $2=LzFocus.getFocus()
 if($2&&!$2.childOf($1)){
 LzFocus.clearFocus()
@@ -9535,7 +10575,9 @@
 if(this.modeArray[$2]==$1){
 this.modeArray.splice($2,this.modeArray.length-$2)
 var $3=this.modeArray[$2-1]
+if(this.onmode.ready){
 this.onmode.sendEvent($3||null)
+}
 var $4=LzFocus.getFocus()
 if($3&&$4&&!$4.childOf($3)){
 LzFocus.clearFocus()
@@ -9546,21 +10588,23 @@
 }
 LzModeManager.releaseAll=function(){
 this.modeArray=(new Array())
+if(this.onmode.ready){
 this.onmode.sendEvent(null)
 }
+}
 LzModeManager.handleMouseEvent=function($1,$2){
 if($2=="onmouseup"){
 LzTrack.__LZmouseup()
 }
-LzGlobalMouse.__mouseEvent($2)
-if(this.eventsLocked==true){
-return
-}
 var $3=true
 var $4=false
 if($1==null){
 $1=this.__findInputtextSelection()
 }
+LzGlobalMouse.__mouseEvent($2,$1)
+if(this.eventsLocked==true){
+return
+}
 var $5=this.modeArray.length-1
 while($3&&$5>=0){
 var $6=this.modeArray[$5--]
@@ -9619,6 +10663,144 @@
 LzCursor.lock=LzMouseKernel.lock
 LzCursor.unlock=LzMouseKernel.unlock
 LzCursor.restoreCursor=LzMouseKernel.restoreCursor
+function LzURL($1){
+this.protocol=null
+this.host=null
+this.port=null
+this.path=null
+this.file=null
+this.query=null
+this.fragment=null
+if($1!=null){
+this.parseURL($1)
+}
+}
+LzURL.prototype.parseURL=function($1){
+if(this._parsed==$1){
+return
+}
+this._parsed=$1
+var $2=0
+var $3=$1.indexOf(":")
+var $4=$1.indexOf("?",$2)
+var $5=$1.indexOf("#",$2)
+var $6=$1.length
+if($5!=-1){
+$6=$5
+}
+if($4!=-1){
+$6=$4
+}
+if($3!=-1){
+this.protocol=$1.substring($2,$3)
+if($1.substring($3+1,$3+3)=="//"){
+$2=$3+3
+$3=$1.indexOf("/",$2)
+if($3==-1){
+$3=$6
+}
+var $7=$1.substring($2,$3)
+var $8=$7.indexOf(":")
+if($8==-1){
+this.host=$7
+this.port=null
+}else{
+this.host=$7.substring(0,$8)
+this.port=$7.substring($8+1)
+}
+}else{
+$3++
+}
+$2=$3
+}
+$3=$6
+this._splitPath($1.substring($2,$3))
+if($5!=-1){
+this.fragment=$1.substring($5+1,$1.length)
+}else{
+$5=$1.length
+}
+if($4!=-1){
+this.query=$1.substring($4+1,$5)
+}
+}
+LzURL.prototype._splitPath=function($1){
+if($1==""){
+return
+}
+var $2=$1.lastIndexOf("/")
+if($2!=-1){
+this.path=$1.substring(0,$2+1)
+this.file=$1.substring($2+1,$1.length)
+if(this.file==""){
+this.file=null
+}
+return
+}
+this.path=null
+this.file=$1
+}
+LzURL.prototype.dupe=function(){
+var $1=LzURL.make()
+$1.protocol=this.protocol
+$1.host=this.host
+$1.port=this.port
+$1.path=this.path
+$1.file=this.file
+$1.query=this.query
+$1.fragment=this.fragment
+return $1
+}
+LzURL.prototype.toString=function(){
+var $1=""
+if(this.protocol!=null){
+$1+=this.protocol+":"
+if(this.host!=null){
+$1+="//"+this.host
+if(null!=this.port&&LzBrowser.defaultPortNums[this.protocol]!=this.port){
+$1+=":"+this.port
+}
+}
+}
+if(this.path!=null){
+$1+=this.path
+}
+if(null!=this.file){
+$1+=this.file
+}
+if(null!=this.query){
+$1+="?"+this.query
+}
+if(null!=this.fragment){
+$1+="#"+this.fragment
+}
+return $1
+}
+LzURL.merge=function($1,$2){
+var $3=$1.dupe()
+if($1.protocol==null){
+$3.protocol=$2.protocol
+}
+if($1.host==null){
+$3.host=$2.host
+}
+if($1.port==null){
+$3.port=$2.port
+}
+if($1.path==null){
+$3.path=$2.path
+}
+if($1.file==null){
+$3.file=$2.file
+}
+if($1.query==null){
+$3.query=$2.query
+}
+if($1.fragment==null){
+$3.fragment=$2.fragment
+}
+return $3
+}
 LzModeManager.rawMouseEvent=function($1){
 this.handleMouseEvent(null,$1)
 }
@@ -9626,8 +10808,10 @@
 this.handleMouseEvent($1,$2)
 }
 LzModeManager.__findInputtextSelection=function(){
-return LzInputTextSprite.prototype.__focusedView
+if(LzInputTextSprite.prototype.__focusedSprite&&LzInputTextSprite.prototype.__focusedSprite.owner){
+return LzInputTextSprite.prototype.__focusedSprite.owner
 }
+}
 var LzBrowser=(new Object)
 LzBrowser.postToLps=true
 LzBrowser.loadURL=function($1,$2,$3){
@@ -9678,21 +10862,8 @@
 }
 }
 LzBrowser.getInitArg=function($1){
-var $2=this.getLoadURLAsLzURL()
-var $3=$2.query
-if($3&&$3.length){
-var $4=$3.split("&")
-for(var $5=0;$5<$4.length;$5++){
-var $6=$4[$5]
-var $7=$6.indexOf($1+"=")
-if($7>-1){
-$7=$6.indexOf("=")
-return $6.substring($7+1)
+return global[$1]
 }
-}
-}
-return null
-}
 LzBrowser.defaultPortNums={http:80,https:443}
 LzBrowser.getBaseURL=function($1,$2){
 var $3=this.getLoadURLAsLzURL()
@@ -9760,78 +10931,6 @@
 LzBrowser.urlUnescape=function($1){
 return unescape($1)
 }
-function LzURL($1){
-if($1!=null){
-this.parseURL($1)
-}
-}
-LzURL.prototype.parseURL=function($1){
-if(this._parsed==$1){
-return
-}
-this._parsed=$1
-var $2=0
-var $3=$1.indexOf("://")
-if($3==-1){
-return
-}
-this.protocol=$1.substring($2,$3)
-$2=$3+3
-$3=$1.indexOf("/",$2)
-if($3==-1){
-return
-}
-var $4=$1.substring($2,$3)
-var $5=$4.indexOf(":")
-if($5==-1){
-this.host=$4
-this.port=LzBrowser.defaultPortNums[this.protocol]
-}else{
-this.host=$4.substring(0,$5)
-this.port=$4.substring($5+1)
-}
-$2=$3
-$3=$1.lastIndexOf("/")+1
-if($3==0){
-this.path=$1.substring($2)
-}else{
-this.path=$1.substring($2,$3)
-}
-$2=$3
-$3=$1.indexOf("?",$2)
-if($3==-1){
-this.file=$1.substring($2)
-return
-}else{
-this.file=$1.substring($2,$3)
-}
-$2=$3+1
-this.query=$1.substring($2)
-}
-LzURL.prototype.dupe=function(){
-var $1=LzURL.make()
-$1.protocol=this.protocol
-$1.host=this.host
-$1.port=this.port
-$1.path=this.path
-$1.file=this.file
-$1.query=this.query
-return $1
-}
-LzURL.prototype.toString=function(){
-var $1=this.protocol+"://"+this.host
-if(null!=this.port&&LzBrowser.defaultPortNums[this.protocol]!=this.port){
-$1+=":"+this.port
-}
-$1+=this.path
-if(null!=this.file){
-$1+=this.file
-}
-if(null!=this.query){
-$1+="?"+this.query
-}
-return $1
-}
 LzBrowser.usePost=function(){
 return this.postToLps&&this.supportsPost()
 }
@@ -9860,17 +10959,23 @@
 LzKeys.downKeysHash[$3]=$4
 if($2){
 if($4){
+if(LzKeys.onkeydown.ready){
 LzKeys.onkeydown.sendEvent($2)
+}
 }else{
+if(LzKeys.onkeyup.ready){
 LzKeys.onkeyup.sendEvent($2)
 }
 }
 }
 }
+}
 LzKeys.__mousewheelEvent=function($1){
 LzKeys.mousewheeldelta=$1
+if(LzKeys.onmousewheeldelta.ready){
 LzKeys.onmousewheeldelta.sendEvent($1)
 }
+}
 LzKeys.isKeyDown=function($1){
 $1=$1.toLowerCase()
 return LzKeys.downKeysHash[$1]==true
@@ -9925,13 +11030,562 @@
 LzKeys.keyCodes['"']=222
 LzKeys.keyCodes["'"]=222
 LzKeys.keyCodes["IME"]=229
-var LzTrack=(new Object)
-LzTrack.__LZreg=(new Object)
-LzTrack.__LZactivegroups=null
-LzTrack.__LZtrackDel=LzDelegate.make(LzTrack,"__LZtrack")
-LzTrack.__LZoptimizeforaxis="x"
-LzTrack.__LZmouseupDel=LzDelegate.make(LzTrack,"__LZmouseup",LzGlobalMouse,"onmouseup")
-LzTrack.register=function($1,$2){
+var LzHistory=(new Object)
+LzHistory.isReady=true
+LzHistory.setHistory=function($1){
+Lz._setHash($1)
+this.__lzloading=true
+}
+LzHistory.getPersist=function($1){
+
+}
+LzHistory.offset=0
+LzHistory.__lzdirty=false
+LzHistory.__lzhistq=[]
+LzHistory.__lzcurrstate={}
+LzHistory.__lzloading=false
+LzHistory.__lzloadcache={}
+LzHistory.__loadcacheused=false
+DeclareEvent(LzHistory,"onoffset")
+LzHistory.receiveHistory=function($1){
+$1*=1
+if(!$1){
+$1=0
+}
+if($1>this.__lzhistq.length-1){
+$1=this.__lzhistq.length
+}
+this.offset=$1
+if(this.onoffset.ready){
+this.onoffset.sendEvent($1)
+}
+var $2=this.__lzhistq[$1]
+for(var $3 in $2){
+var $1=$2[$3]
+global[$1.c].setAttribute($1.n,$1.v)
+}
+if(this.__loadcacheused){
+var $4=this.__lzhistq[this.offset]
+if($4==null){
+$4={}
+}
+var $3
+for($3 in this.__lzloadcache){
+$4[$3]=this.__lzloadcache[$3]
+}
+this.__lzhistq[this.offset]=$4
+this.__lzloadcache={}
+this.__loadcacheused=false
+}
+this.__lzloading=false
+}
+LzHistory.receiveEvent=function($1,$2){
+canvas[$1]=$2
+if(canvas["on"+$1].ready){
+canvas["on"+$1].sendEvent($2)
+}
+}
+LzHistory.getCanvasAttribute=function($1){
+return canvas[$1]
+}
+LzHistory.setCanvasAttribute=LzHistory.receiveEvent
+LzHistory.callMethod=function($1){
+return eval($1)
+}
+LzHistory.save=function($1,$2,$3){
+if($3==null){
+$3=global[$1][$2]
+}
+if(this.__lzloading){
+this.__lzloadcache[$1]={c:$1,n:$2,v:$3}
+this.__loadcacheused=true
+}else{
+this.__lzcurrstate[$1]={c:$1,n:$2,v:$3}
+this.__lzdirty=true
+}
+}
+LzHistory.commit=function(){
+if(!this.__lzdirty){
+return
+}
+this.__lzhistq[this.offset]=this.__lzcurrstate
+this.__lzhistq.length=this.offset+1
+this.__lzcurrstate={}
+this.__lzdirty=false
+}
+LzHistory.move=function($1){
+this.commit()
+if(!$1){
+$1=1
+}
+var $2=this.offset+$1
+if(0>=$2){
+$2=0
+}
+if(this.__lzhistq.length>=$2){
+this.setHistory($2)
+}
+}
+LzHistory.next=function(){
+this.move(1)
+}
+LzHistory.prev=function(){
+this.move(-1)
+}
+LzHistory.clear=function(){
+this.__lzhistq=[]
+this.offset=0
+if(this.onoffset.ready){
+this.onoffset.sendEvent(0)
+}
+}
+LzHistory.setPersist=function(){
+
+}
+Lz.__dhtmlhistoryready=true
+function LzCSSStyleRule(){
+
+}
+LzCSSStyleRule.prototype.properties=null
+LzCSSStyleRule.prototype.selector=null
+LzCSSStyleRule.prototype.specificity=0
+LzCSSStyleRule.prototype.getSpecificity=function(){
+if(!this.specificity){
+if(this.parsed.type==LzCSSStyle._sel_compound){
+for(var $1=0;$1<this.parsed.length;$1++){
+this.specificity+=LzCSSStyle.getSelectorSpecificity(this.parsed[$1])
+}
+}else{
+this.specificity=LzCSSStyle.getSelectorSpecificity(this.parsed)
+}
+}
+return this.specificity
+}
+LzCSSStyleRule._getSimpleSelectorSpecificity=function($1,$2){
+var $3=$1[$2]
+if($2=="simpleselector"){
+return 1
+}
+if($3.indexOf("#")>=0){
+return 100
+}
+if($3.indexOf("[")>=0){
+return 10
+}
+return 1
+}
+var LzCSSStyle={}
+LzCSSStyle.getComputedStyle=function($1){
+var $2=LzCSSStyleDeclaration.make()
+$2.setNode($1)
+return $2
+}
+LzCSSStyle.__LZRuleCache={}
+LzCSSStyle.__LZPropertyCache={}
+LzCSSStyle.getPropertyValueFor=function($1,$2){
+if(!$1||!$2){
+return
+}
+var $3=$1
+while($3!=canvas){
+var $4=$3.__LZUID
+var $5=this.__LZPropertyCache[$4+$2]
+if($5!=null){
+return $5
+}
+var $6=this.__LZRuleCache[$4]
+if(!$6){
+$6=(new Array())
+var $7
+for(var $8=this._rules.length-1;$8>=0;$8--){
+$7=this._rules[$8]
+var $9=$7.parsed
+if($9.type==this._sel_compound){
+var $10=$3
+var $11=$9.length-1
+var $12=true
+var $13=false
+while($10!=canvas){
+var $14=$9[$11]
+t=$14.type
+if(t==this._sel_star||t==this._sel_id&&$14.id==$10.id||t==this._sel_tag&&($14.classname in lz&&$10 instanceof lz[$14.classname]||$14.classname in global&&$10 instanceof global[$14.classname])||t==this._sel_attribute&&$10[$14.attrname]==$14.attrvalue||t==this._sel_tagAndAttr&&$10[$14.attrname]==$14.attrvalue&&($14.classname in lz&&$10 instanceof lz[$14.classname]||$14.classname in global&&$10 instanceof global[$14.classname])||t==this._sel_compound&&this._compoundSelectorApplies($14,$10,true)){
+if($11--==0){
+$13=true
+break
+}
+}else{
+if($12){
+$13=false
+break
+}
+}
+$10=$10.parent
+$12=false
+}
+if($13){
+$6.push($7)
+}
+}else{
+if($9.type==this._sel_star||$9.type==this._sel_id&&$9.id==$3.id||$9.type==this._sel_tag&&($9.classname in lz&&$3 instanceof lz[$9.classname]||$9.classname in global&&$3 instanceof global[$9.classname])||$9.type==this._sel_attribute&&$3[$9.attrname]==$9.attrvalue||$9.type==this._sel_tagAndAttr&&$3[$9.attrname]==$9.attrvalue&&($9.classname in lz&&$3 instanceof lz[$9.classname]||$9.classname in global&&$3 instanceof global[$9.classname])){
+$6.push($7)
+}
+}
+}
+var $15=$3.name!=null?this._nameRules[$3.name]:null
+if($15){
+for(var $8=$15.length-1;$8>=0;$8--){
+$7=$15[$8]
+var $9=$7.parsed
+if($9.type==this._sel_compound){
+var $10=$3
+var $11=$9.length-1
+var $12=true
+var $13=false
+while($10!=canvas){
+var $14=$9[$11]
+t=$14.type
+if(t==this._sel_star||t==this._sel_id&&$14.id==$10.id||t==this._sel_tag&&($14.classname in lz&&$10 instanceof lz[$14.classname]||$14.classname in global&&$10 instanceof global[$14.classname])||t==this._sel_attribute&&$10[$14.attrname]==$14.attrvalue||t==this._sel_tagAndAttr&&$10[$14.attrname]==$14.attrvalue&&($14.classname in lz&&$10 instanceof lz[$14.classname]||$14.classname in global&&$10 instanceof global[$14.classname])||t==this._sel_compound&&this._compoundSelectorApplies($14,$10,true)){
+if($11--==0){
+$13=true
+break
+}
+}else{
+if($12){
+$13=false
+break
+}
+}
+$10=$10.parent
+$12=false
+}
+if($13){
+$6.push($7)
+}
+}else{
+if($9.type==this._sel_star||$9.type==this._sel_id&&$9.id==$3.id||$9.type==this._sel_tag&&($9.classname in lz&&$3 instanceof lz[$9.classname]||$9.classname in global&&$3 instanceof global[$9.classname])||$9.type==this._sel_attribute&&$3[$9.attrname]==$9.attrvalue||$9.type==this._sel_tagAndAttr&&$3[$9.attrname]==$9.attrvalue&&($9.classname in lz&&$3 instanceof lz[$9.classname]||$9.classname in global&&$3 instanceof global[$9.classname])){
+$6.push($7)
+}
+}
+}
+}
+$6.sort(this.__compareSpecificity)
+this.__LZRuleCache[$4]=$6
+}
+var $16=$6.length
+var $8=0
+while($8<$16){
+var $17=$6[$8++].properties
+if($2 in $17){
+$5=$17[$2]
+this.__LZPropertyCache[$4+$2]=$5
+break
+}
+}
+if($5!=null){
+return $5
+}
+$3=$3.immediateparent
+}
+}
+LzCSSStyle.getSelectorSpecificity=function($1){
+switch($1.type){
+case this._sel_tag:
+case this._sel_star:
+return 1
+case this._sel_id:
+return 100
+case this._sel_attribute:
+return 10
+case this._sel_tagAndAttr:
+return 11
+
+}
+}
+LzCSSStyle.__compareSpecificity=function($1,$2){
+if(!$1.specificity){
+if(!$1.specificity){
+if($1.parsed.type==LzCSSStyle._sel_compound){
+for(var $3=0;$3<$1.parsed.length;$3++){
+switch($1.parsed[$3].type){
+case LzCSSStyle._sel_tag:
+case LzCSSStyle._sel_star:
+$1.specificity+=1
+break
+case LzCSSStyle._sel_id:
+$1.specificity+=100
+break
+case LzCSSStyle._sel_attribute:
+$1.specificity+=10
+break
+case LzCSSStyle._sel_tagAndAttr:
+$1.specificity+=11
+break
+
+}
+}
+}else{
+switch($1.parsed.type){
+case LzCSSStyle._sel_tag:
+case LzCSSStyle._sel_star:
+$1.specificity=1
+break
+case LzCSSStyle._sel_id:
+$1.specificity=100
+break
+case LzCSSStyle._sel_attribute:
+$1.specificity=10
+break
+case LzCSSStyle._sel_tagAndAttr:
+$1.specificity=11
+break
+
+}
+}
+}
+}
+if(!$2.specificity){
+if(!$2.specificity){
+if($2.parsed.type==LzCSSStyle._sel_compound){
+for(var $3=0;$3<$2.parsed.length;$3++){
+switch($2.parsed[$3].type){
+case LzCSSStyle._sel_tag:
+case LzCSSStyle._sel_star:
+$2.specificity+=1
+break
+case LzCSSStyle._sel_id:
+$2.specificity+=100
+break
+case LzCSSStyle._sel_attribute:
+$2.specificity+=10
+break
+case LzCSSStyle._sel_tagAndAttr:
+$2.specificity+=11
+break
+
+}
+}
+}else{
+switch($2.parsed.type){
+case LzCSSStyle._sel_tag:
+case LzCSSStyle._sel_star:
+$2.specificity=1
+break
+case LzCSSStyle._sel_id:
+$2.specificity=100
+break
+case LzCSSStyle._sel_attribute:
+$2.specificity=10
+break
+case LzCSSStyle._sel_tagAndAttr:
+$2.specificity=11
+break
+
+}
+}
+}
+}
+var $4=$1.specificity
+var $5=$2.specificity
+if($4==$5){
+if($1.parsed.type==LzCSSStyle._sel_compound&&$2.parsed.type==LzCSSStyle._sel_compound){
+for(var $3=0;$3<$1.parsed.length;$3++){
+if(!$1.parsed[$3]||!$2.parsed[$3]){
+break
+}
+if(!$1.parsed[$3].classname||!$2.parsed[$3].classname||$1.parsed[$3].classname==$2.parsed[$3].classname){
+continue
+}
+var $6=lz[$1.parsed[$3].classname]
+var $7=lz[$2.parsed[$3].classname]
+return $6&&$7&&"prototype" in $6&&$6.prototype instanceof $7?-1:1
+}
+}
+if($1.parsed.classname&&$2.parsed.classname&&$1.parsed.classname!=$2.parsed.classname){
+var $6=lz[$1.parsed.classname]
+var $7=lz[$2.parsed.classname]
+return $6&&$7&&"prototype" in $6&&$6.prototype instanceof $7?-1:1
+}else{
+return $1._lexorder<$2._lexorder?1:-1
+}
+}
+return $4<$5?1:-1
+}
+LzCSSStyle._printRuleArray=function($1){
+for(var $2=0;$2<$1.length;$2++){
+Debug.write($2,$1[$2])
+}
+}
+LzCSSStyle._compoundSelectorApplies=function($1,$2){
+var $3=$2
+var $4=$1.length-1
+var $5=true
+var $6=false
+while($3!=canvas){
+var $7=$1[$4]
+var $8=$7.type
+if($8==this._sel_star||$8==this._sel_id&&$7.id==$3.id||$8==this._sel_tag&&($7.classname in lz&&$3 instanceof lz[$7.classname]||$7.classname in global&&$3 instanceof global[$7.classname])||$8==this._sel_attribute&&$3[$7.attrname]==$7.attrvalue||$8==this._sel_tagAndAttr&&$3[$7.attrname]==$7.attrvalue&&($7.classname in lz&&$3 instanceof lz[$7.classname]||$7.classname in global&&$3 instanceof global[$7.classname])||$8==this._sel_compound&&this._compoundSelectorApplies($7,$3,true)){
+if($4--==0){
+$6=true
+break
+}
+}else{
+if($5){
+$6=false
+break
+}
+}
+$3=$3.parent
+$5=false
+}
+return $6
+}
+LzCSSStyle._sel_unknown=0
+LzCSSStyle._sel_star=1
+LzCSSStyle._sel_id=2
+LzCSSStyle._sel_tag=3
+LzCSSStyle._sel_compound=4
+LzCSSStyle._sel_attribute=5
+LzCSSStyle._sel_tagAndAttr=6
+LzCSSStyle._rules=(new Array())
+LzCSSStyle._nameRules={}
+LzCSSStyle._rulenum=0
+LzCSSStyle._addRule=function($1){
+$1._lexorder=this._rulenum++
+var $2=$1.selector
+$1.parsed=null
+var $3
+if($2 instanceof Array){
+$1.parsed=[]
+$1.parsed.type=this._sel_compound
+for(var $4=0;$4<$2.length;$4++){
+$1.parsed.push(this._parseSelector($2[$4]))
+}
+$3=$1.parsed[$1.parsed.length-1]
+}else{
+$1.parsed=this._parseSelector($2)
+$3=$1.parsed
+}
+if(($3.type==this._sel_attribute||$3.type==this._sel_tagAndAttr)&&$3.attrname=="name"){
+var $5=$3.attrvalue
+if(!this._nameRules[$5]){
+this._nameRules[$5]=[]
+}
+this._nameRules[$5].push($1)
+}else{
+this._rules.push($1)
+}
+}
+LzCSSStyle._parseSelector=function($1){
+switch(typeof $1){
+case "object":
+if($1.simpleselector){
+$1.type=this._sel_tagAndAttr
+$1.classname=this._normalizeClassname($1.simpleselector)
+}else{
+$1.type=this._sel_attribute
+}
+return $1
+break
+case "string":
+return this._parseStringSelector($1)
+break
+
+}
+}
+LzCSSStyle._parseStringSelector=function($1){
+var $2={}
+if($1=="*"){
+$2.type=this._sel_star
+}else{
+var $3=$1.indexOf("#")
+if($3>=0){
+$2.id=$1.substring($3+1)
+$2.type=this._sel_id
+}else{
+$2.type=this._sel_tag
+$2.classname=this._normalizeClassname($1)
+}
+}
+return $2
+}
+LzCSSStyle._normalizeClassname=function($1){
+switch($1){
+case "view":
+return "LzView"
+case "animator":
+return "LzAnimator"
+case "animatorgroup":
+return "LzAnimatorGroup"
+case "canvas":
+return "LzCanvas"
+case "drawview":
+return "LzDrawView"
+case "inputtext":
+return "LzInputText"
+case "layout":
+return "LzLayout"
+case "node":
+return "LzNode"
+case "state":
+return "LzState"
+case "text":
+return "LzText"
+default:
+return $1
+
+}
+}
+function LzCSSStyleDeclaration(){
+
+}
+LzCSSStyleDeclaration.prototype._node=null
+LzCSSStyleDeclaration.prototype.getPropertyValue=function($1){
+return LzCSSStyle.getPropertyValueFor(this._node,$1)
+}
+LzCSSStyleDeclaration.prototype.setNode=function($1){
+this._node=$1
+}
+function LzStyleSheet($1,$2,$3,$4){
+this.type=$4
+this.disabled=false
+this.ownerNode=null
+this.parentStyleSheet=null
+this.href=$2
+this.title=$1
+this.media=$3
+}
+function LzCSSStyleSheet($1,$2,$3,$4,$5,$6){
+this.type=$4
+this.disabled=false
+this.ownerNode=null
+this.parentStyleSheet=null
+this.href=$2
+this.title=$1
+this.media=$3
+this.ownerRule=$5
+this.cssRules=$6
+}
+LzCSSStyleSheet.prototype.insertRule=function($1,$2){
+if(!this.cssRules){
+this.cssRules=[]
+}
+if($2<0){
+return null
+}
+if($2<this.cssRules.length){
+this.cssRules.splice($2,0,$1)
+return $2
+}
+if($2==this.cssRules.length){
+return this.cssRules.push($1)-1
+}
+return null
+}
+var LzTrackClass=Class.make("LzTrackClass",null,{__LZreg:(new Object),__LZactivegroups:null,__LZtrackDel:null,__LZoptimizeforaxis:"x",__LZmouseupDel:null,initialize:function(){
+(arguments.callee.superclass?arguments.callee.superclass.prototype["initialize"]:this.nextMethod(arguments.callee,"initialize")).apply(this,arguments)
+this.__LZtrackDel=LzDelegate.make(this,"__LZtrack")
+this.__LZmouseupDel=LzDelegate.make(this,"__LZmouseup",LzGlobalMouse,"onmouseup")
+},register:function($1,$2){
 if($1==null||$2==null){
 return
 }
@@ -9944,8 +11598,7 @@
 this.__LZdestroydel=LzDelegate.make(this,"__LZdestroyitem")
 }
 this.__LZdestroydel.register($1,"ondestroy")
-}
-LzTrack.unregister=function($1,$2){
+},unregister:function($1,$2){
 if($1==null||$2==null){
 return
 }
@@ -9961,13 +11614,11 @@
 }
 }
 this.__LZdestroydel.unregisterFrom($1.ondestroy)
-}
-LzTrack.__LZdestroyitem=function($1){
+},__LZdestroyitem:function($1){
 for(var $2 in this.__LZreg){
 this.unregister($1,$2)
 }
-}
-LzTrack.activate=function($1){
+},activate:function($1){
 if(this.__LZactivegroups==null){
 this.__LZactivegroups=[]
 this.__LZtrackDel.register(LzIdle,"onidle")
@@ -9981,8 +11632,7 @@
 if(!$2){
 this.__LZactivegroups.push(this.__LZreg[$1])
 }
-}
-LzTrack.deactivate=function($1){
+},deactivate:function($1){
 for(var $2 in this.__LZactivegroups){
 if(this.__LZactivegroups[$2]==this.__LZreg[$1]){
 this.__LZactivegroups.splice($2,1)
@@ -9994,8 +11644,7 @@
 if(typeof this.__LZreg[$1]!="undefined"){
 this.__LZreg[$1].__LZlasthit=0
 }
-}
-LzTrack.__LZtopview=function($1,$2){
+},__LZtopview:function($1,$2){
 var $3=$2
 var $4=$1
 while($4.nodeLevel<$3.nodeLevel){
@@ -10019,15 +11668,13 @@
 }else{
 return $2
 }
-}
-LzTrack.__LZfindTopmost=function($1){
+},__LZfindTopmost:function($1){
 var $2=$1[0]
 for(var $3=1;$3<$1.length;$3++){
 $2=this.__LZtopview($2,$1[$3])
 }
 return $2
-}
-LzTrack.__LZtrackgroup=function($1,$2){
+},__LZtrackgroup:function($1,$2){
 for(var $3=0;$3<$1.length;$3++){
 var $4=$1[$3]
 if($4.visible){
@@ -10040,8 +11687,7 @@
 }
 }
 }
-}
-LzTrack.__LZtrack=function(){
+},__LZtrack:function(){
 var $1=false
 var $2=[]
 for(var $3 in this.__LZactivegroups){
@@ -10051,14 +11697,14 @@
 this.__LZtrackgroup($5,$4)
 }
 if(!$4.length&&$5&&$5.__LZlasthit){
-if($5.__LZlasthit.onmousetrackout){
+if($5.__LZlasthit.onmousetrackout&&$5.__LZlasthit.onmousetrackout.ready){
 $5.__LZlasthit.onmousetrackout.sendEvent($5.__LZlasthit)
 }
 $5.__LZlasthit=0
 }else{
 var $6=this.__LZfindTopmost($4)
 if($6&&$6!=$5.__LZlasthit){
-if($5.__LZlasthit.onmousetrackout){
+if($5.__LZlasthit.onmousetrackout&&$5.__LZlasthit.onmousetrackout.ready){
 $5.__LZlasthit.onmousetrackout.sendEvent($5.__LZlasthit)
 }
 $1=true
@@ -10069,121 +11715,21 @@
 }
 if($1){
 for(var $3=0;$3<$2.length;$3++){
-$2[$3].onmousetrackover.sendEvent($2[$3])
+var $7=$2[$3]
+if($7.onmousetrackover.ready){
+$7.onmousetrackover.sendEvent($7)
 }
 }
 }
-LzTrack.__LZmouseup=function(){
+},__LZmouseup:function(){
 for(var $1 in this.__LZactivegroups){
 var $2=this.__LZactivegroups[$1]
-if($2&&$2.__LZlasthit.onmousetrackup){
+if($2&&$2.__LZlasthit.onmousetrackup&&$2.__LZlasthit.onmousetrackup.ready){
 $2.__LZlasthit.onmousetrackup.sendEvent(this.__LZlasthit)
 }
 }
-}
-var LzHistory=(new Object)
-LzHistory.setHistory=function($1){
-Lz._setHash($1)
-this.__lzloading=true
-}
-LzHistory.getPersist=function($1){
-
-}
-LzHistory.offset=0
-LzHistory.__lzdirty=false
-LzHistory.__lzhistq=[]
-LzHistory.__lzcurrstate={}
-LzHistory.__lzloading=false
-LzHistory.__lzloadcache={}
-LzHistory.__loadcacheused=false
-DeclareEvent(LzHistory,"onoffset")
-LzHistory.receiveHistory=function($1){
-$1*=1
-if(!$1){
-$1=0
-}
-if($1>this.__lzhistq.length-1){
-$1=this.__lzhistq.length
-}
-this.offset=$1
-this.onoffset.sendEvent($1)
-var $2=this.__lzhistq[$1]
-for(var $3 in $2){
-var $1=$2[$3]
-global[$1.c].setAttribute($1.n,$1.v)
-}
-if(this.__loadcacheused){
-var $4=this.__lzhistq[this.offset]
-if($4==null){
-$4={}
-}
-var $3
-for($3 in this.__lzloadcache){
-$4[$3]=this.__lzloadcache[$3]
-}
-this.__lzhistq[this.offset]=$4
-this.__lzloadcache={}
-this.__loadcacheused=false
-}
-this.__lzloading=false
-}
-LzHistory.receiveEvent=function($1,$2){
-canvas[$1]=$2
-canvas["on"+$1].sendEvent($2)
-}
-LzHistory.getCanvasAttribute=function($1){
-return canvas[$1]
-}
-LzHistory.setCanvasAttribute=LzHistory.receiveEvent
-LzHistory.callMethod=function($1){
-return eval($1)
-}
-LzHistory.save=function($1,$2,$3){
-if($3==null){
-$3=global[$1][$2]
-}
-if(this.__lzloading){
-this.__lzloadcache[$1]={c:$1,n:$2,v:$3}
-this.__loadcacheused=true
-}else{
-this.__lzcurrstate[$1]={c:$1,n:$2,v:$3}
-this.__lzdirty=true
-}
-}
-LzHistory.commit=function(){
-if(!this.__lzdirty){
-return
-}
-this.__lzhistq[this.offset]=this.__lzcurrstate
-this.__lzhistq.length=this.offset+1
-this.__lzcurrstate={}
-this.__lzdirty=false
-}
-LzHistory.move=function($1){
-this.commit()
-if(!$1){
-$1=1
-}
-var $2=this.offset+$1
-if(0>=$2){
-$2=0
-}
-if(this.__lzhistq.length>=$2){
-this.setHistory($2)
-}
-}
-LzHistory.next=function(){
-this.move(1)
-}
-LzHistory.prev=function(){
-this.move(-1)
-}
-LzHistory.clear=function(){
-this.__lzhistq=[]
-this.offset=0
-this.onoffset.sendEvent(0)
-}
-Lz.__dhtmlhistoryready=true
+}},null)
+var LzTrack=LzTrackClass.make()
 var LzFocus=(new Object())
 DeclareEvent(LzFocus,"onfocus")
 LzFocus.lastfocus=null
@@ -10195,12 +11741,12 @@
 LzFocus.__LZsfnextfocus=-1
 LzFocus.__LZsfrunning=false
 LzFocus.gotKeyUp=function($1){
-if(this.csel){
+if(this.csel&&this.csel.onkeyup.ready){
 this.csel.onkeyup.sendEvent($1)
 }
 }
 LzFocus.gotKeyDown=function($1){
-if(this.csel){
+if(this.csel&&this.csel.onkeydown.ready){
 this.csel.onkeydown.sendEvent($1)
 }
 if($1==LzKeys.keyCodes.tab){
@@ -10233,6 +11779,10 @@
 if(this.csel&&this.csel.shouldYieldFocus&&!this.csel.shouldYieldFocus()){
 return
 }
+var $2=this.csel
+if($2){
+$2.blurring=true
+}
 this.__LZsfnextfocus=-1
 this.__LZsfrunning=true
 if($1&&!$1.focusable){
@@ -10244,7 +11794,7 @@
 }
 if(!this.__LZskipblur){
 this.__LZskipblur=true
-if(this.csel){
+if(this.csel&&this.csel.onblur.ready){
 this.csel.onblur.sendEvent($1)
 }
 if(this.__LZsfnextfocus!=-1){
@@ -10256,7 +11806,7 @@
 this.lastfocus=this.csel
 this.csel=$1
 this.__LZskipblur=false
-if($1){
+if($1&&$1.onfocus.ready){
 $1.onfocus.sendEvent($1)
 }
 if(this.__LZsfnextfocus!=-1){
@@ -10264,13 +11814,18 @@
 this.setFocus(this.__LZsfnextfocus)
 return
 }
+if(this.onfocus.ready){
 this.onfocus.sendEvent($1)
+}
 this.__LZsfrunning=false
 if(this.__LZsfnextfocus!=-1){
 this.setFocus(this.__LZsfnextfocus)
 return
 }
+if($2){
+$2.blurring=false
 }
+}
 LzFocus.clearFocus=function(){
 this.setFocus(null)
 }
@@ -10379,7 +11934,7 @@
 var LzIdle=LzIdleClass.make()
 function __idleupdate(){
 var $1=LzIdle.onidle
-if($1.delegateList&&$1.delegateList.length){
+if($1.ready){
 $1.sendEvent(getTimer())
 }
 }
@@ -10453,46 +12008,25 @@
 LzTrait.make($1)
 return
 }
-LzFixTags($1)
 if(typeof $2=="undefined"){
 $2=1
 }
 canvas.initiatorAddNode($1,$2)
 }
-function LzFixTags($1){
-if("id" in $1&&$1.id!=null){
-$1.attrs.id=$1.id
-}
-var $2=0
-if("children" in $1&&$1.children){
-while($2<$1.children.length){
-var $3=$1.children[$2]
-if($3.name=="datapath"){
-if(!$1.attrs){
-$1.attrs={}
-}
-$1.attrs.$datapath=$3
-$1.children.splice($2,1)
-continue
-}
-LzFixTags($1.children[$2++])
-}
-}
-}
 function lzAddLocalData($1,$2,$3){
 return LzDataset.make(canvas,{name:$1,initialdata:$2,trimwhitespace:$3})
 }
-// END LFC
+var $backtrace=false
 var $dhtml=true
 var $as3=false
 var $js1=true
-var $swf9=false
 var $swf7=false
-var $profile=false
 var $swf8=false
-var $runtime="dhtml"
 var $svg=false
 var $as2=false
+var $swf9=false
+var $profile=false
+var $runtime="dhtml"
 var $debug=false
 var $j2me=false
 canvas=LzCanvas.make({__LZproxied:"true",bgcolor:9737389,debugApp:function(){
@@ -10520,49 +12054,51 @@
 app_fullpath=$1
 this.reloadApp()
 }
-},height:70,lpsbuild:"4733 /Users/maxcarlson/openlaszlo/legals-clean",lpsbuilddate:"2007-04-16T16:16:21-0700",lpsrelease:"Latest",lpsversion:"4.0.x",proxied:false,reloadApp:function($1){
+},height:70,lpsbuild:"6099 C:\\users\\hqm\\openlaszlo\\wafflecone2",lpsbuilddate:"2007-08-17T12:44:04-0400",lpsrelease:"Latest",lpsversion:"4.0.x",proxied:false,reloadApp:function($1){
 with(this){
 var $2=rg_runtime.value
 var $3=cb_debug.value
-var $4=cb_remotedebug.value
-var $5=LzParam.make(this)
-var $6=LzParam.prototype.parseQueryString(app_query)
-$6["debug"]=$3
-$6["lzr"]=$2
-if($4){
-$6["lzconsoledebug"]=true
-$6["debug"]=true
+var $4=cb_backtrace.value
+var $5=cb_remotedebug.value
+var $6=LzParam.make(this)
+var $7=LzParam.prototype.parseQueryString(app_query)
+$7["debug"]=$3
+$7["lzbacktrace"]=$4
+$7["lzr"]=$2
+if($5){
+$7["lzconsoledebug"]=true
+$7["debug"]=true
 }else{
-delete $6.lzconsoledebug
-delete $6.remotedebug
+delete $7.lzconsoledebug
+delete $7.remotedebug
 }
 if(app_lzt!=null){
-$6["lzt"]=app_lzt
+$7["lzt"]=app_lzt
 }
-if($6.lzr=="dhtml"){
-if($6.debug+""=="false"){
-delete $6["debug"]
+if($7.lzr=="dhtml"){
+if($7.debug+""=="false"){
+delete $7["debug"]
 }else{
-$6.debug="true"
+$7.debug="true"
 }
 }
-var $7={}
-for(var $8 in $6){
-if($8==""){
+var $8={}
+for(var $9 in $7){
+if($9==""){
 continue
 }
-if($8.indexOf("#38;")!=-1){
-var $9=$8.indexOf("#38;")
-$8=$8.substring($9+4,$8.length)
+if($9.indexOf("#38;")!=-1){
+var $10=$9.indexOf("#38;")
+$9=$9.substring($10+4,$9.length)
 }
-if($7[$8]){
+if($8[$9]){
 continue
 }
-$5.setValue($8,$6[$8])
-$7[$8]=true
+$6.setValue($9,$7[$9])
+$8[$9]=true
 }
-var $10=app_fullpath+"?"+$5.serialize()
-LzBrowser.loadURL($10)
+var $11=app_fullpath+"?"+$6.serialize()
+LzBrowser.loadURL($11)
 }
 },remoteEval:function($1){
 with(this){
@@ -10605,7 +12141,7 @@
 app_lzt="deployment"
 canvas.reloadApp()
 }
-},width:500})
+},width:"100%"})
 LzInstantiateView({name:"script",attrs:{script:function(){
 _root.offwhite=void 0
 _root.gray10=void 0
@@ -10690,13 +12226,13 @@
 LzResourceLibrary.lzfocusbracket_bottomleft_shdw_rsrc={ptype:"sr",frames:["lps/components/lz/resources/focus/focus_bot_lft_shdw.png"],width:9,height:9}
 LzResourceLibrary.lzfocusbracket_bottomright_rsrc={ptype:"sr",frames:["lps/components/lz/resources/focus/focus_bot_rt.png"],width:7,height:7}
 LzResourceLibrary.lzfocusbracket_bottomright_shdw={ptype:"sr",frames:["lps/components/lz/resources/focus/focus_bot_rt_shdw.png"],width:9,height:9}
-LzInstantiateView({name:"class",attrs:{parent:"view",initobj:{attrs:{$delegates:["onstop","stopanim",null,"onfocus","$m2",function($1){
+LzInstantiateView({name:"class",attrs:{parent:"view",initobj:{attrs:{$delegates:["onstop","stopanim",null,"onfocus","$m2_$base$2Fbasefocusview$2Elzx_250_62_reference",function($1){
 with(this){
 return LzFocus
 }
-}],$events:["onactive","ontarget"],$m1:function(){
+}],$events:["ontarget","onactive"],$m1_$base$2Fbasefocusview$2Elzx_152_51_reference:function(){
 
-},$m2:function($1){
+},$m2_$base$2Fbasefocusview$2Elzx_250_62_reference:function($1){
 with(this){
 this.setActive(LzFocus.focuswithkey)
 if($1){
@@ -10750,7 +12286,11 @@
 this.animate("y",$4,duration)
 this.animate("width",$5,duration)
 this.animate("height",$6,duration)
+if(this.sprite&&this.sprite["quirks"]&&this.sprite.quirks["minimize_opacity_changes"]){
+this.setVisible(true)
+}else{
 this.animate("opacity",1,500)
+}
 if(!this._onstopdel){
 this._onstopdel=LzDelegate.make(this,"stopanim")
 }
@@ -10786,8 +12326,12 @@
 },duration:400,fadeout:function(){
 with(this){
 if(_dofadeout){
+if(this.sprite&&this.sprite["quirks"]&&this.sprite.quirks["minimize_opacity_changes"]){
+this.setVisible(false)
+}else{
 this.animate("opacity",0,500)
 }
+}
 this._delayfadeoutDL.unregisterAll()
 }
 },followHeight:function(){
@@ -10891,7 +12435,7 @@
 }
 },doFocus:function($1){
 with(this){
-this.nextMethod(arguments.callee,"doFocus").call(this,$1)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["doFocus"]:this.nextMethod(arguments.callee,"doFocus")).call(this,$1)
 if(visible){
 this.bounce()
 }
@@ -11001,13 +12545,13 @@
 with(this){
 return LzFocus
 }
-},"onmode","$m4",function($1){
+},"onmode","$m4_$base$2Fcomponentmanager$2Elzx_195_69_reference",function($1){
 with(this){
 return LzModeManager
 }
-}],$events:["ondefaultstyle"],$m3:function(){
+}],$events:["ondefaultstyle"],$m3_$base$2Fcomponentmanager$2Elzx_166_76_reference:function(){
 
-},$m4:function($1){
+},$m4_$base$2Fcomponentmanager$2Elzx_195_69_reference:function($1){
 with(this){
 if(LzFocus.getFocus()==null){
 this.checkDefault(null)
@@ -11128,9 +12672,8 @@
 if($1!=null){
 canvas.__focus=global[$1].make(canvas)
 canvas.__focus.reset()
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).call(this)
 }
-this.nextMethod(arguments.callee,"init").call(this)
-}
 },keyhandlers:null,lastedown:null,lastsdown:null,makeDefault:function($1){
 with(this){
 if(!this.defaults){
@@ -11316,7 +12859,7 @@
 _componentmanager.service=_componentmanager.make(canvas,null,null,true)
 }}},1)
 LzInstantiateView({name:"class",attrs:{parent:"text",initobj:{attrs:{"extends":"text"},name:"statictext"}}},1)
-LzInstantiateView({name:"class",attrs:{parent:"view",initobj:{attrs:{$events:["on_enabled","onfocusable","onisdefault","onstyle"],$refs:{_enabled:(function(){
+LzInstantiateView({name:"class",attrs:{parent:"view",initobj:{attrs:{$events:["onfocusable","onisdefault","onstyle","on_enabled"],$refs:{_enabled:(function(){
 var $lzsc$f=function(){
 this.setAttribute("_enabled",this.enabled&&(this._parentcomponent?this._parentcomponent._enabled:true))
 }
@@ -11422,7 +12965,7 @@
 this.setAttribute("text",$1)
 },construct:function($1,$2){
 with(this){
-this.nextMethod(arguments.callee,"construct").call(this,$1,$2)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).call(this,$1,$2)
 var $3=this.immediateparent
 while($3!=canvas){
 if($3 instanceof basecomponent){
@@ -11441,9 +12984,8 @@
 if(this._styledel){
 this._styledel.unregisterAll()
 delete this._styledel
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["destroy"]:this.nextMethod(arguments.callee,"destroy")).call(this)
 }
-this.nextMethod(arguments.callee,"destroy").call(this)
-}
 },doEnterDown:function(){
 return false
 },doEnterUp:function(){
@@ -11454,7 +12996,7 @@
 return false
 },doesenter:false,enabled:true,focusable:true,hasdefault:false,init:function(){
 with(this){
-this.nextMethod(arguments.callee,"init").call(this)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).call(this)
 this._initcomplete=true
 this._mousedownDel=LzDelegate.make(this,"_doMousedown",this,"onmousedown")
 if(this.styleable){
@@ -11542,31 +13084,31 @@
 _componentmanager.service.checkDefault(LzFocus.getFocus())
 }
 }},name:"basecomponent"}}},1)
-LzInstantiateView({name:"class",attrs:{parent:"basecomponent",initobj:{attrs:{$delegates:["onmode","$m5",function($1){
+LzInstantiateView({name:"class",attrs:{parent:"basecomponent",initobj:{attrs:{$delegates:["onmode","$m5_$base$2Fbasebutton$2Elzx_90_67_reference",function($1){
 with(this){
 return LzModeManager
 }
-},"ontotalframes","$m6",null,"onmouseover","$m7",null,"onmouseout","$m8",null,"onmousedown","$m9",null,"onmouseup","$m10",null],$events:["onclick","onresourceviewcount"],$m10:function(){
+},"ontotalframes","$m6_$base$2Fbasebutton$2Elzx_151_39_reference",null,"onmouseover","$m7_$base$2Fbasebutton$2Elzx_166_37_reference",null,"onmouseout","$m8_$base$2Fbasebutton$2Elzx_171_36_reference",null,"onmousedown","$m9_$base$2Fbasebutton$2Elzx_176_37_reference",null,"onmouseup","$m10_$base$2Fbasebutton$2Elzx_181_35_reference",null],$events:["onresourceviewcount","onclick"],$m10_$base$2Fbasebutton$2Elzx_181_35_reference:function(){
 this.setAttribute("_msdown",false)
 this._callShow()
-},$m5:function($1){
+},$m5_$base$2Fbasebutton$2Elzx_90_67_reference:function($1){
 if($1&&(this._msdown||this._msin)&&!this.childOf($1)){
 this._msdown=false
 this._msin=false
 this._callShow()
 }
-},$m6:function(){
+},$m6_$base$2Fbasebutton$2Elzx_151_39_reference:function(){
 if(this.isinited){
 this.maxframes=this.totalframes
 this._callShow()
 }
-},$m7:function(){
+},$m7_$base$2Fbasebutton$2Elzx_166_37_reference:function(){
 this.setAttribute("_msin",true)
 this._callShow()
-},$m8:function(){
+},$m8_$base$2Fbasebutton$2Elzx_171_36_reference:function(){
 this.setAttribute("_msin",false)
 this._callShow()
-},$m9:function(){
+},$m9_$base$2Fbasebutton$2Elzx_176_37_reference:function(){
 this.setAttribute("_msdown",true)
 this._callShow()
 },$refs:{maxframes:function(){
@@ -11620,7 +13162,7 @@
 }
 },downResourceNumber:3,"extends":"basecomponent",focusable:false,init:function(){
 with(this){
-this.nextMethod(arguments.callee,"init").call(this)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).call(this)
 this.setResourceViewCount(this.resourceviewcount)
 this._callShow()
 }
@@ -11631,7 +13173,7 @@
 this.subviews[$2].setResourceNumber($1)
 }
 }else{
-this.nextMethod(arguments.callee,"setResourceNumber").call(this,$1)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["setResourceNumber"]:this.nextMethod(arguments.callee,"setResourceNumber")).call(this,$1)
 }
 }
 },setResourceViewCount:function($1){
@@ -11668,7 +13210,7 @@
 this.setColor($1)
 }},color:16777215,construct:function($1,$2){
 with(this){
-this.nextMethod(arguments.callee,"construct").call(this,$1,$2)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).call(this,$1,$2)
 if($2["width"]==null){
 $2["width"]=this.immediateparent.getAttribute("width")
 }
@@ -11693,9 +13235,8 @@
 $4=$4*ctransform["ba"]/100+ctransform["bb"]
 $4=Math.min($4,255)
 $1=$4+($3<<8)+($2<<16)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["setBGColor"]:this.nextMethod(arguments.callee,"setBGColor")).call(this,$1)
 }
-this.nextMethod(arguments.callee,"setBGColor").call(this,$1)
-}
 },setColor:function($1){
 this.setBGColor($1)
 },setColorTransform:function($1){
@@ -11706,7 +13247,7 @@
 LzResourceLibrary.lzbutton_face_rsc={ptype:"sr",frames:["lps/components/lz/resources/button/simpleface_up.png","lps/components/lz/resources/button/simpleface_mo.png","lps/components/lz/resources/button/simpleface_dn.png","lps/components/lz/resources/button/autoPng/simpleface_dsbl.png"],width:2,height:18}
 LzResourceLibrary.lzbutton_bezel_inner_rsc={ptype:"sr",frames:["lps/components/lz/resources/autoPng/bezel_inner_up.png","lps/components/lz/resources/autoPng/bezel_inner_up.png","lps/components/lz/resources/autoPng/bezel_inner_dn.png","lps/components/lz/resources/autoPng/outline_dsbl.png"],width:500,height:500}
 LzResourceLibrary.lzbutton_bezel_outer_rsc={ptype:"sr",frames:["lps/components/lz/resources/autoPng/bezel_outer_up.png","lps/components/lz/resources/autoPng/bezel_outer_up.png","lps/components/lz/resources/autoPng/bezel_outer_dn.png","lps/components/lz/resources/autoPng/transparent.png","lps/components/lz/resources/autoPng/default_outline.png"],width:500,height:500}
-LzInstantiateView({name:"class",attrs:{parent:"basebutton",initobj:{attrs:{$delegates:["onhasdefault","$m11",null],$m11:function(){
+LzInstantiateView({name:"class",attrs:{parent:"basebutton",initobj:{attrs:{$delegates:["onhasdefault","$m11_$lz$2Fbutton$2Elzx_127_34_reference",null],$m11_$lz$2Fbutton$2Elzx_127_34_reference:function(){
 with(this){
 if(this._initcomplete){
 if(this.buttonstate==1){
@@ -12037,7 +13578,7 @@
 LzInstantiateView({name:"class",attrs:{parent:"basecomponent",initobj:{attrs:{"extends":"basecomponent",getValue:function(){
 return this.value==null?this.text:this.value
 },value:null},name:"basevaluecomponent"}}},1)
-LzInstantiateView({name:"class",attrs:{parent:"basevaluecomponent",initobj:{attrs:{$delegates:["oninit","$m12",null],$events:["onchanged","onvalue"],$m12:function(){
+LzInstantiateView({name:"class",attrs:{parent:"basevaluecomponent",initobj:{attrs:{$delegates:["oninit","$m12_$base$2Fbaseformitem$2Elzx_57_32_reference",null],$events:["onchanged","onvalue"],$m12_$base$2Fbaseformitem$2Elzx_57_32_reference:function(){
 var $1=this.findForm()
 if($1!=null){
 $1.addFormItem(this)
@@ -12088,9 +13629,8 @@
 }
 if(this.submitname==""){
 return
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).call(this)
 }
-this.nextMethod(arguments.callee,"init").call(this)
-}
 },rollback:function(){
 if(this.rollbackvalue!=this["value"]){
 this.setAttribute("value",this.rollbackvalue)
@@ -12114,14 +13654,19 @@
 this._parentform.setChanged($1)
 }
 }
+if(!$2&&!this.changed&&!ignoreform){
+if(this["_parentform"]&&this._parentform["changed"]!=undefined&&this._parentform.changed){
+this._parentform.setChanged($1,true)
 }
+}
+}
 },setValue:function($1,$2){
 var $3=this.value!=$1
 this.value=$1
 if($2||!this._initcomplete){
 this.rollbackvalue=$1
 }
-this.setChanged($3&&!$2)
+this.setChanged($3&&!$2&&this.rollbackvalue!=$1)
 if(this["onvalue"]){
 this.onvalue.sendEvent($1)
 }
@@ -12195,7 +13740,7 @@
 }
 },statelength:3,statenum:0},name:"multistatebutton"}}},1)
 LzResourceLibrary.lzcheckbox_rsrc={ptype:"sr",frames:["lps/components/lz/resources/checkbox/autoPng/checkbox_off.png","lps/components/lz/resources/checkbox/autoPng/checkbox_off_mo.png","lps/components/lz/resources/checkbox/autoPng/checkbox_on.png","lps/components/lz/resources/checkbox/autoPng/checkbox_disable_off.png","lps/components/lz/resources/checkbox/autoPng/checkbox_on.png","lps/components/lz/resources/checkbox/autoPng/checkbox_on_mo.png","lps/components/lz/resources/checkbox/autoPng/checkbox_off.png","lps/components/lz/resources/checkbox/autoPng/checkbox_disable_on.png"],width:15,height:14}
-LzInstantiateView({name:"class",attrs:{parent:"baseformitem",initobj:{attrs:{$delegates:["onclick","$m13",null],$m13:function(){
+LzInstantiateView({name:"class",attrs:{parent:"baseformitem",initobj:{attrs:{$delegates:["onclick","$m13_$lz$2Fcheckbox$2Elzx_47_33_reference",null],$m13_$lz$2Fcheckbox$2Elzx_47_33_reference:function(){
 if(this._enabled){
 this.setAttribute("value",!this.value)
 }
@@ -12232,7 +13777,7 @@
 if(this._enabled){
 this.setAttribute("value",!this.value)
 }
-},"extends":"baseformitem",pixellock:true,setValue:function($1){
+},"extends":"baseformitem",pixellock:true,setValue:function($1,$2){
 with(this){
 if($1=="false"){
 $1=false
@@ -12242,50 +13787,49 @@
 }else{
 $1=!(!$1)
 }
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["setValue"]:this.nextMethod(arguments.callee,"setValue")).call(this,$1,$2)
 }
-this.nextMethod(arguments.callee,"setValue").call(this,$1)
-}
-},value:false},children:[{attrs:{$refs:{reference:function(){
-with(this){
-this.setAttribute("reference",parent)
-}
-},statenum:(function(){
+},value:false},children:[{attrs:{$refs:{text:(function(){
 var $lzsc$f=function(){
 with(this){
-this.setAttribute("statenum",parent.value?1:0)
+this.setAttribute("text",parent.text)
 }
 }
 $lzsc$f.dependencies=function(){
 with(this){
-return [parent,"value"]
+return [parent,"text"]
 }
 }
 return $lzsc$f
-})()},maxstate:1,name:"cb",resource:"lzcheckbox_rsrc",statelength:4,text:""},name:"multistatebutton"},{attrs:{$refs:{text:(function(){
+})(),y:(function(){
 var $lzsc$f=function(){
 with(this){
-this.setAttribute("text",parent.text)
+this.setAttribute("y",classroot.text_y)
 }
 }
 $lzsc$f.dependencies=function(){
 with(this){
-return [parent,"text"]
+return [classroot,"text_y"]
 }
 }
 return $lzsc$f
-})(),y:(function(){
+})()},name:"_title",resize:true,x:16},name:"text"},{attrs:{$refs:{reference:function(){
+with(this){
+this.setAttribute("reference",parent)
+}
+},statenum:(function(){
 var $lzsc$f=function(){
 with(this){
-this.setAttribute("y",classroot.text_y)
+this.setAttribute("statenum",parent.value?1:0)
 }
 }
 $lzsc$f.dependencies=function(){
 with(this){
-return [classroot,"text_y"]
+return [parent,"value"]
 }
 }
 return $lzsc$f
-})()},name:"_title",resize:true,x:16},name:"text"}],name:"checkbox"}}},1)
+})()},maxstate:1,name:"cb",resource:"lzcheckbox_rsrc",statelength:4,text:""},name:"multistatebutton"}],name:"checkbox"}}},1)
 LzInstantiateView({name:"class",attrs:{parent:"selectionmanager",initobj:{attrs:{_forcemulti:false,_updatefromscrolling:false,allowhilite:function($1){
 if(this._updatefromscrolling){
 if($1!=null){
@@ -12396,7 +13940,7 @@
 $2=true
 }else{
 if(multiselect){
-$2=this.nextMethod(arguments.callee,"isMultiSelect").call(this,$1)
+$2=(arguments.callee.superclass?arguments.callee.superclass.prototype["isMultiSelect"]:this.nextMethod(arguments.callee,"isMultiSelect")).call(this,$1)
 }
 }
 return $2
@@ -12405,7 +13949,7 @@
 with(this){
 var $2=false
 if(multiselect){
-$2=this.nextMethod(arguments.callee,"isRangeSelect").call(this,$1)
+$2=(arguments.callee.superclass?arguments.callee.superclass.prototype["isRangeSelect"]:this.nextMethod(arguments.callee,"isRangeSelect")).call(this,$1)
 }
 return $2
 }
@@ -12414,11 +13958,11 @@
 if($1["length"]&&multiselect){
 this._forcemulti=true
 for(var $2=0;$2<$1.length;$2++){
-this.nextMethod(arguments.callee,"select").call(this,$1[$2])
+(arguments.callee.superclass?arguments.callee.superclass.prototype["select"]:this.nextMethod(arguments.callee,"select")).call(this,$1[$2])
 }
 this._forcemulti=false
 }else{
-this.nextMethod(arguments.callee,"select").call(this,$1)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["select"]:this.nextMethod(arguments.callee,"select")).call(this,$1)
 }
 }
 }},name:"listselector"}}},1)
@@ -12632,7 +14176,7 @@
 $2=true
 }else{
 if(multiselect){
-$2=this.nextMethod(arguments.callee,"isMultiSelect").call(this,$1)
+$2=(arguments.callee.superclass?arguments.callee.superclass.prototype["isMultiSelect"]:this.nextMethod(arguments.callee,"isMultiSelect")).call(this,$1)
 }
 }
 return $2
@@ -12641,7 +14185,7 @@
 with(this){
 var $2=false
 if(multiselect){
-$2=this.nextMethod(arguments.callee,"isRangeSelect").call(this,$1)
+$2=(arguments.callee.superclass?arguments.callee.superclass.prototype["isRangeSelect"]:this.nextMethod(arguments.callee,"isRangeSelect")).call(this,$1)
 }
 return $2
 }
@@ -12650,21 +14194,21 @@
 if($1["length"]&&multiselect){
 this._forcemulti=true
 for(var $2=0;$2<$1.length;$2++){
-this.nextMethod(arguments.callee,"select").call(this,$1[$2])
+(arguments.callee.superclass?arguments.callee.superclass.prototype["select"]:this.nextMethod(arguments.callee,"select")).call(this,$1[$2])
 }
 this._forcemulti=false
 }else{
-this.nextMethod(arguments.callee,"select").call(this,$1)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["select"]:this.nextMethod(arguments.callee,"select")).call(this,$1)
 }
 }
 }},name:"datalistselector"}}},1)
 LzInstantiateView({name:"class",attrs:{parent:"baseformitem",initobj:{attrs:{$delegates:["onfocus","_doFocus",null,"onblur","_doblur",null,"onkeydown","_dokeydown",null],$events:["onselect"],_contentview:null,_doFocus:function(){
-if(this._selector){
+if(this["_selector"]){
 var $1=this._selector.getSelection()
-}
 if($1&&$1.length>0){
 this._hiliteview=$1[0]
 }
+}
 },_doblur:function(){
 if(this._hiliteview&&this._hiliteview.setHilite){
 this._hiliteview["setHilite"](false)
@@ -12783,7 +14327,7 @@
 }
 },init:function(){
 with(this){
-this.nextMethod(arguments.callee,"init").call(this)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).call(this)
 if(this._contentview==null){
 if(this.defaultplacement!=null){
 this._contentview=this.searchSubnodes("name",this.defaultplacement)
@@ -12904,7 +14448,7 @@
 this._setSelected($1)
 }},_doMousedown:function(){
 with(this){
-this.nextMethod(arguments.callee,"_doMousedown").call(this)
+(arguments.callee.superclass?arguments.callee.superclass.prototype["_doMousedown"]:this.nextMethod(arguments.callee,"_doMousedown")).call(this)
 if(!this.focusable&&this._parentcomponent&&this._parentcomponent.focusable){
 LzFocus.setFocus(this._parentcomponent,false)
 }
@@ -12926,9 +14470,8 @@
 this._valuedatapath=$2
 }
 }
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["dataBindAttribute"]:this.nextMethod(arguments.callee,"dataBindAttribute")).call(this,$1,$2)
 }
-this.nextMethod(arguments.callee,"dataBindAttribute").call(this,$1,$2)
-}
 },doClick:function(){
 if(this._parentcomponent){
 this._parentcomponent.select(this)
@@ -12991,9 +14534,8 @@
 var $2=this.subviews[this.subviews.length-1]
 var $3=$2[this.axis]+$2[this.sizeAxis]+this.spacing
 $1.setAttribute(this.axis,$3)
+};(arguments.callee.superclass?arguments.callee.superclass.prototype["addSubview"]:this.nextMethod(arguments.callee,"addSubview")).call(this,$1)
 }
-this.nextMethod(arguments.callee,"addSubview").call(this,$1)
-}
 },axis:"y","extends":"layout",inset:0,setAxis:function($1){
 if(this["axis"]==null||this.axis!=$1){
 this.axis=$1
@@ -13051,7 +14593,7 @@
 },applyData:function($1){
 this._setvalue($1)
 },defaultselection:0,"extends":"baselist",itemclassname:"radiobutton",layout:{axis:"y","class":"simplelayout",spacing:5},value:null},name:"radiogroup"}}},1)
-LzInstantiateView({name:"class",attrs:{parent:"baselistitem",initobj:{attrs:{$delegates:["onclick","$m14",null],$m14:function(){
+LzInstantiateView({name:"class",attrs:{parent:"baselistitem",initobj:{attrs:{$delegates:["onclick","$m14_$lz$2Fradio$2Elzx_159_33_reference",null],$m14_$lz$2Fradio$2Elzx_159_33_reference:function(){
 with(this){
 if(!this.selected){
 parent.select(this)
@@ -13139,10 +14681,11 @@
 return XML.make().createTextNode($1).toString()
 }
 }}},1)
-lzAddLocalData("appdata","<datacontent />",false)
+lzAddLocalData("appdata","<data />",false)
 LzInstantiateView({name:"script",attrs:{script:function(){
 _root.app_runtime=void 0
 _root.app_debug=void 0
+_root.app_backtrace=void 0
 _root.app_console_debug=void 0
 _root.app_floating_window=void 0
 _root.app_fullpath=void 0
@@ -13160,6 +14703,7 @@
 app_runtime=appdata.getPointer().xpathQuery("/request/param[@name = 'lzr']/@value")
 }
 app_debug=appdata.getPointer().xpathQuery("/request/param[@name = 'debug']/@value")
+app_backtrace=appdata.getPointer().xpathQuery("/request/param[@name = 'lzbacktrace']/@value")
 if(app_debug=="y"){
 app_debug="true"
 }
@@ -13201,7 +14745,27 @@
 }
 }
 return $lzsc$f
-})()},bgcolor:5000268,name:"logo",resource:"footer_logo"},name:"view"},{attrs:{name:"controls",x:70},children:[{attrs:{name:"firstrow",y:4},children:[{attrs:{font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<b>Compile Options:</b>",x:8,y:7},name:"text"},{attrs:{bgcolor:0,height:32,width:319,x:125},children:[{attrs:{bgcolor:9737389,height:30,width:317,x:1,y:1},name:"view"}],name:"view"},{attrs:{name:"compilecontrols",x:125},children:[{attrs:{layout:{axis:"x","class":"simplelayout",spacing:4},x:6,y:8.75},children:[{attrs:{$refs:{selected:(function(){
+})()},bgcolor:5000268,name:"logo",resource:"footer_logo"},name:"view"},{attrs:{name:"controls",x:70},children:[{attrs:{name:"firstrow",y:4},children:[{attrs:{font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<b>Compile Options:</b>",x:8,y:7},name:"text"},{attrs:{bgcolor:0,height:32,width:412,x:125},children:[{attrs:{bgcolor:9737389,height:30,width:410,x:1,y:1},name:"view"}],name:"view"},{attrs:{$delegates:["onvalue","$m16_$dev$2Dconsole$2Elzx_160_66_reference",function(){
+with(this){
+return cb_backtrace
+}
+},"onvalue","$m17_$dev$2Dconsole$2Elzx_165_62_reference",function(){
+with(this){
+return cb_debug
+}
+}],$m16_$dev$2Dconsole$2Elzx_160_66_reference:function(){
+with(this){
+if(cb_backtrace.value){
+cb_debug.setAttribute("value",true)
+}
+}
+},$m17_$dev$2Dconsole$2Elzx_165_62_reference:function(){
+with(this){
+if(cb_debug.value==false){
+cb_backtrace.setAttribute("value",false)
+}
+}
+},name:"compilecontrols",x:125},children:[{attrs:{id:"rg_runtime",layout:{axis:"x","class":"simplelayout",spacing:4},x:6,y:8.75},children:[{attrs:{$refs:{selected:(function(){
 var $lzsc$f=function(){
 with(this){
 this.setAttribute("selected",app_runtime=="swf7")
@@ -13213,7 +14777,7 @@
 }
 }
 return $lzsc$f
-})()},text:"swf7",value:"swf7"},id:"rb7",name:"radiobutton"},{attrs:{$refs:{selected:(function(){
+})()},id:"rb7",text:"swf7",value:"swf7"},id:"rb7",name:"radiobutton"},{attrs:{$refs:{selected:(function(){
 var $lzsc$f=function(){
 with(this){
 this.setAttribute("selected",app_runtime=="swf8")
@@ -13225,7 +14789,7 @@
 }
 }
 return $lzsc$f
-})()},text:"swf8",value:"swf8"},id:"rb8",name:"radiobutton"},{attrs:{$refs:{selected:(function(){
+})()},id:"rb8",text:"swf8",value:"swf8"},id:"rb8",name:"radiobutton"},{attrs:{$refs:{selected:(function(){
 var $lzsc$f=function(){
 with(this){
 this.setAttribute("selected",app_runtime=="dhtml")
@@ -13237,10 +14801,10 @@
 }
 }
 return $lzsc$f
-})()},text:"DHTML",value:"dhtml"},id:"rbdhtml",name:"radiobutton"}],id:"rg_runtime",name:"radiogroup"},{attrs:{bgcolor:0,height:14,width:1,x:173,y:9.5},name:"view"},{attrs:{$refs:{value:(function(){
+})()},id:"rbdhtml",text:"DHTML",value:"dhtml"},id:"rbdhtml",name:"radiobutton"}],id:"rg_runtime",name:"radiogroup"},{attrs:{bgcolor:0,height:14,width:1,x:173,y:9.5},name:"view"},{attrs:{$refs:{value:(function(){
 var $lzsc$f=function(){
 with(this){
-this.setAttribute("value",app_debug)
+this.setAttribute("value",app_debug=="true")
 }
 }
 $lzsc$f.dependencies=function(){
@@ -13249,15 +14813,27 @@
 }
 }
 return $lzsc$f
-})()},text:"Debug",x:181,y:8.25},id:"cb_debug",name:"checkbox"},{attrs:{$delegates:["onclick","$m15",null],$m15:function(){
+})()},id:"cb_debug",text:"Debug",x:181,y:8.25},id:"cb_debug",name:"checkbox"},{attrs:{$refs:{value:(function(){
+var $lzsc$f=function(){
 with(this){
+this.setAttribute("value",app_backtrace=="true")
+}
+}
+$lzsc$f.dependencies=function(){
+with(this){
+return [this,"app_backtrace"]
+}
+}
+return $lzsc$f
+})()},id:"cb_backtrace",text:"Backtrace",x:250,y:8.25},id:"cb_backtrace",name:"checkbox"},{attrs:{$delegates:["onclick","$m15",null],$m15:function(){
+with(this){
 canvas.gotoApp()
 }
-},clickable:true,text:"Compile",x:244,y:4},name:"button"}],name:"view"},{attrs:{width:22,x:450},name:"view"},{attrs:{$delegates:["onclick","$m16",null],$m16:function(){
+},clickable:true,text:"Compile",x:334,y:4},name:"button"}],name:"view"},{attrs:{width:22,x:450},name:"view"},{attrs:{$delegates:["onclick","$m18",null],$m18:function(){
 with(this){
 canvas.viewSource()
 }
-},clickable:true,text:"View Source",x:540,y:3},name:"button"}],name:"view"},{attrs:{$refs:{width:(function(){
+},clickable:true,text:"View Source",x:580,y:3},name:"button"}],name:"view"},{attrs:{$refs:{width:(function(){
 var $lzsc$f=function(){
 with(this){
 this.setAttribute("width",canvas.width-70)
@@ -13281,23 +14857,23 @@
 }
 }
 return $lzsc$f
-})()},y:43},children:[{attrs:{font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<b>Deploy:</b>",x:8,y:4},name:"text"},{attrs:{$delegates:["onclick","$m17",null],$m17:function(){
+})()},y:43},children:[{attrs:{font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<b>Deploy:</b>",x:8,y:4},name:"text"},{attrs:{$delegates:["onclick","$m19",null],$m19:function(){
 with(this){
 canvas.viewWrapper()
 }
-},clickable:true,text:"Server",x:65},name:"button"},{attrs:{$delegates:["onclick","$m18",null],$m18:function(){
+},clickable:true,text:"Server",x:65},name:"button"},{attrs:{$delegates:["onclick","$m20",null],$m20:function(){
 with(this){
 canvas.deploySOLO()
 }
-},clickable:true,text:"SOLO",x:134},name:"button"},{attrs:{align:"right",fgcolor:1381787,options:{ignorelayout:true},y:3},children:[{attrs:{$delegates:["onclick","$m19",null],$m19:function(){
+},clickable:true,text:"SOLO",x:134},name:"button"},{attrs:{align:"right",fgcolor:1381787,options:{ignorelayout:true},y:3},children:[{attrs:{$delegates:["onclick","$m21",null],$m21:function(){
 with(this){
 canvas.viewDocs()
 }
-},clickable:true,font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<u>Documentation</u>"},name:"text"},{attrs:{$delegates:["onclick","$m20",null],$m20:function(){
+},clickable:true,font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<u>Documentation</u>"},name:"text"},{attrs:{$delegates:["onclick","$m22",null],$m22:function(){
 with(this){
 canvas.viewDev()
 }
-},clickable:true,font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<u>Developer Network</u>",x:92},name:"text"},{attrs:{$delegates:["onclick","$m21",null],$m21:function(){
+},clickable:true,font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<u>Developer Network</u>",x:92},name:"text"},{attrs:{$delegates:["onclick","$m23",null],$m23:function(){
 with(this){
 canvas.viewForums()
 }
@@ -13325,7 +14901,7 @@
 }
 }
 return $lzsc$f
-})()},text:"Console Remote Debug",x:700,y:10},id:"cb_remotedebug",name:"checkbox"}],name:"view"}],name:"view"},27)
+})()},id:"cb_remotedebug",text:"Console Remote Debug",x:740,y:10},id:"cb_remotedebug",name:"checkbox"}],name:"view"}],name:"view"},28)
 LzInstantiateView({name:"script",attrs:{script:function(){
 _root.receivingLC=void 0
 _root.sendingLC=void 0

Modified: openlaszlo/branches/legals/lps/admin/dev-console.lzx.swf
===================================================================
(Binary files differ)

Modified: openlaszlo/branches/legals/lps/components/base/basecomponent.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/base/basecomponent.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/base/basecomponent.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -300,6 +300,7 @@
                    will lighten or darken everything that is colorized -->
         <method name="setTint" args="v, color, brightness">
             <![CDATA[
+            if (v.capabilities.colortransform) {
             if (color != "" && color != null){
                 if (brightness == null) { brightness = 0; }
                 var rgb = color;
@@ -316,8 +317,9 @@
                 blue = blue/255*100;
 
                 v.setColorTransform( { ra : red, ga : green, ba : blue,
-                                    rb : brightness, gb : brightness, 
-                                    bb : brightness } );
+                                rb : brightness, gb : brightness, 
+                                bb : brightness } );
+                }
             }
             ]]>
         </method>

Modified: openlaszlo/branches/legals/lps/components/base/basescrollbar.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/base/basescrollbar.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/base/basescrollbar.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -211,6 +211,50 @@
             ]]>
         </method>
 
+        <!--- @keywords private -->
+        <method name="destroy" ><![CDATA[
+            if ('_mwActivateDel' in this) {
+                this._mwActivateDel.unregisterAll();
+                delete this._mwActivateDel;
+            }
+
+            if ('_mwDeactivateDel' in this) {
+                this._mwDeactivateDel.unregisterAll();
+                delete this._mwDeactivateDel;
+            }
+
+            if ('_mwUpdateDel' in this) {
+                this._mwUpdateDel.unregisterAll();
+                delete this._mwUpdateDel;
+            }
+
+            if ('clipSizeDel' in this) {
+                this.clipSizeDel.unregisterAll();
+                delete this.clipSizeDel;
+            }
+
+            if ('targetHeightDel' in this) {
+                this.targetHeightDel.unregisterAll();
+                delete this.targetHeightDel;
+            }
+
+            if ('targetPosDel' in this) {
+                this.targetPosDel.unregisterAll();
+                delete this.targetPosDel;
+            }
+
+            if ('heightDel' in this) {
+                this.heightDel.unregisterAll();
+                delete this.heightDel;
+            }
+
+            delete this.scrolltarget;
+            delete this.focusview;
+            delete this.othersb;
+
+            super.destroy.apply(this, arguments);
+        ]]></method>
+
         <!---  @keywords private -->
         <method name="activateMouseWheel">  <![CDATA[
             this.setAttribute('mousewheelactive', true);
@@ -475,7 +519,15 @@
        <handler name="oninit">
            classroot.thumb = this;
        </handler>
-
+        
+        <!--- @keywords private -->
+        <method name="destroy" ><![CDATA[
+            delete this.classroot.thumb;
+            delete this.target;
+            
+            super.destroy.apply(this, arguments);
+        ]]></method>
+        
         <state name="ythumbdrag">
             <attribute name="doffset" value="this.getMouse( 'y' )" when="once" />
             <attribute name="y"

Modified: openlaszlo/branches/legals/lps/components/base/basetabelement.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/base/basetabelement.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/base/basetabelement.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -131,6 +131,12 @@
         <method name="openned">
             if ( onopenstop ) this.onopenstop.sendEvent();
             this.isopening -= 1;
+            if (this.isopening == 0) {
+                //now we can savely call unregisterAll
+                if (this.dlo) {
+                    this.dlo.unregisterAll();
+                }
+            } 
         </method>
 
         <!--- Called when the tabelement is completely closed. -->
@@ -151,6 +157,22 @@
                 this.updateDefault();
             }
         ]]></method>
+
+        <!--- @keywords private -->
+        <method name="destroy" ><![CDATA[
+            if (dlo in this) {
+                this.dlo.unregisterAll();
+                delete this.dlo;
+            }
+            
+            if (dlc in this) {
+                this.dlc.unregisterAll();
+                delete this.dlc;
+            }
+            
+            super.destroy.apply(this, arguments);
+        ]]></method> 
+
         <doc>
           <tag name="shortdesc"><text>Base class for the contents of a basetabslider.</text></tag>
           <text>

Modified: openlaszlo/branches/legals/lps/components/base/basetrackgroup.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/base/basetrackgroup.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/base/basetrackgroup.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -54,15 +54,57 @@
         <event name="onmousetrackoutleft" />
 
         <!--- @keywords private -->
-        <handler name="onconstruct">
+        <method name="construct">
+            super.construct.apply(this, arguments);
+            
             this._activateDL    = new LzDelegate(this,'activateTrackgroup');
             this._deactivateDL  = new LzDelegate(this,'deactivateTrackgroup');
             this._repeattrackDL = new LzDelegate(this,'trackingout');
             this._destroyDL = new LzDelegate(this,'destroyitem');
             this._trackgroup = "tg" + this.getUID();
             this._boundstrackgroup = "btg" + this.getUID();
-        </handler>
+        </method>
+        
+        <!--- @keywords private -->
+        <method name="init" >
+            super.init.apply(this, arguments);
+            
+            LzTrack.register( this.boundsref, this._boundstrackgroup );
+        </method>
+        
+        <!--- @keywords private -->
+        <method name="destroy" ><![CDATA[
+            this.setTracking(false);
 
+            //LzTrack.unregisterAll(this._trackgroup);//LPP-4429: we would call this if it was implemented
+            LzTrack.unregister(this.boundsref, this._boundstrackgroup);
+            
+            if (_destroyDL in this) {
+                this._destroyDL.unregisterAll();
+                delete this._destroyDL;
+            }
+            
+            if (_activateDL in this) {
+                this._activateDL.unregisterAll();
+                delete this._activateDL;
+            }
+            
+            if (_deactivateDL in this) {
+                this._deactivateDL.unregisterAll();
+                delete this._deactivateDL;
+            }
+
+            if (_repeattrackDL in this) {
+                this._repeattrackDL.unregisterAll();
+                delete this._repeattrackDL;
+            }
+            
+            delete this.activateevents;//improvement for "onremovesubview"
+            delete this.deactivateevents;//improvement for "onremovesubview"
+            
+            super.destroy.apply(this, arguments);
+        ]]></method>
+
         <!--- sets the view that will act as the bounds for this trackgroup -->
         <method name="setBoundsRef" args="ref" >
             this.boundsref = ref;
@@ -130,11 +172,6 @@
         ]]>
         </handler>
 
-        <!--- @keywords private -->
-        <handler name="oninit" >
-            LzTrack.register( this.boundsref, this._boundstrackgroup );
-        </handler>
-
         <!--- Called when the mouse is down and tracked
               outside the bounding rect defined by boundsref. this method
               generates the onmousetrackoutleft, onmousetrackoutright,

Modified: openlaszlo/branches/legals/lps/components/base/datalistselector.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/base/datalistselector.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/base/datalistselector.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -149,8 +149,8 @@
             }
 
             if ( ! immediateparent.subviews[0].cloneManager ) {
-                return (immediateparent.subviews[0] == target_element ? 0 : -1);
-            }
+                return (immediateparent.subviews[0] == s ? 0 : -1);
+            } 
 
             var nodelist = immediateparent.subviews[0].cloneManager.nodes;
             var found_index = -1;
@@ -223,25 +223,27 @@
 
         <method name="getItemByData" args="data">
             <![CDATA[ 
-                return getItemByIndex( this.getItemIndexByData( data ) );
+                return data ? getItemByIndex( this.getItemIndexByData( data ) ) : null;
             ]]>
         </method>
 
         <method name="getItemIndexByData" args="data">
             <![CDATA[ 
-            var svs = immediateparent.subviews;
-            if (svs[0].cloneManager) {
-                var nodes = svs[0].cloneManager['nodes'];
-                if( nodes != null ) {
-                   for ( var i = 0; i< nodes.length; i++ ){
-                      if ( nodes[ i ] == data ){
-                          return i;
-                      }
-                   }
+            if (data) {
+                var svs = immediateparent.subviews;
+                if (svs[0].cloneManager) {
+                    var nodes = svs[0].cloneManager['nodes'];
+                    if( nodes != null ) {
+                        for ( var i = 0; i< nodes.length; i++ ){
+                            if ( nodes[ i ] == data ){
+                                return i;
+                            }
+                        }
+                    }
+                } else if( svs[0].datapath.p == data ) {
+                    return 0;
                 }
             }
-            else if( svs[0].datapath.p == data )
-              return 0;
             return null;
             ]]>
        </method>

Modified: openlaszlo/branches/legals/lps/components/extensions/drawview.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/extensions/drawview.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/extensions/drawview.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -734,7 +734,7 @@
                         m.curveTo(op[1], op[2], op[3], op[4]);
                     }
                 }
-                this.context._visible = true;
+                this.context._visible = this.visible;
             }
     
             function clip () {

Modified: openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontcolor.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontcolor.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontcolor.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -34,7 +34,7 @@
          itemclassname="colorswatch" itemdatapath="fontcolors:/clr"
          focusable="false" listwidth="${this.bkgnd.mid.width}">
          
-         <attribute name="editor" value="$once{this.parent.editor}" />
+         <attribute name="editor" />
          <attribute name="toolbar" value="$once{this.parent}" />
          
          <tooltip>Choose font color</tooltip>      
@@ -45,9 +45,18 @@
          <method name="init">
              super.init();
              toolbar.registerTool(this,"color");
+         </method>
+
+         <!-- When we get an editor to hook up to, make this menu's value
+            match up to the default color of the editor. 
+            Fixes LPP-4461: In rich text editor, font color combo box does 
+            not update when cursor moves to different colored text 
+            [bshine 08.09.2007] -->
+         <method event="oneditor" args="e">
              this.setValue(this.editor.defaultfontcolor, true);
-             this.csq.setColor(this.editor.defaultfontcolor);
+             this.csq.setColor(this.editor.defaultfontcolor);             
          </method>
+         
          <!---  @keywords private
              apply state for late instantiation of local data -->
          <method name="construct" args="parent, args">

Modified: openlaszlo/branches/legals/lps/components/incubator/rich-text/richtexteditarea.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/incubator/rich-text/richtexteditarea.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/incubator/rich-text/richtexteditarea.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -4,7 +4,54 @@
   -->
 <library>
     <include href="scrollrichedittext.lzx"/>
-    
+        
+        
+        
+  <!-- 
+      This is a fix for EM-1129 and LPP-4396: clicking bold moves the insertion
+      point. We need to store the selection before losing the selection to 
+      another view. [bshine 2007.08.13]
+    -->
+    <script><![CDATA[
+        LzModeManager.rawMouseEvent = function ( eName ) {
+            //Debug.warn("rawmouseevent %w", eName);
+            //assume this happens before handleMouseEvent though order is
+            //not guaranteed
+            
+            // Store the selection in the currently focused text editor
+            // (if any). Useful for restoring a text field's selection
+            // after a click event.
+            var focus = Selection.getFocus();
+            if (focus) {
+                // Debug.info("got focus: %w", focus);             
+                // focus is a path string - we have to eval() it to get
+                // an actual movieclip
+                var textclip = eval(focus); // apologies - dstowell
+                // [NB dstowell] __LZrte is a field I created to
+                // store a reference to a rich text editor view
+                // in the textclip itself. This field is _not_ part
+                // of the LFC.
+                if ("__LZrte" in textclip) {
+                    // if we get here, it means that the focus is 
+                    // currently the rich text editor. Before
+                    // we handle the mouse event, store the selection. 
+                    var beginIndex = Selection.getBeginIndex();
+                    var endIndex   = Selection.getEndIndex();
+                    if (-1 != beginIndex && -1 != endIndex) {
+                        // Debug.warn("rawMouseEvent is changing the ssel and esel to %d-%d", beginIndex, endIndex); 
+                        textclip.__LZrte._ssel = beginIndex;
+                        textclip.__LZrte._esel = endIndex;
+                    }
+                }
+            }
+
+            this.clickStream.push( this.clstDict[ eName ] );
+            //call the cleanup delegate
+
+            this.callNext();
+        }
+    ]]></script>
+            
     <!--- 
     A view which contains the text area for a rich text editor. Combine with a 
     richtexttoolbar to make an actual editor. 
@@ -202,21 +249,7 @@
                 }
             }
         ]]></method>
-
-        <!--- Forget the selection if we lose focus to a focusable widget, but
-            keep the selection if we lose focus to a non-focusable widget, like
-            the toolbar buttons. 
-            @param view s: the view which is gaining the selection
-        -->
-        <method event="onblur" args="s">
-            var start = this._field.getSelectionPosition();
-            var size = this._field.getSelectionSize();
-            this._ssel = start;
-            this._esel = start + size;          
-            this._fieldhasfocus = false; 
-        </method>
         
-        
         <!--- If the mouse down is over me or any of my children, remember that,
             so we can listen for an onmouseup anywhere. A mouseup after a mousedown
             indicates that the selection has changed.
@@ -225,14 +258,15 @@
         <method event="onmousedown" reference="LzGlobalMouse" args="who"><![CDATA[
             if ((who != null) && (this._containsView(who))) {
                 // the mouse went down on a child of me
-                // Debug.write("mousedown on child of me"); 
+                // Debug.info("mousedown on child of me, this is %w, who is %#w", this, who); 
                 this._mousedownorigin = who; 
             } else if ((who == null) && (inp.containsPt(this.getMouse("x"), this.getMouse("y")))) {
                 // the mouse went down on me
                 // Debug.write("mousedown on me"); 
                 this._mousedownorigin = this; 
             } else {
-                // the mouse went down on someone other than me; i'm not interested. 
+                // the mouse went down on someone other than me, 
+                // Debug.info("mousedown on someone else: %w", who); 
                 this._mousedownorigin = null;
             }
             ]]>
@@ -258,6 +292,7 @@
                         // If the mouse click also ended on the rich text editor, 
                         // it's just a caret move. 
                         if (inp.containsPt(this.getMouse("x"), this.getMouse("y"))) {
+                            // Debug.info("mouse click starts and ends on RTE"); 
                             this._caretmove(); 
                         } else {  
                             // Debug.write("handleLostMouseDown"); 
@@ -268,7 +303,6 @@
                     } else {
                         // We have focus, and there's a mousedown/mouseup pair in progress,
                         // and it started on one of the subviews of the RTE. 
-                        // Debug.write("lost mousedown, origin was ", this._mousedownorigin); 
                     } 
 
                 } else {
@@ -286,7 +320,7 @@
         
         <!--- Save selected region. -->
         <method name="saveSelectionRegion"><![CDATA[  
-            if (LzFocus.getFocus() == this._field) {
+            if (LzFocus.getFocus() == this._field) {                
                 var selpos  = this._field.getSelectionPosition();
                 var selsize = this._field.getSelectionSize();
                 if( selpos >= 0 && selsize >= 0){  
@@ -355,7 +389,7 @@
             var ssel = this._ssel;
             var esel = this._esel;
 
-
+            // Debug.write("setFormatAttribute, sel is %d to %d", ssel, esel);             
             this.currentformat[attr] = val;
             this.isHTML = true;
                                     

Modified: openlaszlo/branches/legals/lps/components/incubator/rich-text/scrollrichedittext.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/incubator/rich-text/scrollrichedittext.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/incubator/rich-text/scrollrichedittext.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -86,6 +86,16 @@
             <event name="onpos" />
             <attribute name="pos" value="0" setter="this.setPos(pos)"/>
 
+
+            <method name="init">
+                super.init();
+                // Store a link to the enclosing rich text edit area deep in this
+                // swf sprite, so that we can do a clever fix for LPP-4396, 
+                // "clicking bold moves insertion point." 
+                // See the LzModeManager.rawMouseEvent handler defined in 
+                // richtexteditarea.lzx to see how we use this breadcrumb. 
+                this.sprite.__LZtextclip.__LZrte = this.parent;
+            </method>
             <!--- Set the scroll position and update the scrollbar to match 
                 @param Number p: position-->
             <method name="setPos" args="p">

Modified: openlaszlo/branches/legals/lps/components/incubator/rich-text/test/formatfontsize.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/incubator/rich-text/test/formatfontsize.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/incubator/rich-text/test/formatfontsize.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -20,7 +20,6 @@
 
          the state delays instantiation until the RTE is used. -->
 
-     <state name="fontSizeData">
 
          <dataset name="fontsizes">
 
@@ -40,7 +39,6 @@
 
          </dataset>
 
-     </state>
 
      
 
@@ -50,7 +48,7 @@
 
          
 
-         <attribute name="editor" value="$once{this.parent.editor}" />
+         <attribute name="editor" />
 
          <attribute name="toolbar" value="$once{this.parent}" />
 
@@ -72,8 +70,6 @@
 
              toolbar.registerTool(this,"size");
 
-             this.setValue(this.editor.defaultfontsize, true); 
-
          </method>
 
          <!---  @keywords private
@@ -84,8 +80,6 @@
 
              super.construct(parent, args);
 
-             fontSizeData.apply();
-
          </method>
 
          
@@ -93,7 +87,7 @@
          <!---  @keywords private -->
 
          <method event="onselect"><![CDATA[
-
+                this.setChanged(true); 
                 //------------------------------------------------------------
 
                 // make sure that we call into editor if this combobox has
@@ -103,18 +97,23 @@
                 //------------------------------------------------------------
 
                 if (this.changed && this.toolbar._passthruchanges) {                   
+                    if ("editor" in this) {
+                        this.editor.setFormatAttribute("size", this.getValue()); 
+                        this.editor.delegateRestoreSelection(); 
+                    }
 
-                    this.editor.setFormatAttribute("size", this.getValue()); 
-
-                    this.editor.delegateRestoreSelection(); 
-
-                }
-
+                } 
                 ]]>
 
          </method>
 
          
+         <!-- When we get an editor to hook up to, make this menu's value
+            match up to the default font of the editor.  -->
+         <method event="oneditor" args="e">
+             this.setValue(this.editor.defaultfontsize, true);
+         </method>
+         
 
          <!--- method broadcast out by the toolbar for clearing tool's state -->
 
@@ -155,7 +154,7 @@
  
 
 <!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2005-2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Copyright 2005-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
 * Use is subject to license terms.                                            *
 * X_LZ_COPYRIGHT_END ****************************************************** -->
 <!-- @LZX_VERSION@                                                         -->

Modified: openlaszlo/branches/legals/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/incubator/rich-text/test/richtexteditarea-test.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -26,9 +26,9 @@
     <formatbtn name="boldbtn" id="gBoldBtn" format="bold" iconname="bold" icony="4" />    
     <formatbtn name="underlinebtn" id="gUnderlineBtn" format="underline" iconname="underline" />  
     <formatbtn name="italicbtn" id="gItalicBtn" format="italic" iconname="italic" icony="4" />
-    <formatfontface name="fontfacecb" y="${(parent.height-this.height)/2}"/>
-    <formatfontcolor name="fontcolorcb" y="${(parent.height-this.height)/2}"/>
-    <formatfontsize name="fontsizecb" y="${Math.round((parent.height-this.height)/2)}"/>
+    <formatfontface name="fontfacecb" id="gFontFaceCB" y="${(parent.height-this.height)/2}"/>
+    <formatfontcolor name="fontcolorcb" id="gFontColorCB" y="${(parent.height-this.height)/2}"/>
+    <formatfontsize name="fontsizecb" id="gFontSizeCB" y="${Math.round((parent.height-this.height)/2)}"/>
     </richtexttoolbar>
         
 
@@ -42,6 +42,16 @@
             defaultfontcolor="0x336699"
 
             border="10"  text="For reasons which many persons thought ridiculous, Mrs. Lightfoot Lee decided to pass the winter in Washington. She was in excellent health, but she said that the climate would do her good. In New York she had troops of friends, but she suddenly became eager to see again the very small number of those who lived on the Potomac. It was only to her closest intimates that she honestly acknowledged herself to be tortured by ennui. Since her husband's death, five years before, she had lost her taste for New York society; she had felt no interest in the price of stocks, and very little in the men who dealt in them; she had become serious. What was it all worth, this wilderness of men and women as monotonous as the brown stone houses they lived in? In her despair she had resorted to desperate measures. She had read philosophy in the original German, and the more she read, the more she was disheartened that so much culture should lead to nothing... nothing.">
+                <method name="init">
+                    super.init();
+                    gBoldBtn.setAttribute("editor", this); 
+                    gUnderlineBtn.setAttribute("editor", this); 
+                    gItalicBtn.setAttribute("editor", this); 
+                    gFontFaceCB.setAttribute("editor", this);                         
+                    gFontSizeCB.setAttribute("editor", this);                         
+                    gFontColorCB.setAttribute("editor", this);               
+                </method>           
+            
         </richtexteditarea>
     </view> 
 </view>

Modified: openlaszlo/branches/legals/lps/components/lz/list.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/lz/list.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/lz/list.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -313,6 +313,16 @@
                 if (this._bgcolor == null) interior.setBGColor(s.bgcolor);
             }
         </method>
+
+        <!--- @keywords private -->
+        <method name="destroy" ><![CDATA[
+            if (this.autoscrollbar)
+                this.setAttribute("autoscrollbar", false);
+            if (this.shownitems != -1)
+                this.setAttribute("shownitems", -1);
+                    
+            super.destroy.apply(this, arguments);
+        ]]></method> 
         <doc>
           <tag name="shortdesc"><text>
               contains listitems and provides selection capabilities.

Modified: openlaszlo/branches/legals/lps/components/lz/radio.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/lz/radio.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/lz/radio.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -33,6 +33,12 @@
         <method name="applyData" args="d">
             //try to find the relevant radio button, or clear selection if none
             this._setvalue( d );
+            var item = null;
+            if (d != null) {
+                item = this.getItem( d );
+            }
+            if ( item ) this.select( item );
+            else this.clearSelection();
         </method>
 
         <!--- @keywords private -->
@@ -44,8 +50,6 @@
                     item = this.getItem( val );
                 }
                 this.value = val;
-                if ( item ) this.select( item );
-                else this.clearSelection();
             } else {
                 this.value = val;
             }
@@ -156,13 +160,6 @@
         </method>
         
         <!--- @keywords private -->
-        <handler name="onclick">
-            if (!this.selected) {
-                parent.select(this);
-            }
-        </handler>
-
-        <!--- @keywords private -->
         <method name="setHilite" args="dohilite">
             _title.setAttribute('fgcolor',
                 dohilite ? style.texthilitecolor : style.textcolor);

Modified: openlaszlo/branches/legals/lps/components/lz/tree.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/lz/tree.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/lz/tree.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -20,8 +20,8 @@
     <!--- Folder/file icon resource:
           frame 1 (open folder), frame 2 (closed folder), frame 3 (file) -->
     <resource name="lztree_folder_rsc">
-        <frame src="resources/tree/folder_closed.swf"/>
-        <frame src="resources/tree/folder_opened.swf"/>
+        <frame src="resources/tree/folder_closed.png"/>
+        <frame src="resources/tree/folder_opened.png"/>
         <frame src="resources/tree/document.swf"/>
     </resource>
 

Modified: openlaszlo/branches/legals/lps/components/rpc/library/dhtml/rpc.js
===================================================================
--- openlaszlo/branches/legals/lps/components/rpc/library/dhtml/rpc.js	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/rpc/library/dhtml/rpc.js	2007-09-13 23:38:53 UTC (rev 6473)
@@ -139,11 +139,11 @@
 
         if (delegate['dataobject'] != null) {
             if ( delegate.dataobject instanceof LzDataset ) {
-                var element = LzDataElement.prototype.valueToElement(data);
+                var element = LzDataElement.valueToElement(data);
                 // the child nodes of element will be placed in datasets childNodes
                 delegate.dataobject.setData( element.childNodes );
             } else if ( delegate.dataobject instanceof LzDataElement ) {
-                var element = LzDataElement.prototype.valueToElement(data);
+                var element = LzDataElement.valueToElement(data);
                 // xpath: element/value
                 delegate.dataobject.appendChild( element );
             } else {

Modified: openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -35,8 +35,6 @@
         super.construct( p, a );
         this.__emptyArray = [];
         this.clonedel = new LzDelegate( this, '__adjustVisibleClones');
-        this.mask = this.parent.parent;
-        this.container = this.parent;
     }
 
     //  @keywords private

Modified: openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -25,6 +25,12 @@
     <!--- A pixel amount to use between each replicated view -->
     <attribute name="spacing" value="0" />
 
+    <!--- The view that will contain the replicated nodes.  Defaults to the immediateparent of the replicator. -->
+    <attribute name="container" />
+
+    <!--- The view that will clip the replicated nodes.  Defaults to the immediateparent of the container -->
+    <attribute name="mask" />
+
     <!--- The list of elements controlled by this repliator -->
     <attribute name="clones" />
 
@@ -105,6 +111,9 @@
     // Spacing between replications
     var spacing = 0;
 
+    var dataset = null;
+    var xpath = null;
+
     //  The list of elements controlled by this replicator
     var clones = null;
     var nodes = null;
@@ -119,13 +128,13 @@
         this._cloneprops = [];
         this._clonepool = [];
         super.construct.apply(this, arguments);
+        this.container = this.immediateparent;
+        this.mask = this.container.immediateparent;
     }
 
     // @keywords private
     function init() {
       super.init.apply(this, arguments);
-      // Set the layout in the view that will hold the replicated views
-//      this.immediateparent.setAttribute('layout', {axis: this.axis, spacing: this.spacing});
       if (this.dataset && this.xpath) {
         this.setNodes(this.dataset.getPointer().xpathQuery(this.xpath))
       }
@@ -138,7 +147,7 @@
         //Debug.write( 'replicated', replicated );
         if ( c.length ) {
           Debug.warn("%s: only a single child view is replicated", this);
-          this.immediateparent.createChildren( c );
+          this.container.createChildren( c );
         } else {
           this.__LZinstantiationDone();
         }
@@ -160,7 +169,7 @@
         this.setAttribute("replicatedsize", this.clones.length == 0
                      ? 0
                      : this.clones[this.clones.length-1][this._sizes[this.axis]]);
-        this.onnodes.sendEvent();
+        if (this.onnodes.ready) { this.onnodes.sendEvent(); }
     }
 
     //  Insert a node in existing list of elements.
@@ -228,7 +237,7 @@
         var v;
         if ( this._clonepool.length ) {
             v  = this._clonepool.pop();
-            v.setVisible( true );
+            if (v.visible != true) v.setVisible( true );
         } else {
             v =  this._makeClone();
         }
@@ -237,7 +246,7 @@
 
     //  @keywords private
     function _makeClone () {
-        var v = this.immediateparent.makeChild( this.replicated );
+        var v = this.container.makeChild( this.replicated );
         v.setAttribute( "clonenumber", null );
         return v;
     }
@@ -245,7 +254,7 @@
     //  @keywords private
     function poolClone (c) {
         if ( c.clonenumber ) this.unbind( c );
-        c.setVisible( false );
+        if (c.visible != false) c.setVisible( false );
         this._clonepool.push( c );
     }
 
@@ -262,20 +271,30 @@
     //          @param n: The node to which it is being set.
 
     function setData (v, n) {
-        v.setData( this.nodes[ n ] );
-        v.applyData(this.nodes[n]);
+        if (v) {
+            v.setData( this.nodes[ n ] );
+            if (v['applyData']) v.applyData(this.nodes[n]);
+        }
     }
 
     //  @keywords private
     function __adjustVisibleClones () {
+        var p = this.parent;
+        for (var l in p.layouts) {
+            p.layouts[l].lock();
+        }
         while( this.clones.length ) this.poolClone( this.clones.pop() );
-        if (this.nodes != null) {
-            for( var i = 0;i < this.nodes.length; i++ ){
+        if (this['nodes'] != null) {
+            var l = this.nodes.length;
+            for( var i = 0;i < l; i++ ){
                 var cl = this.getClone( );
                 this.bind( cl, i );
                 this.clones[ i ] = cl;
             }
         }
+        for (var l in p.layouts) {
+            p.layouts[l].unlock();
+        }
     }
 
     //  Gets the clone for the given offset, scrolling it into view first

Modified: openlaszlo/branches/legals/lps/components/utils/replicator/replicatorselectionmanager.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/utils/replicator/replicatorselectionmanager.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/components/utils/replicator/replicatorselectionmanager.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -11,7 +11,7 @@
           super.init.apply(this, arguments);
           // If replicator is not specified, search siblings for a replicator
           if (! this.replicator) {
-            var s = parent.subnodes;
+            var s = immediateparent.subnodes;
             if (s == null) return;
             for (var i = s.length-1; i >= 0; i-- ) {
                 var si = s[ i ];

Modified: openlaszlo/branches/legals/lps/includes/source/embednew.js
===================================================================
--- openlaszlo/branches/legals/lps/includes/source/embednew.js	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/includes/source/embednew.js	2007-09-13 23:38:53 UTC (rev 6473)
@@ -247,7 +247,7 @@
 
             // add lps vars to query string
             if (i == 'lzr' || i == 'lzt'
-                || i == 'krank' || i == 'debug' || i == 'profile'
+                || i == 'krank' || i == 'debug' || i == 'profile' || i == 'lzbacktrace'
                 || i == 'lzdebug' || i == 'lzkrank' || i == 'lzprofile'
                 || i == 'fb' || i == 'sourcelocators' || i == '_canvas_debug') {
                 query += i + '=' + v + '&';
@@ -503,6 +503,12 @@
                 subString: "Firefox",
                 identity: "Firefox"
             },
+            {
+                string: navigator.userAgent,
+                subString: "Iceweasel",
+                versionSearch: "Iceweasel", 
+                identity: "Firefox"
+            },
             {    // for newer Netscapes (6+)
                 string: navigator.userAgent,
                 subString: "Netscape",

Modified: openlaszlo/branches/legals/lps/utils/viewer/viewer.jsp
===================================================================
--- openlaszlo/branches/legals/lps/utils/viewer/viewer.jsp	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/lps/utils/viewer/viewer.jsp	2007-09-13 23:38:53 UTC (rev 6473)
@@ -56,7 +56,7 @@
       try {
 	String p = getServletContext().getRealPath(fname);
 	if (p != null && !new File(p).exists()) {
-	    String resolved = FileResolver.DEFAULT_FILE_RESOLVER.resolve(fname, base).toString();
+	    String resolved = FileResolver.DEFAULT_FILE_RESOLVER.resolve(fname, base, false).toString();
 	    if (resolved.startsWith(getServletContext().getRealPath(""))) {
 	      fname = resolved.substring(getServletContext().getRealPath("").length());
 	      found = true;
@@ -178,6 +178,6 @@
     writer.close();
 %>
 <!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
 * Use is subject to license terms.                                            *
 * X_LZ_COPYRIGHT_END ****************************************************** -->

Modified: openlaszlo/branches/legals/test/components/base/lzunit-basedatacombobox.lzx
===================================================================
--- openlaszlo/branches/legals/test/components/base/lzunit-basedatacombobox.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/components/base/lzunit-basedatacombobox.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -1,13 +1,15 @@
 <canvas debug="true" title="lzunit-basedatacombobox.lzx" >
   <include href="lzunit" />
   <include href="base/basedatacombobox.lzx"/>
+  <include href="lz/plainfloatinglist.lzx" />  
 
 <!--
   covers-tags: basedatacombobox smoketest
 -->
 
 
-  <class name="simplecombobox" extends="basedatacombobox" width="100">
+  <class name="simplecombobox" extends="basedatacombobox" width="100"
+      menuclassname="plainfloatinglist">
       <attribute name="_cbtext" value="$once{this._text}"/>
       <view width="100%" height="20" focusable="false" bgcolor="#CCCCCC">
           <handler name="onclick">
@@ -36,11 +38,36 @@
     <item value="3" text="C"/>
   </dataset>
   
-  <simplecombobox itemdatapath="ds1:/"/>
+  <simplecombobox x="100" id="scbox" itemdatapath="ds1:/item"/>
   
   <TestSuite>
 
     <TestCase>
+        <method name="testSimpleSetGet">
+            scbox.setValue(3);
+            assertEquals(3, scbox.getValue() ); 
+        </method>
+        <method name="testBadSelectionIndex">
+            scbox.setValue(2);            
+            assertEquals( 2, scbox.getValue() ); 
+            scbox._updateSelectionByIndex( -1, false, false); 
+            // Changing the selection to -1 should make the value become undefined, or null,
+            // but it shouldn't just keep the same value as before. 
+            assertFalse( 2 == scbox.getValue() ); 
+        </method>
+        
+        <method name="testSelectItemAt">
+            scbox.setValue(3); 
+            scbox.selectItemAt(1);
+            assertEquals(2, scbox.getValue()); 
+        </method>
+        
+        <method name="testBadSelectItemAt">
+            scbox.setValue(3); 
+            scbox.selectItemAt(-1);
+            assertEquals('', scbox.getValue() ); 
+        </method>
+        
     
     </TestCase>
     
@@ -49,7 +76,7 @@
 </canvas>
 
 <!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2006 Laszlo Systems, Inc. All Rights Reserved.                    *
+* Copyright 2006-2007 Laszlo Systems, Inc. All Rights Reserved.                    *
 * Use is subject to license terms.                                            *
 * X_LZ_COPYRIGHT_END ****************************************************** -->
 <!-- @LZX_VERSION@                                                         -->

Modified: openlaszlo/branches/legals/test/explicit-replicators/lazy-replicator.lzx
===================================================================
--- openlaszlo/branches/legals/test/explicit-replicators/lazy-replicator.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/explicit-replicators/lazy-replicator.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -1,5 +1,5 @@
 <canvas debug="true" proxied="false">
-    <debug x="200" y="0" height="100%" fontsize="16"/>
+    <debug x="50%" y="5%" height="90%" />
 
     <dataset name="mydata">
       <product name="vanilla" color="1 white"/>

Modified: openlaszlo/branches/legals/test/explicit-replicators/replicator.lzx
===================================================================
--- openlaszlo/branches/legals/test/explicit-replicators/replicator.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/explicit-replicators/replicator.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -9,8 +9,8 @@
   </dataset>
 
   <view name="bar">
+    <simplelayout axis="y" spacing="2" />
     <replicator name="foo"
-                axis="y" spacing="2"
                 dataset="mydata"
                 xpath="'/product/'">
       <view bgcolor="red" height="23">

Modified: openlaszlo/branches/legals/test/explicit-replicators/test-replicator.lzx
===================================================================
--- openlaszlo/branches/legals/test/explicit-replicators/test-replicator.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/explicit-replicators/test-replicator.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -1,65 +1,143 @@
 <!-- Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved. -->
-<canvas>
+<canvas debug="true" proxied="false">
+  <debug height="90%" width="40%" x="55%" y="5%" />
 
-    <window width="200" height="200" name="repltest"
-            resizable="true" title="lazy replicator">
-        <lazyreplicator id="lr">
-            <replicatorselectionmanager id="foo" name="selman"/>
-            <handler name="oninit">
-                this.setNodes( [ 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 
-                                 89 , 144 , 233 , 377 , 610 , 987 , 
-                                 1597 , 2584 , 4181 , 6765 , 10946 , 
-                                 17711 , 28657 , 46368 , 75025 , 121393 , 
-                                 196418 , 317811 , 514229 ] );
-            </handler>
-            <text width="1000">
-                <attribute name="selected" value="false"/>
-                <attribute name="bgcolor" 
-                           value="${selected ? 0xCCDDEE : null }"/>
+  <dataset name="testdata">
+    <fibs>
+      <fib value="2" />
+      <fib value="3" />
+      <fib value="5" />
+      <fib value="8" />
+      <fib value="13" />
+      <fib value="21" />
+      <fib value="34" />
+      <fib value="55" />
+      <fib value="89" />
+      <fib value="144" />
+      <fib value="233" />
+      <fib value="377" />
+      <fib value="610" />
+      <fib value="987" />
+      <fib value="1597" />
+      <fib value="2584" />
+      <fib value="4181" />
+      <fib value="6765" />
+      <fib value="10946" />
+      <fib value="17711" />
+      <fib value="28657" />
+      <fib value="46368" />
+      <fib value="75025" />
+      <fib value="121393" />
+      <fib value="196418" />
+      <fib value="317811" />
+      <fib value="514229" />
+    </fibs>
+  </dataset>
 
-                <method name="update" args="data , n">
-                    this.setText( n  + " : " + data );
-                </method>
-                <handler name="onclick">
-                    parent.selman.select( this );
-                </handler>
-            </text>
-        </lazyreplicator>
-        <scrollbar id="sb"/>
-    </window>
+  <text>
+    Compare explicit and implicit replicator behavior
+  </text>
 
-    <window width="200" height="200" x="250"
-            resizable="true" title="replicator">
-        <replicator>
-            <selectionmanager name="selman"/>
-            <handler name="oninit">
-                this.setNodes( [ 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 , 
-                                 89 , 144 , 233 , 377 , 610 , 987 , 
-                                 1597 , 2584 , 4181 , 6765 , 10946 , 
-                                 17711 , 28657 , 46368 , 75025 , 121393 , 
-                                 196418 , 317811 , 514229 ] );
-            </handler>
-            <simplelayout/>
-            <text width="1000">
-                <attribute name="selected" value="false"/>
-                <attribute name="bgcolor" 
-                           value="${selected ? 0xCCDDEE : null }"/>
+  <window width="20%" height="20%" x="5%" y="5%" name="explicitlazyrepltest"
+          resizable="true" title="explicit lazy replicator">
+    <list width="${immediateparent.width}" height="${immediateparent.height}">
+      <replicatorselectionmanager name="selman" />
+      <lazyreplicator id="elr" dataset="testdata" xpath="'fibs/fib'">
+        <text width="100">
+          <attribute name="selected" value="false"/>
+          <attribute name="bgcolor"
+                     value="${selected ? 0xCCDDEE : null }"/>
+          <attribute name="index" value="$path{'position()'}" />
+          <attribute name="value" value="$path{'@value'}" />
+          <method name="applyData">
+            this.format('%s: %d', this.index, this.value);
+          </method>
+          <handler name="onclick">
+            Debug.write(parent.selman.isSelected( this ), parent.selman.toggle);
+            parent.selman.select( this );
+          </handler>
+        </text>
+      </lazyreplicator>
+      <!-- FIXME: [2007-08-10 ptw] (LPP-4484) -->
+      <!-- NOT WORKING scrollbar id="lsb" scrolltarget="immediateparent" -->
+    </list>
+  </window>
 
-                <method name="setSelected" args="isSel">
-                    parent.setCloneProperty( this, "selected", isSel );
-                </method>
+  <window width="20%" height="20%" x="30%" y="5%" name="implicitlazyrepltest"
+          resizable="true" title="implicit lazy replicator">
+    <list width="${immediateparent.width}" height="${immediateparent.height}" >
+      <selectionmanager name="selman" />
+      <text width="100" id="ilr">
+        <datapath xpath="testdata:/fibs/fib" replication="lazy" />
+        <attribute name="selected" value="false"/>
+        <attribute name="bgcolor"
+                   value="${('selected' in this &amp;&amp; this.selected) ? 0xCCDDEE : null }"/>
+        <attribute name="index" value="$path{'position()'}" />
+        <attribute name="value" value="$path{'@value'}" />
+        <handler name="ondata">
+          this.format('%s: %d', this.index, this.value);
+        </handler>
+        <handler name="onclick">
+          Debug.write(parent.selman.isSelected( this ), parent.selman.toggle);
+          parent.selman.select( this );
+        </handler>
+        <method name="setSelected" args="value">
+          this.selected = value;
+          this.onselected.sendEvent(value);
+        </method>
+      </text>
+    </list>
+  </window>
 
-                <method name="update" args="data , n">
-                    this.setText( n  + " : " + data );
-                </method>
-                <handler name="onclick">
-                    Debug.write( parent.selman.isSelected( this ) ,
-                                parent.selman.toggle );
-                    parent.selman.select( this );
-                </handler>
-            </text>
-        </replicator>
-        <scrollbar/>
-    </window>
+  <window width="20%" height="20%" x="5%" y="50%" name="explicitsimplerepltest"
+          resizable="true" title="explicit replicator">
+    <list width="${immediateparent.width}" height="${immediateparent.height}">
+      <replicatorselectionmanager name="selman" />
+      <simplelayout axis="y" spacing="0" />
+      <replicator id="esr" dataset="testdata" xpath="'/fibs/fib'">
+        <text width="100">
+          <attribute name="selected" value="false"/>
+          <attribute name="bgcolor"
+                     value="${selected ? 0xCCDDEE : null }"/>
+          <attribute name="index" value="$path{'position()'}" />
+          <attribute name="value" value="$path{'@value'}" />
+          <method name="applyData">
+            this.format('%s: %d', this.index, this.value);
+          </method>
+          <handler name="onclick">
+            Debug.write(parent.selman.isSelected( this ), parent.selman.toggle);
+            parent.selman.select( this );
+          </handler>
+        </text>
+      </replicator>
+    </list>
+  </window>
 
+  <window width="20%" height="20%" x="30%" y="50%" name="implicitsimplerepltest"
+          resizable="true" title="implicit replicator">
+    <list width="${immediateparent.width}" height="${immediateparent.height}">
+      <selectionmanager name="selman" />
+      <simplelayout axis="y" spacing="0" />
+      <text width="100" id="isr" datapath="testdata:/fibs/fib">
+        <attribute name="selected" value="false" setter="setSelected" />
+        <attribute name="bgcolor"
+                   value="${('selected' in this &amp;&amp; this.selected) ? 0xCCDDEE : null }"/>
+        <attribute name="index" value="$path{'position()'}" />
+        <attribute name="value" value="$path{'@value'}" />
+        <handler name="ondata">
+          this.format('%s: %d', this.index, this.value);
+        </handler>
+        <handler name="onclick">
+          Debug.write(parent.selman.isSelected( this ), parent.selman.toggle);
+          parent.selman.select( this );
+        </handler>
+        <method name="setSelected" args="value">
+          this.selected = value;
+          this.onselected.sendEvent(value);
+        </method>
+      </text>
+    </list>
+  </window>
+
 </canvas>
+<!-- Copyright 2007 Laszlo Systems, Inc.  All Rights Reserved. -->

Modified: openlaszlo/branches/legals/test/lfc/lztrack/depthbug.lzx
===================================================================
--- openlaszlo/branches/legals/test/lfc/lztrack/depthbug.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/lfc/lztrack/depthbug.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -1,17 +1,17 @@
-<!-- Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved. -->
+<!-- Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved. -->
 <canvas debug="true">
     <!-- Can't put bgcolor on the view b/c LzTrack doesn't work if there's
          no __LZmovieClipRef ;) LPP-1582 -->
     <view name="a">
         <handler name="onmousetrackover">
-            Debug.write( this );
+            Debug.write( 'red' );
         </handler>
         <view  bgcolor="red" width="100" height="100"/>
 
     </view>
     <view name="b" x="50" y="50">
         <handler name="onmousetrackover">
-            Debug.write( this );
+            Debug.write( 'blue' );
         </handler>
         <view  bgcolor="blue" width="100" height="100"/>
     </view>

Modified: openlaszlo/branches/legals/test/lfc/lztrack/trackgroups.lzx
===================================================================
--- openlaszlo/branches/legals/test/lfc/lztrack/trackgroups.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/lfc/lztrack/trackgroups.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -8,19 +8,19 @@
         <attribute name="trackgroup" type="string" value="${parent.trackgroup}"/>
         <attribute name="mycolor" value="0x000099"/>
         <method event="oninit">
-             debug.write("LzTrack.register(" + this, this.trackgroup + ")");
+             Debug.write("LzTrack.register(" + this, this.trackgroup + ")");
              LzTrack.register(this, this.trackgroup);
         </method>
         <method event="onmousetrackover">
             setAttribute('bgcolor', 0x00dd00);
-            debug.write("onmousetrackover", this);
+            Debug.write("onmousetrackover", this);
         </method>
         <method event="onmousetrackout">
             setAttribute('bgcolor', this.mycolor);
-            debug.write("onmousetrackout", this);
+            Debug.write("onmousetrackout", this);
         </method>
         <method event="onmousetrackup">
-            debug.write("onmousetrackup", this);
+            Debug.write("onmousetrackup", this);
         </method>
     </class>
 
@@ -40,10 +40,10 @@
         <checkbox text="${'group: ' + parent.trackgroup}">
             <method event="onvalue" args="v">
                 if (v) {
-                    debug.write('activate: '+parent.trackgroup);
+                    Debug.write('activate: '+parent.trackgroup);
                     LzTrack.activate(parent.trackgroup);
                 } else {
-                    debug.write('deactivate: '+parent.trackgroup);
+                    Debug.write('deactivate: '+parent.trackgroup);
                     LzTrack.deactivate(parent.trackgroup);
                 }
             </method>
@@ -61,11 +61,11 @@
         <checkbox text="${'groups: twoA and twoB'}">
             <method event="onvalue" args="v">
                 if (v) {
-                    debug.write('activate: twoA and twoB');
+                    Debug.write('activate: twoA and twoB');
                     LzTrack.activate("twoA");
                     LzTrack.activate("twoB");
                 } else {
-                    debug.write('deactivate: twoA and twoB');
+                    Debug.write('deactivate: twoA and twoB');
                     LzTrack.deactivate("twoA");
                     LzTrack.deactivate("twoB");
                 }
@@ -74,19 +74,19 @@
         <view bgcolor="0xddddff" name="container" width="84">
             <attribute name="trackgroup" value="twoA" type="string"/>
             <method event="oninit">
-                 debug.write("LzTrack.register(" + this, this.trackgroup + ")");
+                 Debug.write("LzTrack.register(" + this, this.trackgroup + ")");
                  LzTrack.register(this, this.trackgroup);
             </method>
             <method event="onmousetrackover">
                 setAttribute('bgcolor', 0xdddd00);
-                debug.write("onmousetrackover", this);
+                Debug.write("onmousetrackover", this);
             </method>
             <method event="onmousetrackout">
                 setAttribute('bgcolor', 0xddddff);
-                debug.write("onmousetrackout", this);
+                Debug.write("onmousetrackout", this);
             </method>
             <method event="onmousetrackup">
-                debug.write("onmousetrackup", this);
+                Debug.write("onmousetrackup", this);
             </method>
 
 
@@ -106,7 +106,7 @@
    </view>
 
 <!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
-* Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
 * Use is subject to license terms.                                            *
 * X_LZ_COPYRIGHT_END ****************************************************** -->
 </canvas>

Modified: openlaszlo/branches/legals/test/style/simple/simple.lzx
===================================================================
--- openlaszlo/branches/legals/test/style/simple/simple.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/style/simple/simple.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -39,10 +39,11 @@
    <class name="SimpleTestCase" extends="TestCase">
         <method name="testBasics">
             assertEquals(50, gSoy.width);  // KNOWN TO FAIL by bshine as of 08.01.2007
+            Debug.warn('expected 50 got 279 is a known failure in simple.lzx');
             assertEquals(75, gAngelica.width);
         </method>
         <method name="testColors">
             assertEquals(0x6ab5e6, gTravis.innercolor);
         </method>
     </class>
-</library>
\ No newline at end of file
+</library>

Modified: openlaszlo/branches/legals/test/style/simple/undefineds.lzx
===================================================================
--- openlaszlo/branches/legals/test/style/simple/undefineds.lzx	2007-09-13 23:15:46 UTC (rev 6472)
+++ openlaszlo/branches/legals/test/style/simple/undefineds.lzx	2007-09-13 23:38:53 UTC (rev 6473)
@@ -21,15 +21,15 @@
         <simplelayout />
     </class>
 
-    <box id="t" />
+    <box id="fazzleblarb" />
 
     <!-- See LPP-4182 undefined CSS values used to be null. now they're undefined. -->
     <class name="UndefinedsTestCase" extends="TestCase">
             <method name="testUndefinedIsUndefined">
-                assertUndefined(t.getAttribute("foobles"));
+                assertUndefined(fazzleblarb.getAttribute("foobles"));
             </method>
             <method name="testUnspecifiedIsUndefined">
-                assertUndefined(t.getAttribute("undef"));
+                assertUndefined(fazzleblarb.getAttribute("undef"));
             </method>
     </class>
     
@@ -37,4 +37,4 @@
         Debug.info("there should be a warning about a reference to an undefined property 'undef'");
     </script>
 </library>
-<!-- Copyright 2007 Laszlo Systems, Inc.  All Rights Reserved. -->
\ No newline at end of file
+<!-- Copyright 2007 Laszlo Systems, Inc.  All Rights Reserved. -->



More information about the Laszlo-checkins mailing list