[Laszlo-checkins] r6483 - in openlaszlo/branches/legals: . WEB-INF/lps/lfc/compiler WEB-INF/lps/lfc/controllers WEB-INF/lps/lfc/core WEB-INF/lps/lfc/data WEB-INF/lps/lfc/debugger WEB-INF/lps/lfc/debugger/platform/dhtml WEB-INF/lps/lfc/debugger/platform/swf WEB-INF/lps/lfc/helpers WEB-INF/lps/lfc/kernel WEB-INF/lps/lfc/kernel/dhtml WEB-INF/lps/lfc/kernel/swf WEB-INF/lps/lfc/services WEB-INF/lps/lfc/services/platform/dhtml WEB-INF/lps/lfc/services/platform/swf WEB-INF/lps/lfc/views WEB-INF/lps/misc WEB-INF/lps/schema WEB-INF/lps/server/src/org/openlaszlo/cache WEB-INF/lps/server/src/org/openlaszlo/compiler WEB-INF/lps/server/src/org/openlaszlo/sc WEB-INF/lps/server/src/org/openlaszlo/utils WEB-INF/lps/templates demos/weather docs docs/component-browser docs/includes docs/src docs/src/contributors docs/src/reference docs/src/reference/navbuilder docs/src/xsl laszlo-explorer laszlo-explorer/coverpages laszlo-explorer/coverpages/welcome lps/admin lps/components/base lps/components/incubator/rich-text lps/components/lz lps/components/utils lps/components/utils/replicator lps/includes/source test/components/incubator test/data test/explicit-replicators test/history test/lfc/data test/lztest test/lzunit

ben@openlaszlo.org ben at openlaszlo.org
Fri Sep 14 14:46:24 PDT 2007


Author: ben
Date: 2007-09-14 14:45:55 -0700 (Fri, 14 Sep 2007)
New Revision: 6483

Added:
   openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/LzDataSelectionManager.lzs
   openlaszlo/branches/legals/docs/component-browser/
   openlaszlo/branches/legals/docs/component-browser/common.lzx
   openlaszlo/branches/legals/docs/component-browser/components.lzx
   openlaszlo/branches/legals/docs/component-browser/formview.lzx
   openlaszlo/branches/legals/docs/component-browser/hierarchyview.lzx
   openlaszlo/branches/legals/docs/component-browser/listview.lzx
   openlaszlo/branches/legals/docs/component-browser/menuview.lzx
   openlaszlo/branches/legals/docs/component-browser/scrollbarview.lzx
   openlaszlo/branches/legals/docs/component-browser/tabsliderview.lzx
   openlaszlo/branches/legals/docs/component-browser/tabsview.lzx
   openlaszlo/branches/legals/docs/component-browser/treeview.lzx
   openlaszlo/branches/legals/docs/component-browser/windowview.lzx
   openlaszlo/branches/legals/docs/src/reference/navbuilder/
   openlaszlo/branches/legals/docs/src/reference/navbuilder/index-frames.html
   openlaszlo/branches/legals/docs/src/reference/navbuilder/index-generated.html
   openlaszlo/branches/legals/docs/src/reference/navbuilder/navbuilder.rb
   openlaszlo/branches/legals/lps/admin/dev-console.html
   openlaszlo/branches/legals/lps/includes/source/lzhistory.js
   openlaszlo/branches/legals/test/explicit-replicators/selection.lzx
Removed:
   openlaszlo/branches/legals/docs/component-browser/common.lzx
   openlaszlo/branches/legals/docs/component-browser/components.lzx
   openlaszlo/branches/legals/docs/component-browser/formview.lzx
   openlaszlo/branches/legals/docs/component-browser/hierarchyview.lzx
   openlaszlo/branches/legals/docs/component-browser/listview.lzx
   openlaszlo/branches/legals/docs/component-browser/menuview.lzx
   openlaszlo/branches/legals/docs/component-browser/scrollbarview.lzx
   openlaszlo/branches/legals/docs/component-browser/tabsliderview.lzx
   openlaszlo/branches/legals/docs/component-browser/tabsview.lzx
   openlaszlo/branches/legals/docs/component-browser/treeview.lzx
   openlaszlo/branches/legals/docs/component-browser/windowview.lzx
   openlaszlo/branches/legals/docs/src/reference/navbuilder/index-frames.html
   openlaszlo/branches/legals/docs/src/reference/navbuilder/index-generated.html
   openlaszlo/branches/legals/docs/src/reference/navbuilder/navbuilder.rb
   openlaszlo/branches/legals/lps/components/utils/replicator/replicatorselectionmanager.lzx
   openlaszlo/branches/legals/test/components/incubator/richtexteditarea-driver.lzx
   openlaszlo/branches/legals/test/history/simple-states.lzx
Modified:
   openlaszlo/branches/legals/
   openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/Class.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/LzRuntime.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/controllers/LzAnimatorGroup.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/core/UserClass.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapath.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapointer.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataset.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzBacktrace.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzMessage.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/LzDebug.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/kernel.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/LzDebug.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/kernel.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/Library.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/LzSelectionManager.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/LzUtils.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenu.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoadQueue.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoader.lzs
   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/LzTrack.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/dhtml/LzHistory.js
   openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/swf/LzHistory.as
   openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs
   openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs
   openlaszlo/branches/legals/WEB-INF/lps/misc/lzx-autoincludes.properties
   openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cache/Cache.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java
   openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewCompiler.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/utils/FileUtils.java
   openlaszlo/branches/legals/WEB-INF/lps/templates/app-console.xslt
   openlaszlo/branches/legals/WEB-INF/lps/templates/app-console_jp.xslt
   openlaszlo/branches/legals/build.xml
   openlaszlo/branches/legals/demos/weather/weather.lzx
   openlaszlo/branches/legals/docs/includes/lzx-pretty-print.css
   openlaszlo/branches/legals/docs/release-notes.html
   openlaszlo/branches/legals/docs/src/build.xml
   openlaszlo/branches/legals/docs/src/contributors/index.dbk
   openlaszlo/branches/legals/docs/src/reference/langref.xml
   openlaszlo/branches/legals/docs/src/xsl/common-html.xsl
   openlaszlo/branches/legals/index.jsp
   openlaszlo/branches/legals/laszlo-explorer/coverpages/server_admin_cover.html
   openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html
   openlaszlo/branches/legals/laszlo-explorer/nav.xml
   openlaszlo/branches/legals/laszlo-explorer/nav_dhtml.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/basefocusview.lzx
   openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontface.lzx
   openlaszlo/branches/legals/lps/components/lz/datepicker.lzx
   openlaszlo/branches/legals/lps/components/utils/library.lzx
   openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx
   openlaszlo/branches/legals/lps/components/utils/replicator/library.lzx
   openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx
   openlaszlo/branches/legals/lps/includes/source/embed-library.lzs
   openlaszlo/branches/legals/lps/includes/source/embednew.js
   openlaszlo/branches/legals/lps/includes/source/iframemanager.js
   openlaszlo/branches/legals/quick-index.xslt
   openlaszlo/branches/legals/test/data/selectionmanager.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/data/datanode.lzx
   openlaszlo/branches/legals/test/lztest/lztest-stableborderlayout.lzx
   openlaszlo/branches/legals/test/lztest/lztest-text.lzx
   openlaszlo/branches/legals/test/lzunit/testpaths.txt
Log:
Merged revisions 6200-6205,6208-6213,6216-6265,6268-6368,6370-6431,6433-6450 via svnmerge from 
http://svn.openlaszlo.org/openlaszlo/branches/wafflecone

.......
  r6200 | ben | 2007-08-23 14:51:23 -0700 (Thu, 23 Aug 2007) | 16 lines
  
  Change 20070823-ben-o by ben at slim.local on 2007-08-23 14:48:59 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Deleting obsolete test
  
  Bugs Fixed: LPP-4558 est/wafflecone/test/components/incubator/richtexteditarea-driver.lzx needs to be deleted, no longer valid
  
  Technical Reviewer: (pending)
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Details: 
  The correct test for richtexteditarea is  lps/components/incubator/rich-text/test/richtexteditarea-driver.lzx 
.......
  r6201 | ben | 2007-08-23 14:57:12 -0700 (Thu, 23 Aug 2007) | 24 lines
  
  Change 20070823-ben-9 by ben at slim.local on 2007-08-23 14:55:44 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Corrected spelling of idiosyncrasies in welcome page in laszlo explorer
  
  New Features:
  
  Bugs Fixed: none
  
  Technical Reviewer: (pending)
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  
  Tests:
.......
  r6203 | ben | 2007-08-23 15:53:49 -0700 (Thu, 23 Aug 2007) | 30 lines
  
  Change 20070823-ben-m by ben at slim.local on 2007-08-23 15:23:25 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone-doctools
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fixing links to contributor's guide and reference in docs
  
  New Features:
  
  Bugs Fixed: LPP-4565 Selecting Contributor's Guide in navbar and quick index entry opens Comprehensive Reference
  LPP-4564 Links to Contributor's Guide have (alpha), the guide has (beta) in the title
  LPP-4563 LZX Reference gets 404 error from the quick index page
  
  Technical Reviewer: max (pending)
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  Fixed several bugs in documentation, mostly with links to the contributor's guide
  (which is different from the contributor's reference) and to the lps3 docs on
  www.openlaszlo.org. Also changed the title of the contributor's guide to be (alpha)
  not (beta). 
  
  Release Notes:
  
  Details:
      
  
  Tests:
.......
  r6208 | ben | 2007-08-23 21:47:57 -0700 (Thu, 23 Aug 2007) | 27 lines
  
  Change 20070823-ben-a by ben at slim.local on 2007-08-23 21:44:47 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Begin heinous draft of 4.0.5 release notes. 
  
  New Features:
  
  Bugs Fixed: PARTIAL LPP-4577 Write wafflecone release notes
  
  Technical Reviewer: none 
  QA Reviewer: none
  Doc Reviewer: (pending)
  
  Documentation:
  These are definitely NOT complete, done, or ready to be shipped. 
  They are just an ugly starting place. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  docs/releasenotes.html passes w3c validator
.......
  r6223 | ben | 2007-08-24 14:50:15 -0700 (Fri, 24 Aug 2007) | 38 lines
  
  Change 20070824-ben-S by ben at slim.local on 2007-08-24 14:41:18 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Add "components browser" back in
  
  New Features:
  
  Bugs Fixed: LPP-4423 Class hierarchy document is not found
  
  Technical Reviewer: jcrowley 
  QA Reviewer: mkratt (pending)
  Doc Reviewer: jsundman (in person)
  
  Documentation:
  The components browser had somehow gone missing from legals. I got it
  out of trunk, verified that it still basically works, and put it in
  wafflecone, with a new path to clarify what it is. (docs/component-browser
  instead of docs/components) 
  
  Also modified the index.jsp to point to this components browser, instead
  of an old stale link to the components browser that used to exist but
  doesn't anymore. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  Go to laszlo explorer. Click on Components. Click on Class Hierarchy. 
  In the right-hand pane, a lovely lzx app should open up. 
  Also go to http://localhost:8080/wafflecone/docs/component-browser/components.lzx
  And go to the quick-index.html, click on "class hierarchy", this app should appear. 
  And go to http://localhost:8080/wafflecone/  (that's the index.jsp) and click on
  class hierarchy (flash) and (dhtml). Each of those should also open this app. 
.......
  r6246 | hqm | 2007-08-26 10:50:51 -0700 (Sun, 26 Aug 2007) | 27 lines
  
  Change 20070826-hqm-6 by hqm at IBM-2E06404CB67 on 2007-08-26 13:48:28 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3/WEB-INF/lps/lfc
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/WEB-INF/lps/lfc
  
  Summary: fix for duplicate ondata events
  
  New Features:
  
  Bugs Fixed: LPP-4584
  Bug: LPP-4584
  
  Technical Reviewer: (pending)
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  
  a new response handler delegate was created for each request. Fix to create just once
      
  
  Tests:
.......
  r6249 | jsundman | 2007-08-27 07:07:07 -0700 (Mon, 27 Aug 2007) | 1 line
  
  Bug:LPP-4537.  Added wording per A. Muntz
.......
  r6250 | max | 2007-08-27 11:03:32 -0700 (Mon, 27 Aug 2007) | 26 lines
  
  Change 20070825-maxcarlson-z by maxcarlson at plastik on 2007-08-25 14:45:32 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Improve caching and file IO performance of server (thanks to Jason Venner!)
  
  New Features:
  
  Bugs Fixed: LPP-4583 - Improve compiler and caching performance
  
  Technical Reviewer: ptw
  QA Reviewer: promanik
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: FileUtils.java - Precompile regexp.  Avoid re-reading the same stream twice for makeXMLReaderForFile() calls.
  
  Cache.java - Use a BufferedInputStream to read items into the cache.
      
  
  Tests: Compilation of large applications improved by ~10%!
.......
  r6256 | max | 2007-08-27 13:38:05 -0700 (Mon, 27 Aug 2007) | 24 lines
  
  Change 20070827-maxcarlson-j by maxcarlson at plastik on 2007-08-27 11:06:18 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Avoid using an iframe for Flash apps in the dev console
  
  New Features:
  
  Bugs Fixed:  LPP-4562 - LoadJS works differently in the dev console
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Embed flash applications directly (using the code from html-response.xslt) instead of using an iframe.
      
  
  Tests: All applications run as before.  See LPP-4562 for a testcase.
.......
  r6257 | max | 2007-08-27 14:08:00 -0700 (Mon, 27 Aug 2007) | 27 lines
  
  Change 20070827-maxcarlson-r by maxcarlson at plastik on 2007-08-27 13:11:25 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix text size measurement for font styles with constraints
  
  New Features:
  
  Bugs Fixed: LPP-4571 - Text component not sized correctly when fontsize configured via a constraint
  
  Technical Reviewer: promanik
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzTextSprite.as - calculate the correct line height for single-line text in getTexfieldHeight()
  
  LzTextSprite.js - Recalculate line heights when styles are changed in getTexfieldHeight()
  
  LzText.lzs - Add argument to setText() to force it to recompute the height even if this.text is the same.  setFontName() and setFontSize() call setText() with force == true to ensure resizing happens.
  
  Tests: Testcase in LPP-4571 passes in swf and dhtml, http://localhost:8080/wafflecone/test/lztest/lztest-textheight.lzx?debug=true runs as before in swf and dhtml.
.......
  r6259 | hqm | 2007-08-27 17:35:33 -0700 (Mon, 27 Aug 2007) | 30 lines
  
  Change 20070827-hqm-4 by hqm at IBM-2E06404CB67 on 2007-08-27 20:32:51 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: fix for media loader bug
  
  New Features:
  
  Bugs Fixed: LPP-1952
  Bug: LPP-1952
  
  Technical Reviewer: max (pending)
  QA Reviewer: jcrowley (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  
  see bug report
  
  
  Tests:
  
  test case in bug report
.......
  r6261 | max | 2007-08-27 19:17:21 -0700 (Mon, 27 Aug 2007) | 24 lines
  
  Change 20070827-maxcarlson-Q by maxcarlson at plastik on 2007-08-27 18:27:38 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Ensure only one mousetrackup event is sent
  
  New Features:
  
  Bugs Fixed: LPP-4585 - Two onmousetrackup events fired when only 1 should be fired.
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Ensure onmousetrackup events are only sent once by __LZmouseup(), which is called by the view, and by the global mouse manager in this case.
      
  
  Tests: See LPP-4585.
.......
  r6268 | hqm | 2007-08-28 11:30:28 -0700 (Tue, 28 Aug 2007) | 34 lines
  
  Change 20070828-hqm-0 by hqm at IBM-2E06404CB67 on 2007-08-28 14:18:33 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary:  LPP-4584 duplicate ondata events
  LPP-4532 fixes for querystring merging
  
  New Features: 
  
  Bugs Fixed: LPP-4584 LPP-4532
  Bugs: LPP-4584 LPP-4532
  
  Technical Reviewer: hminsky
  QA Reviewer: pbr
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  fix to only create one delegate for handling ondata events
  
  fix to querystring merging to account for '?' char
  
  
  
  Tests:
  
  test/lfc/data/alldata.lzx
  test/smoke/smokecheck.lzx
.......
  r6270 | bargull | 2007-08-28 14:36:15 -0700 (Tue, 28 Aug 2007) | 28 lines
  
  Change 20070825-bargull-6 by bargull at dell--p4--2-53 on 2007-08-25 16:48:55
      in /home/Admin/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: 
  Fixed tracking in basefocusview
  
  New Features:
  
  Bugs Fixed:
  LPP-4553 "basefocusview warnings when canvas size changes"
  
  Technical Reviewer: max
  QA Reviewer: ben
  Doc Reviewer: (pending)
  
  Documentation:
  The whole width/height tracking was broken for basefocusview, this is now fixed.
  
  Release Notes:
  
  Details:
      
  
  Tests:
  Two testcases can be found at the bugreport (LPP-4553)
.......
  r6277 | jcrowley | 2007-08-29 10:57:53 -0700 (Wed, 29 Aug 2007) | 29 lines
  
  Change 20070829-jcrowley-P by jcrowley at doctormanhattan.mshome.net on 2007-08-29 00:26:11 EDT
      in /Users/jcrowley/src/svn/openlaszlo/waffle
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: setVisibility was not an approved API change
  
  New Features:
  
  Bugs Fixed: LPP-4543
  
  Technical Reviewer: ptw
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Commented out warning, changed visibility stuff in
  	view to @access private.  Fixed ordering of setVisibility
  	to match setVisible.
  
  Tests: Build docs, note absence of setVisibility and related
  	elements from the refguide for View.  Run the Calendar
  	demo with debug=true, click the "i" to open up the info
  	panel, note an absence of warnings about "setVisibility"
  	in the Debugger. 
.......
  r6282 | ben | 2007-08-29 14:09:05 -0700 (Wed, 29 Aug 2007) | 29 lines
  
  Change 20070829-ben-5 by ben at slim.local on 2007-08-29 13:58:46 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Propagate changes to laszlo-explorer to dhtml nav
  
  New Features:
  
  Bugs Fixed: LPP-4569 Update nav_dhtml.xml whenever nav.xml for laszlo-explorer changes
  
  Technical Reviewer: none 
  QA Reviewer: mkratt (pending)
  Doc Reviewer: none
  
  Documentation:
  
  
  Release Notes:
  
  Details:
  Various broken links in laszlo explorer had been fixed in wafflecone with
  changes to nav.xml. This change propagates those link fixes to nav_dhtml.xml.
      
  
  Tests:
  http://localhost:8080/wafflecone/laszlo-explorer/explore-nav.lzx?debug=true&lzbacktrace=false&lzr=dhtml
  click on all the documentation links
.......
  r6284 | ptw | 2007-08-29 16:47:46 -0700 (Wed, 29 Aug 2007) | 73 lines
  
  Change 20070828-ptw-t by ptw at dueling-banjos.local on 2007-08-28 16:56:02 EDT
      in /Users/ptw/OpenLaszlo/wafflecone-2
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Implement Debug.messageLevel, downgrade deprecated warnings
  to info, heuristicate file/line info in Debug messages
  
  Bugs Fixed:
  LPP-4597 'turn debugger warnings for non-fatal issues into INFO'
  LPP-4549 'runtime warnings should include file references, line #s' (partial)
  LPP-4478 'Richedittext: WARNING: __LZgetNodes: p is null in LzDatapointer' (partial)
  LPP-4450 'improve LFC warnings for xpath query on empty datapath' (partial)
  LPP-4551 'debugger warnings emitted from a private LFC function' (partial)
  LPP-4592 'basedatacombobox-based components with selectfirst="false" emits Debugger warnings' (partial)
  LPP-4464 'setVisible(null) warning, but it is never called' (partial)
  
  Technical Reviewer: max (Message-ID: <46D5EB42.4000508 at openlaszlo.org>)
  QA Reviewer: enw (pending)
  
  Documentation:
      In debug mode the compiler annotates every LzNode object with the
      file/line where the object was created.  If a node object is one
      of the arguments to a Debug message, the debugger will use the
      node object's file/line information when printing the message to
      the console.  [This is obviously not as accurate as we would like,
      but it at least gives the programmer a hint as to where the
      problem may lie.]
  
      Debug.messageLevel is one of (from lowest to highest) 'ALL',
      'DEBUG', 'INFO', 'WARNING', 'ERROR'; defaults to 'ALL'.  Setting
      it to a particular level will suppress all messages of a lower
      level.
  
      All deprecation messages have been changed from 'WARNING' to
      'INFO'.  By setting Debug.messageLevel to 'WARNING', deprecation
      messages will be suppressed.
  
      All API warnings that are new in 4.x have been changed from
      'WARNING' to 'INFO'.  By setting Debug.messageLevel to 'WARNING',
      deprecation messages will be suppressed.
  
  Details:
      LzSprite, LzNode, LaszloView, LzAnimatorGroup, LzDatapointer,
      LzDataset, LzDatapath, Class: Change all deprecated warnings to
      use Debug.deprecated, or in custom cases Debug.info.
  
      UserClass: Refine the warning that explains why <class name="xxx">
      will not be defined as a global if there is already a global value
      of the same name in the underlying runtime.  Change the warning to
      an info message.
  
      LzMessage: Update frames to skip to match the current
      implementation of backtrace.  Heuristicate file/lineno from
      message arguments.  Add Debug.deprecated that handles common
      deprecation messages.
  
      LzDebug, kernel.as, kernel.js:  Implement Debug.messageLevel.
  
      LzBacktrace: Add a pretty type name.
  
      NodeModel: Annotate nodes with their creation file and line.
  
  Tests:
      swf and dhtml smokecheck.
  
      In smokecheck, the last two warnings now say:
  
      WARNING: regression.lzl:730: serialize: p is null in LzDatapointer name: bad
      WARNING: regression.lzl:744: setNodeAttribute: p is null in LzDatapointer name: dp
  
      Which indeed are the locations of the erroneous datapointers.
.......
  r6289 | hqm | 2007-08-30 06:30:50 -0700 (Thu, 30 Aug 2007) | 36 lines
  
  Change 20070829-hqm-0 by hqm at IBM-2E06404CB67 on 2007-08-29 19:22:14 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary:  fix 'request' attribute in dataset
  
  New Features:
  
  Bugs Fixed: LPP-4610
  Bug: LPP-4610
  
  Technical Reviewer: pkang
  QA Reviewer: pbr
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  the 'request' attribute was being aliased to the doRequest() method, to support
  the deprecated 'request()' method name. 
  
  Change this to be a regular attribute
  
  
  Tests:
  
  test/lfc/data/alldata.lzx  (swf, dhtml)
  
  test/smoke
.......
  r6291 | max | 2007-08-30 14:00:06 -0700 (Thu, 30 Aug 2007) | 34 lines
  
  Change 20070830-maxcarlson-Y by maxcarlson at plastik on 2007-08-30 13:30:47 PDT
      in /Users/maxcarlson/openlaszlo/waffleconeclean
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Bugs Fixed:
  LPP-4513 'Compiler Improvements to address performance'
  
  Technical Reviewer: max
  QA Reviewer: 
  Doc Reviewer: (pending)
  
  Details:
      This change was already reviewed and approved by Tucker.
  
      CodeGenerator.java, JavascriptGenerator.java - Inline calls to
      setAttribute() when called as the script compiler, unless #pragma
      "passThrough=true".  Only inline setAttribute when called as lzsc 
      (i.e., when compiling scripts such as LFC and lps/includes)
  
      LzContextMenu.js, LzTextSprite.js, LzInputTextSprite.js,
      embednew.js, iframemanager.js - Call Lz.__setAttr() instead of
      div.setAttribute(...).  Add __setAttr() method to be used so
      div.setAttribute() isn't inlined.
  
  Tests:
      All demos run as before (but faster in swf and dhtml).  smokecheck
      also runs and passes now.
      http://localhost:8080/wafflecone/my-apps/copy-of-hello.lzx is 62k
      compressed in dhtml (was 60k), 92k compressed in swf7 (was 89k) and
      93k compressed in swf8 (was 90k).  This change will benefit animators
      and alignment constraints now.  We can always manually inline/optimize to
      bring the size down later.  I recommend taking this for now. 
.......
  r6292 | max | 2007-08-30 14:50:19 -0700 (Thu, 30 Aug 2007) | 33 lines
  
  Change 20070828-maxcarlson-h by maxcarlson at plastik on 2007-08-28 12:11:18 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix text measurement in swf
  
  New Features:
  
  Bugs Fixed: LPP-4571 - Text component not sized correctly when fontsize configured via a constraint
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzTextSprite.as - Clean out unneeded defaultattrs, DeclareEvent calls and other cruft.  Set textclip.autoSize back to this.resize in getTextfieldHeight().
  
  LzUtils.lzs - Simplify dectohex(), make padding argument optional.
  
  LzText.lzs - Add onhscroll and onmaxhscroll events which may be sent by swf text sprites.
      
  
  Tests: ant lztest, http://localhost:8080/wafflecone/test/lztest/lztest-textheight.lzx?debug=true and the following test all pass in swf and dhtml:
  
  <canvas> 
      <text>Hello Laszlo! This is a really long string that should have the correct width in flash.</text>
  </canvas>
.......
  r6295 | ben | 2007-08-30 15:35:20 -0700 (Thu, 30 Aug 2007) | 45 lines
  
  Change 20070829-ben-D by ben at slim.local on 2007-08-29 18:33:48 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: A simple HTML left-nav for OL4 reference
  
  New Features:
  
  Bugs Fixed: LPP-4534 Make a left-nav index navigator for OL 4 docs
  
  Technical Reviewer: max
  QA Reviewer: frisco (pending)
  Doc Reviewer: frisco
  
  Documentation:
  The script navbuilder.rb (built with ruby 1.8.6) generates 
  index-generated.html, which is itself source controlled. To
  update the contents of the generated index, see
  docs/src/reference/navbuilder/navbuilder.rb 
  In a nutshell, it's 
  $ ruby navbuilder.rb > index-generated.html
  then check in modified index-generated.html
  
  The ant scripts for building the reference copy two html
  files into the reference output directory; once there,
  access at http://localhost:8080/docs/reference/index-frames.html
  
  Release Notes:
  
  Details:
  navbuilder.rb is a one-off; it probably shouldn't be
  used much in the future for index generation. We should
  probably make the index the "right" way with docbook. 
  On the other hand, this script executes in approximately
  no time at all, and the doc build takes around an hour. 
  
  This index is not linked in from anywhere yet. I'm not
  sure it should be; we'll wait to see what the team 
  wants to do with it. 
      
  
  Tests:
  http://localhost:8080/wafflecone/docs/reference/index-frames.html
.......
  r6299 | ptw | 2007-08-31 07:23:13 -0700 (Fri, 31 Aug 2007) | 19 lines
  
  Change 20070830-ptw-B by ptw at dueling-banjos.local on 2007-08-30 17:11:24 EDT
      in /Users/ptw/OpenLaszlo/wafflecone-2
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Make LzInheritedHash work again
  
  Bugs Fixed:
  LPP-4540 'Laszlo Explorer hierarchical menu does not display in dhtml/firefox/opera/safari'
  
  Technical Reviewer: hqm (Message-ID: <8c61fad60708310706p6838294boa435d725ad86a44c at mail.gmail.com>)
  QA Reviewer: max (pending)
  
  Details:
      Don't try to set instance constructor, which seems to break Javascript
  
  Tests:
      Max's test case from Jira works correctly in non-debug DHTML
.......
  r6313 | ben | 2007-08-31 15:58:47 -0700 (Fri, 31 Aug 2007) | 30 lines
  
  Change 20070831-ben-S by ben at slim.local on 2007-08-31 15:54:42 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone-doctools/docs
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/docs
  
  Summary: Add CSS to make don't-read-this snippet in ref guide obnoxiously pink
  
  New Features:
  
  Bugs Fixed: LPP-4539 (partial)  Put in a header in each page of reference guide saying "this is an alpha; please look elsewhere(link) for better docs
  
  Technical Reviewer: frisco
  QA Reviewer: frisco (pending)
  Doc Reviewer: frisco (pending)
  
  Documentation:
  This change adds two CSS styles to the lzx stylesheet used in the
  reference guide, to make the "don't-read-this" snippet be pink,
  in order to draw attention to itself. This will not change the
  way anything looks until something with class="warningheader" is
  inserted into the ref guide, which is happening separately, elsewhere. 
  
  Release Notes:
  This style can be removed after wafflecone.
  
  Details:
      
  
  Tests:
.......
  r6315 | pbr | 2007-08-31 16:31:35 -0700 (Fri, 31 Aug 2007) | 36 lines
  
  Change 20070831-Philip-8 by Philip at Philip-DC on 2007-08-31 14:08:33 EST
      in /cygdrive/f/laszlo/svn/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Remove compiler warnings for attribute 'validate'
  
  New Features:
  
  Bugs Fixed: LPP-3988
  
  Technical Reviewer: ptw
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  Warnings have been disabled when an attribute 'validate' is redefined. The
  current mechanism used by binary libraries can cause this attribute to be
  defined multiple times. An enhancement task, LPP-4620, has been opened to
  implement a better solution.
  
  
  Tests:
  Run lpp3988d.zip test in jira. Running it before making this change will
  show a warning when the application is run. No warning after applying this
  changeset.
  
  Files:
  M      WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java
  
  Changeset:
  http://svn.openlaszlo.org/openlaszlo/patches/20070831-Philip-8.tar
.......
  r6321 | pbr | 2007-09-01 10:21:05 -0700 (Sat, 01 Sep 2007) | 40 lines
  
  Change 20070901-Philip-6 by Philip at Philip-DC on 2007-09-01 10:29:16 EDT
     in /cygdrive/f/laszlo/svn/src/svn/openlaszlo/branches/wafflecone
     for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix inputtext size UPDATE
  
  New Features:
  
  Bugs Fixed: LPP-4626
  
  Technical Reviewer: max
  QA Reviewer: hqm
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  LzTextSprite.getTextfieldHeight reuses the textclip to determine the height. How
  ever, it was not resetting the width when it was finished. This change caches/re
  stores a few parameters so that the textclip is restored to its original value.
  
  Some of these changes may not strictly be necessary but it is a safe change.s
  
  Tests:
  
  This inputtext should be clickable anywhere along the width:
   <canvas>
     <inputtext bgcolor="yellow"/>
   </canvas>
  
  Also main.lzx runs as expected
  
  
  Files:
  M      WEB-INF\lps\lfc\kernel\swf\LzTextSprite.as
  
  Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20070901-Philip-6.tar
.......
  r6326 | hqm | 2007-09-01 18:59:49 -0700 (Sat, 01 Sep 2007) | 28 lines
  
  Summary:  unlink request attribute and autorequest attribute on dataset
  
  New Features:
  
  Bugs Fixed: LPP-4630
  Bugs: LPP-4630
  
  Technical Reviewer: pkang (pending)
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  
  There doesn't seem to be any good reason for setAutorequest to call
  setRequest. The user
  can set them indepenndently in any combination  they want using the two setters.
  
  
  Tests:
  
  test/lfc/data/alldata.lzx
  
   
.......
  r6327 | hqm | 2007-09-02 05:29:31 -0700 (Sun, 02 Sep 2007) | 29 lines
  
  Change 20070901-hqm-0 by hqm at IBM-2E06404CB67 on 2007-09-01 21:21:21 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3/test/lfc/data
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/test/lfc/data
  
  Summary:  fix test to match new format from LzDataElement.serialize()
  
  New Features:
  
  Bugs Fixed: LPP-4631
  
  
  
  
  Technical Reviewer: pbr (pending)
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  
  Tests:
  test/lfc/data/alldata.lzx
.......
  r6334 | ptw | 2007-09-03 15:02:28 -0700 (Mon, 03 Sep 2007) | 19 lines
  
  Change 20070903-ptw-m by ptw at dueling-banjos.local on 2007-09-03 12:53:26 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Paper over source/binary include bug
  
  Bugs Fixed:
  LPP-4463 'ERROR:Class for tag include has not been defined yet'
  
  Technical Reviewer: promanik (Message-Id: <6.2.1.2.0.20070903135340.0220feb0 at na>)
  QA Reviewer: mamye (pending)
  
  Details:
      Decline to compile an include tag if it leaks through to the view
      compiler.
  
  Tests:
.......
  r6344 | max | 2007-09-04 14:57:24 -0700 (Tue, 04 Sep 2007) | 26 lines
  
  Change 20070904-maxcarlson-N by maxcarlson at plastik on 2007-09-04 13:51:25 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Update explicit replicator when items are added or deleted
  
  New Features:
  
  Bugs Fixed: LPP-4612 - Explicit replicator doesn't update when items are added or deleted
  
  Technical Reviewer: pkang
  QA Reviewer: ptw
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: test/explicit-replicators/replicator.lzx - Incorporate tests from LPP-4612.
  
  lps/components/utils/replicator/replicator.lzx - Store reference to dataset pointer.  Register _updateChildren() for onDocumentChange events.  Add _updateChildren() method to receive document change events and rerun the xpath. 
      
  
  Tests: See LPP-4612.  Also updated test/explicit-replicators/replicator.lzx.
.......
  r6361 | ptw | 2007-09-05 05:53:39 -0700 (Wed, 05 Sep 2007) | 41 lines
  
  Change 20070903-ptw-a by ptw at dueling-banjos.local on 2007-09-03 18:01:48 EDT
      in /Users/ptw/OpenLaszlo/wafflecone-2
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Add file/line information to backtraces
  
  Bugs Fixed:
  LPP-4549 'runtime warnings should include file references, line #s'
  
  Technical Reviewer: max (Message-ID: <46DE199D.8020901 at openlaszlo.org>), dda at ddanderson.com (pending)
  QA Reviewer: ewinard (pending)
  
  Details:
      LzMessage: Get file/line information from backtrace if available,
      tweak format of locationString.
  
      LzDebug.*: correct padding computation for computeSlotDescription.
  
      LzDebug.js: _dbg_name takes precedence over runtime function name.
  
      LzBacktrace, LzRuntime: Move backtraceStack creation to runtime so it is
      available as early as needed.
  
      LzBacktrace:  Add __LzStackFrame.isUserFrame,
      .filename, .lineno.  Update _dbg_name to display file and line
      information.  Add LzBacktrace.userStackFrame to get first non-LFC
      frame from a backtrace.
  
      Compiler: Correct precedence computations for unparser, ensure
      parens are added in all the appropriate places.  Needed to handle
      expression-lists that backtrace annotation inserts.
  
      JavascriptGenerator, CodeGenerator: Copy location info when
      re-writing functions.  Note line numbers of call sites for
      backtrace.  Note file and line on functions for backtraces.
  
  Tests:
      smokecheck with backtrace on shows file/line information in debug
      messages and in backtraces.
.......
  r6362 | pbr | 2007-09-05 09:53:49 -0700 (Wed, 05 Sep 2007) | 32 lines
  
  Change 20070903-sallen-6 by sallen at sallen-new on 2007-09-03 16:04:47 PDT
     in /cygdrive/c/laszlo/svn/openlaszlo/branches/wafflecone
     for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: split selectionmanager and dataselectionmanager into two files
  (for readability) and fixed bug in test file
  
  Bugs Fixed: LPP-4638 selectionmanager test broken
  
  Technical Reviewer: (pending)
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  
  Tests:
  ran test/data/selectionmanager.lzx
  
  Files:
  M      test/data/selectionmanager.lzx
  A      WEB-INF/lps/lfc/helpers/LzDataSelectionManager.lzs
  M      WEB-INF/lps/lfc/helpers/Library.lzs
  M      WEB-INF/lps/lfc/helpers/LzSelectionManager.lzs
  
  Changeset:
  http://svn.openlaszlo.org/openlaszlo/patches/20070903-sallen-6.tar
.......
  r6371 | pbr | 2007-09-05 17:41:34 -0700 (Wed, 05 Sep 2007) | 30 lines
  
  Change 20070905-Philip-6 by Philip at Philip-DC on 2007-09-05 16:30:18 EDT
     in /cygdrive/f/laszlo/svn/src/svn/openlaszlo/branches/wafflecone
     for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix datepicker
  
  New Features:
  
  Bugs Fixed: LPP-4520
  
  Technical Reviewer: max
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  If a datepicker is created open (ie. not as an icon), the window component was not displayed correctly. I tracked this down to when the visibility code was changed (r5014). Since the windowpanel has a datapath, it defaults to "collapse". However, there isn't any code to set it to visible. My fix is to set the windowpanel to "visible=true" so that it opens and displays properly.
  
  Tests:
  http://localhost:8080/wafflecone/examples/components/datepicker_example.lzx
  Works in swf and dhtml.
  
  Files:
  M      lps/components/lz/datepicker.lzx
  
  Changeset: http://svn.openlaszlo.org/openlaszlo/patches/20070905-Philip-6.tar
.......
  r6376 | max | 2007-09-05 18:18:44 -0700 (Wed, 05 Sep 2007) | 24 lines
  
  Change 20070905-maxcarlson-E by maxcarlson at plastik on 2007-09-05 16:57:00 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix styling for inputtext fields
  
  New Features:
  
  Bugs Fixed: LPP-4657 -  Input text does not obey font style directives in SWF7/8
  
  Technical Reviewer: promanik
  QA Reviewer: hminsky
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Added an implementation of getTextfieldHeight() to LzInputTextSprite.as that matches the implementation in LzTextSprite.as as of r r6256.
      
  
  Tests: See LPP-4657
.......
  r6377 | hqm | 2007-09-05 18:25:04 -0700 (Wed, 05 Sep 2007) | 40 lines
  
  Change 20070905-hqm-6 by hqm at IBM-2E06404CB67 on 2007-09-05 20:33:42 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3/WEB-INF/lps/lfc
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/WEB-INF/lps/lfc
  
  Summary: fix for return value of onerror event in data loading
  
  New Features:
  
  Bugs Fixed: LPP-4660
  
  Technical Reviewer: pkang (pending)
  QA Reviewer: andre (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  
  When the XML SOLO data loader in LzLoadQeueue got no data, it was returning the LzLoader as a return value
  in an onerror event. This was confusing, so this changes the return value to null.
  
  There was also some broken code which was supposed to set the status value of the data request, but
  was referencing class static variables for the constants in a way that didn't work, and thus getting
  undefined values. Not sure how this ever worked. 
  
      
  
  Tests:
  
  see bug report
  also
  test/lfc/data
  lzpix (SOLO)
  amazon (SOLO)    http://127.0.0.1:8080/wafflecone3/demos/amazon/amazon.lzx?lzproxied=false
.......
  r6379 | jcrowley | 2007-09-05 19:58:34 -0700 (Wed, 05 Sep 2007) | 29 lines
  
  Change 20070904-jcrowley-x by jcrowley at doctormanhattan.mshome.net on 2007-09-04 19:53:34 EDT
      in /Users/jcrowley/src/svn/openlaszlo/waffle
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix lztest-text.lzx
  
  New Features:
  
  Bugs Fixed: LPP-4375 - Fix lztest-text.lzx
  
  Technical Reviewer: ben
  QA Reviewer: 
  Doc Reviewer: 
  
  Documentation:
  
  Release Notes:
  
  Details: Narrowed this down to fix failures in the test.
  	However, failures that are bugs with LzText have
  	been filed and noted.  In other words, this still
  	fails, but not because of problems with this test.
  
  Tests: Run test/lztest/lztest-text.lzx; note that the
  	long list of failures has been trimmed down to
  	about a half dozen, and that all remaining are
  	noted with corresponding JIRA bugs in LzText.
.......
  r6380 | ben | 2007-09-05 20:00:39 -0700 (Wed, 05 Sep 2007) | 30 lines
  
  Change 20070905-ben-1 by ben at slim.local on 2007-09-05 18:39:24 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fixes broken link to deployer's guide in server admin in laszlo explorer
  
  New Features:
  
  Bugs Fixed: LPP-4601 Link to Deployer's Guide in Server Admin is broken
  
  
  Technical Reviewer: jcrowley 
  QA Reviewer: mkratt (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  
  Tests:
  
  http://localhost:8080/wafflecone/laszlo-explorer/index.jsp?lzr=swf8
  Choose Server Admin
  Click on Deploying OpenLaszlo Applications 
  you get a nice page, "System Administrator's Guide to Deploying OpenLaszlo Applications" yay
.......
  r6383 | hqm | 2007-09-06 09:20:48 -0700 (Thu, 06 Sep 2007) | 27 lines
  
  Change 20070906-hqm-8 by hqm at IBM-2E06404CB67 on 2007-09-06 12:18:52 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3/demos/weather
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/demos/weather
  
  Summary:  fix weather error reporting
  
  New Features:
  
  Bugs Fixed: LPP-4521
  
  Technical Reviewer: frisco  (pending)
  QA Reviewer: mamye (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  look for Error in the return messag,e and parse out error message 
  
  
  Tests:
  weather app, use bogus zipcode
.......
  r6385 | ptw | 2007-09-06 11:57:54 -0700 (Thu, 06 Sep 2007) | 19 lines
  
  Change 20070906-ptw-D by ptw at dueling-banjos.local on 2007-09-06 14:47:23 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix lossage in binary compressor
  
  Bugs Fixed:
  LPP-4665 'Compilation of some binary libraries fails'
  
  Technical Reviewer: hminsky (pending)
  QA Reviewer: ewinard (pending)
  
  Details:
      
  
  Tests:
      Test case from bug now compiles
.......
  r6390 | jcrowley | 2007-09-06 13:45:02 -0700 (Thu, 06 Sep 2007) | 27 lines
  
  Change 20070830-jcrowley-I by jcrowley at doctormanhattan.mshome.net on 2007-08-30 06:54:07 EDT
      in /Users/jcrowley/src/svn/openlaszlo/waffle
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix lztest-stableborderlayout.lzx
  
  New Features:
  
  Bugs Fixed: LPP-4374 - Fix lztest-stableborderlayout.lzx
  
  Technical Reviewer: ben
  QA Reviewer: frisco
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: reset() needed to be called on the stableborderlayout
  	before update() was called.  reset() was absent,
  	resulting in some goofy and incorrect placement.
  
  Tests: Run /test/lztest/lztest-stableborderlayout.lzx modified
  	and unmodified; note that the modified version does
  	not fail the test.
.......
  r6391 | max | 2007-09-06 13:45:28 -0700 (Thu, 06 Sep 2007) | 24 lines
  
  Change 20070906-maxcarlson-V by maxcarlson at plastik on 2007-09-06 13:00:25 PDT
      in /Users/maxcarlson/openlaszlo/waffleconeclean
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix possible null dereference in FileUtils.stripByteOrderMark()
  
  New Features:
  
  Bugs Fixed: LPP-4583 - Improve compiler and caching performance
  
  Technical Reviewer: promanik
  QA Reviewer: ptw
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Prevent a possible null dereference in stripByteOrderMark() by adding a try/catch statement.
      
  
  Tests: IWFM
.......
  r6392 | ben | 2007-09-06 13:49:27 -0700 (Thu, 06 Sep 2007) | 32 lines
  
  Change 20070906-ben-Q by ben at slim.local on 2007-09-06 13:20:31 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Rich text editor: changing font to Verdana should behave properly
  
  New Features:
  
  Bugs Fixed: LPP-4556 Rich text: Can't change font back to Verdana
  
  Technical Reviewer: crowley
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  The formatfontface 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:
  The test file for this is http://localhost:8080/wafflecone/lps/components/incubator/rich-text/test/richtexteditarea-driver.lzx?lzr=swf8
  Make text of size 14, then you select it and try to change it to 18, and it will indeed 
  change to size 18. 
.......
  r6393 | ben | 2007-09-06 15:01:57 -0700 (Thu, 06 Sep 2007) | 30 lines
  
  Change 20070906-ben-4 by ben at slim.local on 2007-09-06 14:57:37 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Removed a link to contacts demo, since it doesn't exist anymore
  
  New Features:
  
  Bugs Fixed: LPP-4496 Links to demo apps in refguide are wrongly mapped
  
  Technical Reviewer: none
  QA Reviewer: frisco (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  The "contacts" demo was removed from legals long ago, so it shouldn't
  be referred to in the documentation. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
  ant doc 
  Go to http://localhost:8080/wafflecone/docs/reference/tag.splash+as2.html
  Note that there is no sentence referring to contacts example, nor is there
  a link.  
.......
  r6396 | max | 2007-09-06 22:18:41 -0700 (Thu, 06 Sep 2007) | 35 lines
  
  Change 20070906-maxcarlson-N by maxcarlson at plastik on 2007-09-06 13:06:11 PDT
      in /Users/maxcarlson/openlaszlo/waffleconeclean
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: UPDATED: Change explicit replicators to support (data)selectionmanager
  
  New Features:
  
  Bugs Fixed: LPP-4667 - replicatorselectionmanager: yet another replication manager is confusing
  
  Technical Reviewer: sallen
  QA Reviewer: ptw
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: selection.lzx - add testcase for selection that doesn't use lists.
  
  test-replicator.lzx - Change explicit replicators to use dataselectionmanager and selectionmanager.
  
  lzx-autoincludes.properties - Remove utils/replicator/replicatorselectionmanager.lzx.
  
  lazyreplicator.lzx - Add getCloneForNode() implementation similar to lazy replication's.
  
  library.lzx - Remove replicatorselectionmanager.
  
  replicator.lzx - Reset selection state in bind().  Set cloneManager attribute for backward compatibility with selection managers.   Added implementation of getCloneForNode() similar to replication manager's, which gets the clone for the given datapath
  
  replicatorselectionmanager.lzx - Buh-bye!
  
  Tests: All permutations in selection.lzx work properly. 
.......
  r6401 | max | 2007-09-07 13:08:13 -0700 (Fri, 07 Sep 2007) | 29 lines
  
  Change 20070906-maxcarlson-m by maxcarlson at plastik on 2007-09-06 19:07:18 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Add history support for IE
  
  New Features:
  
  Bugs Fixed: LPP-4655 (partial)
  
  Technical Reviewer: promanik
  QA Reviewer: jcrowley
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: LzHistory.as - Update to use Lz.history.set().
  
  LzHistory.rs - Update to use Lz.history.set().
  
  embednew.js - Use Lz.history._store() for setCanvasAttribute() calls with history.  Refactored history-related methods to lzhistory.js.
  
  lzhistory.js - Refectored history-related methods from embednew.js.  Added support for IE, initial support for Safari.
  
  Tests: http://localhost:8080/wafflecone/test/history/history.lzx?lzr=dhtml&lzt=html and http://localhost:8080/wafflecone/test/history/history.lzx?lzr=swf7&lzt=html work as before in Firefox, and now work in IE 6 and 7.
.......
  r6402 | ptw | 2007-09-07 13:40:55 -0700 (Fri, 07 Sep 2007) | 20 lines
  
  Change 20070907-ptw-r by ptw at dueling-banjos.local on 2007-09-07 15:16:36 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Corner case for stretches with no resource
  
  Bugs Fixed:
  LPP-4661 'View with stretches="both" does not get onclick'
  
  Technical Reviewer: max (Message-ID: <46E1B428.4060901 at openlaszlo.org>)
  QA Reviewer: pkang (pending)
  
  Details:
      If there is no resource the default dimension is 100 for unscaling
      the button
  
  Tests:
      Test case from bug works correctly.
.......
  r6404 | ptw | 2007-09-07 14:48:01 -0700 (Fri, 07 Sep 2007) | 20 lines
  
  Change 20070907-ptw-v by ptw at dueling-banjos.local on 2007-09-07 16:54:14 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Include replicator in components so doc gets built
  
  Technical Reviewer: ben (pending)
  QA Reviewer: jsundman (pending)
  
  Details:
      utils/library did not get updated to list replicators
  
      utils/replicator/library needs to list a topic and subtopic
  
      Also suppress a warning in LzBacktrace
  
  Tests:
      ant doc
.......
  r6406 | ben | 2007-09-07 16:03:19 -0700 (Fri, 07 Sep 2007) | 31 lines
  
  Change 20070907-ben-5 by ben at slim.local on 2007-09-07 15:13:12 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Make links to editor for code examples work
  
  New Features:
  
  Bugs Fixed: LPP-4400 Editor for live code examples in dguide isn't working
  
  Technical Reviewer: lou (pending)
  QA Reviewer: frisco (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  The editor for the live code examples in the developer's guide had
  slight errors in the paths to the editor jsp and to the source file
  to edit. This fix corrects them. Note that there are (at least) 
  two separate ways in which the "edit" button is created by common-html.xsl.
  This change fixes two of those places. If there are more, they will have
  to be found and revealed in later changes. 
  
  Release Notes:
  
  Details:
      
  
  Tests:
.......
  r6410 | max | 2007-09-07 22:36:42 -0700 (Fri, 07 Sep 2007) | 24 lines
  
  Change 20070907-maxcarlson-a by maxcarlson at plastik on 2007-09-07 19:42:18 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Fix text redraw performance in flash 8
  
  New Features:
  
  Bugs Fixed: LPP-4675 - Scrolling large text (100K) is very slow
  
  Technical Reviewer: promanik
  QA Reviewer: pkang
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Turning on cacheAsBitmap for the text movieclip makes scrolling nice and zippy when compiled for Flash 8.
      
  
  Tests: http://localhost:8080/wafflecone/my-apps/textspeed-lpp-4675.lzx?lzr=swf8 is muuuch faster
.......
  r6413 | hqm | 2007-09-08 17:22:45 -0700 (Sat, 08 Sep 2007) | 30 lines
  
  Change 20070908-hqm-0 by hqm at IBM-2E06404CB67 on 2007-09-08 09:30:54 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary:  fix for lazyreplicator when used with list component
  
  New Features:
  
  Bugs Fixed: LPP-4666
  
  Technical Reviewer: ptw (pending)
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
  
  Take steps to disable any layouts in the container before instantiating
  the clones    
  
  Note, also in this patch is changing of xpath attribute to string type (
  under review in another patch)
  
  
  Tests:
.......
  r6414 | hqm | 2007-09-08 17:52:42 -0700 (Sat, 08 Sep 2007) | 26 lines
  
  Change 20070908-hqm-0 by hqm at IBM-2E06404CB67 on 2007-09-08 20:50:37 EDT
      in /cygdrive/c/users/hqm/openlaszlo/wafflecone3/lps/components/utils
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone/lps/components/utils
  
  Summary:  remove warning in lazyreplicator
  
  New Features:
  
  Bugs Fixed:
  
  Technical Reviewer: hqm (pending)
  QA Reviewer: (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details:
      
  should have used "'foo' in bar" to check for undefined property
  
  
  Tests:
.......
  r6424 | ben | 2007-09-10 14:15:24 -0700 (Mon, 10 Sep 2007) | 47 lines
  
  Change 20070910-ben-P by ben at slim.local on 2007-09-10 13:34:12 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Make sure component-browser doc example goes into the distros
  
  New Features:
  
  Bugs Fixed: LPP-4423  Class hierarchy document is not found
  LPP-4663 Class hierarchy doc not found in binary dist
  
  Technical Reviewer: ptw
  QA Reviewer: frisco (pending)
  Doc Reviewer: (pending)
  
  Documentation:
  The directory containing the component-browser example needs
  to be explicitly included when creating the docs directory. 
  To accomplish this, we add the docs/component-browser directory
  to the patternset of the files to include when we build the
  docs part of the distro. 
  
  Release Notes:
  
  Details:
      
  The entire change is just this: 
  Index: /Users/ben/src/svn/openlaszlo/branches/wafflecone/build.xml
  ===================================================================
  --- /Users/ben/src/svn/openlaszlo/branches/wafflecone/build.xml	(revision 6422)
  +++ /Users/ben/src/svn/openlaszlo/branches/wafflecone/build.xml	(working copy)
  @@ -160,6 +160,7 @@
         <include name="developers/**" />
         <include name="deployers/**" />
         <include name="component-design/**" />
  +      <include name="component-browser/**" />      
         <include name="reference/**" />
         <include name="contributors/**" />
         <include name="contribref/**" />
  
  
  Tests:
  Let the build process build installers. Run the installers
  on mac and windows. In each built installer, go to 
  Laszlo Explorer -- Explorer -> Components -> Class Hierarchy 
.......
  r6426 | ben | 2007-09-10 15:31:41 -0700 (Mon, 10 Sep 2007) | 16 lines
  
  Change 20070910-ben-r by ben at slim.local on 2007-09-10 15:25:11 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: First emptying-out of release notes in preparation for 4.0.5.
  
  Bugs Fixed: LPP-4577 Write wafflecone release notes (PARTIAL)
  
  Description: 
  I've emptied out the old stuff from the release notes. This
  is just the beginning of the release notes; I just wanted to
  start from a clean-ish slate. 
  
  Tests:
.......
  r6429 | ben | 2007-09-11 11:06:39 -0700 (Tue, 11 Sep 2007) | 17 lines
  
  Change 20070911-ben-A by ben at slim.local on 2007-09-11 10:56:21 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Add list of fixed bugs in 4.0.5 to release notes 
  
  Bugs Fixed: LPP-4577 Write wafflecone release notes
  
  Technical Reviewer: none (pending)
  
  Documentation:
  Added list of fix bugged in 4.0.5, based on jira info. 
  
  Tests:
  http://localhost:8080/wafflecone/docs/release-notes.html
.......
  r6440 | ptw | 2007-09-12 12:57:55 -0700 (Wed, 12 Sep 2007) | 19 lines
  
  Change 20070912-ptw-m by ptw at dueling-banjos.local on 2007-09-12 13:21:29 EDT
      in /Users/ptw/OpenLaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Take care updating selection when node is null
  
  Bugs Fixed:
  LPP-4699 'Explicit replicator displays warning when a clone's datapath is null'
  
  Technical Reviewer: pkang (Message-ID: <Pine.OSX.4.64.0709121247430.22280 at pkang-mac.local>)
  QA Reviewer: max (Message-ID: <46E83BBD.3090603 at openlaszlo.org>)
  
  Details:
      If there is no datanode, you can't be selected.
  
  Tests:
       Pablo to try with this test case
.......
  r6444 | max | 2007-09-12 13:37:42 -0700 (Wed, 12 Sep 2007) | 24 lines
  
  Change 20070907-maxcarlson-8 by maxcarlson at plastik on 2007-09-07 19:19:48 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Add history support for Safari
  
  New Features:
  
  Bugs Fixed: LPP-4655 (partial) - History mechanism not working
  
  Technical Reviewer: jcrowley
  QA Reviewer: promanik
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: Track history state for Safari.  Cache _iframe for IE.  Refactor IE history retrieval to get().  Call setCanvasAttribute in Lz instead of this.
      
  
  Tests: http://localhost:8080/wafflecone/test/history/history.lzx now works in Safari.  Note that it doesn't work in DHTML yet, because query string args aren't preserved by safari.  IE and Firefox work as before.
.......
  r6445 | max | 2007-09-12 13:46:37 -0700 (Wed, 12 Sep 2007) | 3 lines
  
  Removing obsolete testcase.
.......
  r6448 | max | 2007-09-12 14:16:13 -0700 (Wed, 12 Sep 2007) | 32 lines
  
  Change 20070912-maxcarlson-Y by maxcarlson at plastik on 2007-09-12 12:53:07 PDT
      in /Users/maxcarlson/openlaszlo/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Put swf developer's console in an iframe
  
  New Features:
  
  Bugs Fixed: LPP-4655 - History mechanism not working, LPP-4695 - Runtime-Exception in IE with Flash8
  
  Technical Reviewer: promanik
  QA Reviewer: bshine
  Doc Reviewer: (pending)
  
  Documentation:
  
  Release Notes:
  
  Details: app-console.xslt - Move developer's console to an iframe that loads 'dev-console.html', passing the required arguments.  
  
  dev-console.html - HTML wrapper for the developer's console.  Based on SOLO wrapper, passes query string arguments into dev-console.lzx.swf.
  
  dev-console.swf - Recompiled for swf7.
  
  dev-console.lzx - Endure all loadURL() calls are in the frame '_top', now that the console may be in an iframe.  Cosmetic improvements to border around controls.
  
  dev-console.js - Recompiled for dhtml.
      
  
  Tests: http://localhost:8080/wafflecone/my-apps/copy-of-hello.lzx?lzr=swf8 no longer warns in IE 6 or 7
.......
  r6450 | ben | 2007-09-12 14:45:50 -0700 (Wed, 12 Sep 2007) | 21 lines
  
  Change 20070912-ben-f by ben at slim.local on 2007-09-12 14:43:24 PDT
      in /Users/ben/src/svn/openlaszlo/branches/wafflecone
      for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone
  
  Summary: Updated release notes with three more fixed bugs
  
  Technical Reviewer: none 
  
  Documentation:
  Added 3 recent fixed bugs to the list of fixed bugs: 
  # LPP-4655: History mechanism not working
  # LPP-4695: Runtime-Exception in IE with Flash8
  # LPP-4699: Explicit replicator displays warning when a clone's datapath is null
  Also changed some angle brackets to &lt; &gt;. 
  
  Release Notes:
  
  Tests:
  It doesn't pass w3c validation, but I'm prepared to live with that. 
.......



Property changes on: openlaszlo/branches/legals
___________________________________________________________________
Name: svnmerge-integrated
   - /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
   + /openlaszlo/branches/wafflecone:1-5746,5818-6068,6070-6205,6207-6213,6216-6265,6267-6368,6370-6431,6433-6450 /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/compiler/Class.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/Class.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/Class.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -188,7 +188,7 @@
 Instance.make = function make () {
   // Should not be called in the new world...
   if ($debug) {
-    Debug.warn("`%w.%s` is deprecated.  Use `new %w` instead.", this, arguments.callee, this);
+    Debug.info("`%w.%s` is deprecated.  Use `new %w` instead.", this, arguments.callee, this);
   }
   {
     #pragma "passThrough=true"

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/LzRuntime.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/LzRuntime.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/compiler/LzRuntime.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -189,6 +189,15 @@
     */
   var Debug = new Object;
 
+  /** Backtrace stack
+    * @access private
+    */
+  Debug.backtraceStack = new Array();
+  /** Max depth allowed
+    * @access private
+    */
+  Debug.backtraceStack.maxDepth = 100;
+
   /**
     * Doc'd on real definition
     * Bootstrap version

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/controllers/LzAnimatorGroup.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/controllers/LzAnimatorGroup.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/controllers/LzAnimatorGroup.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -318,10 +318,8 @@
   */
 function start ( ){
     if ( $debug ){
-        Debug.warn( 'Animator start() is deprecated.' +
-                    'Use animator doStart() instead.' );
+      Debug.deprecated(this, arguments.callee, this.doStart);
     }
-
     this.doStart();
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzDefs.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzDefs.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzDefs.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -73,14 +73,19 @@
   * @access private
   */
 function LzInheritedHash (parent)  {
-  var constructor = arguments.callee
-  if (! parent) {
-    this.constructor = constructor;
-  } else {
+  if (parent) {
+    // NOTE: [2007-08-31 ptw] AS2 does not allow returning an
+    // alternate object from a constructor, so we have to resort to
+    // platform-specific code to implement inheritance.
     if ($as2) {
       this.__proto__ = parent;
     } else {
-      function xtor() { this.constructor = constructor; };
+      // NOTE: [2007-08-30 ptw/hqm/max] We tried to set the
+      // constructor property for this object to LzInheritedHash for
+      // the debugger, but that does not work (in at least Firefox and
+      // Opera).  Apparently there is something we don't fully
+      // understand about the constructor property in Javascript.
+      function xtor() {};
       xtor.prototype = parent;
       return new xtor();
     }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzNode.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzNode.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/core/LzNode.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -929,7 +929,7 @@
   */
 function setProp ( prop , val ){
     if ( $debug ){
-        Debug.warn( "setProp is deprecated. Use setAttribute instead." );
+      Debug.deprecated(this, arguments.callee, this.setAttribute);
     }
     this.setAttribute( prop , val );
 }
@@ -1846,7 +1846,7 @@
   */
 function deleteNode( recursiveCall ){
     if ( $debug ){
-        Debug.warn( "deleteNode is deprecated. Use destroy instead." );
+      Debug.deprecated(this, arguments.callee, this.destroy);
     }
     this.destroy( recursiveCall );
 }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/core/UserClass.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/core/UserClass.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/core/UserClass.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -143,8 +143,8 @@
 //       }
     } else {
       if ($debug) {
-        Debug.warn('`%s` is already defined.  Use `%s` instead.', 
-                   classname, newclass);
+        Debug.info("The global `%s` is already defined.  To dynamically create a <%s> element, you will have to use `%s`.",
+                   classname, classname, newclass);
       }
     }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapath.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapath.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapath.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -459,8 +459,7 @@
   */
 function retrieveData( ){
     if ( $debug ){
-        Debug.warn( "LzDatapath.retrieveData is deprecated."+
-                    "The new name for this method is 'updateData'");
+      Debug.deprecated(this, arguments.callee, this.updateData);
     }
     return this.updateData( );
 }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapointer.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapointer.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDatapointer.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -193,8 +193,8 @@
 function getXPath ( p ){ 
     if ( $debug ){
         if ( !this.didGetXPathWarn ){
-            Debug.warn( "LzDatapointer.getXPath is deprecated." +
-                        "Use LzDatapointer.xpathQuery() or a $path{} instead." );
+          Debug.info("%w.%s is deprecated.  Use %w.%s or a $path{} constraint instead.",
+                     this, arguments.callee, this, this.xpathQuery);
         }
         this.didGetXPathWarn = true;
     }
@@ -439,7 +439,7 @@
         if ( n.childNodes.length ){
             if ( this.ondata && !this.__LZoldOndataWarn ){
                 if ($debug) {
-                Debug.warn( "Datapointer pointing to %w," + 
+                Debug.info( "Datapointer pointing to %w," +
                     ' relies on the ondata event from' +
                     " a datapointer bound to the root node of a dataset."+
                     " \n    This behavior is deprecated." +
@@ -630,7 +630,7 @@
 
   if ( p == null ){
       if ( $debug ) {
-          Debug.warn("%s: p is null in %s", arguments.callee, this);
+          Debug.info("%s: p is null in %s", arguments.callee, this);
       }
       return false;
   }
@@ -878,8 +878,8 @@
   */
 function getNodeOffset (){ 
     if ( $debug ) {
-        Debug.warn( 'LzDatapointer.getNodeOffset is deprecated. ' +
-                    ' Use position() xpath instead' );
+      Debug.info("%w.%s is deprecated.  Use XPath `position()` operator instead.",
+                 this, arguments.callee);
     }
     this.p.parentNode.__LZupdateCO();
     return this.p.__LZo + 1;
@@ -892,7 +892,7 @@
 function getNodeName (){ 
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -906,7 +906,7 @@
 function setNodeName (name){
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -923,7 +923,7 @@
 function getNodeAttributes (){ 
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -938,7 +938,7 @@
 function getNodeAttribute (name){ 
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -954,7 +954,7 @@
 function setNodeAttribute (name, val) {    
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -968,7 +968,7 @@
 function deleteNodeAttribute (name) {
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -985,7 +985,7 @@
 function getNodeText (){ 
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -1003,8 +1003,7 @@
 
 function getOtherNodeText (n){ 
     if ( $debug ) {
-        Debug.warn( 'LzDatapointer.getOtherNodeText() is deprecated. ' +
-                    ' Use LzDatapointer.getNodeText() instead.' );
+      Debug.deprecated(this, arguments.callee, this.getNodeText);
     }
     var s = "";
     if (n.c != null) {
@@ -1032,7 +1031,7 @@
 function setNodeText (val) {
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -1075,7 +1074,7 @@
 function addNode ( name, text , attrs ){
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -1099,7 +1098,7 @@
 function deleteNode ( ){
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -1154,7 +1153,7 @@
     if ( ! dp.p ) return;
     if ( ! this.p ) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -1178,7 +1177,7 @@
 function __LZprocessOperator ( p , pp , depends ){
     if (p == null) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }
@@ -1268,7 +1267,7 @@
 function serialize ( ){ 
     if ( this.p == null) {
         if ( $debug ) {
-            Debug.warn("%s: p is null in %s", arguments.callee, this);
+            Debug.info("%s: p is null in %s", arguments.callee, this);
         }
         return;
     }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataset.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataset.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzDataset.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -101,6 +101,7 @@
 var multirequest = false;
 var dataRequest = null; 
 var dataRequestClass = LzHTTPDataRequest;
+var dsloadDel = null;
 
 DeclareEvent(prototype, 'ondata' );
 /** Sent when the dataset's request results in an error. */
@@ -186,7 +187,7 @@
   * inits. The default for this is false.
   * @type Boolean
   */
-/* var request; */
+var request = false;
 setters.request = "setRequest";
 
 var autorequest = false;
@@ -282,6 +283,10 @@
   * @access private
   */
 function destroy ( recursiveCall ) {
+    if (this.dsloadDel) {
+        this.dsloadDel.unregisterAll();
+    }
+    
     var name = this.name;
     if (this.oncanvas) {
         if (canvas[ name ] === this) {
@@ -341,8 +346,8 @@
   */
 function getStatusCode (){
     if ( $debug ){
-        Debug.warn( 'LzDataset.getStatusCode is deprecated.' +
-                    ' Use onerror/ontimeout events instead.' );
+      Debug.info("%s.%w is deprecated.  Use `onerror` and `ontimeout` events instead.",
+                 this, arguments.callee);
     }
     return 200;
 }
@@ -498,6 +503,7 @@
   * initialized
   */
 function setRequest( b ) {
+    this.request = b;
     if ( ! b ) return;
     if ( !this.isinited ){
         this.reqOnInitDel = new LzDelegate( this , "doRequest" , 
@@ -511,8 +517,8 @@
   */
 function getLoadTime( ) {
     if ( $debug ){
-        Debug.warn( 'LzDataset.getLoadTime() is deprecated.' +
-                    ' Look at dataRequest.loadtime object instead.' );
+      Debug.info("%w.%s is deprecated.  Look at `%w.loadtime` object instead.",
+                 this, arguments.callee, this.dataRequest);
     }
 }
 
@@ -635,7 +641,11 @@
     dreq.nsprefix        =  this.nsprefix;
 
     // NB: You had better set the onstatus event handler *before* issuing request
-    this.dsloadDel = new LzDelegate( this , "handleDataResponse" , dreq, "onstatus");
+    if (this.dsloadDel == null) {
+        this.dsloadDel = new LzDelegate( this , "handleDataResponse" , dreq, "onstatus");
+    } else {
+        this.dsloadDel.register(dreq, "onstatus");
+    }
     this.dataprovider.doRequest( dreq );
 
 }
@@ -647,6 +657,10 @@
   */
 
 function handleDataResponse (datareq) {
+    if (this.dsloadDel != null) {
+        this.dsloadDel.unregisterFrom(datareq.onstatus);
+    }
+    
     if (datareq.status == LzDataRequest.SUCCESS) {
         this.setData(datareq.xmldata, datareq.responseheaders);
     } else if (datareq.status == LzDataRequest.ERROR) {
@@ -657,10 +671,6 @@
 
 }
 
-// TODO [hqm 2007-08] Is "request()" an ancient deprecated alias for
-// doRequest? When can we get rid of it?
-prototype.request = doRequest;
-
 /**
   * Turns autorequest on or off, depending on the value passed in. 
   * If true, changes to dataset request parameters cause new datasets to be 
@@ -672,7 +682,6 @@
   */
 function setAutorequest(b) {
     this.autorequest = b;
-    this.setRequest( b );
 }
 
 /**

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/data/LzHTTPDataProvider.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -6,7 +6,6 @@
   * @access public
   * @topic LFC
   * @subtopic Data
-  * @access public
   */
 
 
@@ -148,11 +147,7 @@
         }
 
         if (querystring != null && querystring.length > 0) {
-            if (q.length > 0) {
-                q += sep + querystring;
-            } else {
-                q = querystring;
-            }
+            q += sep + querystring;
         }
 
         var url = dreq.src
@@ -161,7 +156,7 @@
             } else {
                 // if there are already query args in the url, separate them with a '&'
                 if (url.indexOf('?') >= 0) {
-                    url = url + "&" + q;
+                    url = url + "&" + q.substring(1);
                 } else {
                     url = url + q;
                 }
@@ -193,7 +188,7 @@
 
     function loadSuccess ( loader, data ) { 
         var dreq = loader.dataRequest;
-        dreq.status = "success";
+        dreq.status = LzDataRequest.SUCCESS;
         loader.owner.loadResponse( dreq, data );
     }
 
@@ -205,13 +200,13 @@
 
     function loadTimeout( loader, data ) { 
         var dreq = loader.dataRequest;
-        dreq.status = "timeout";
+        dreq.status = LzDataRequest.TIMEOUT;
         loader.owner.loadResponse( dreq, data );
     }
 
     function setRequestError (dreq, msg) {
         dreq.error = msg;
-        dreq.status = dreq.ERROR;
+        dreq.status = LzDataRequest.ERROR;
     }
 
     /**

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzBacktrace.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzBacktrace.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzBacktrace.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -12,16 +12,10 @@
   */
 
 // Support for backtraces in the debugger
+// -- Declared in LzRuntime
+// Debug.backtraceStack = new Array();
+// Debug.backtraceStack.maxDepth = 100;
 
-/** Backtrace stack
-  * @access private
-  */
-Debug.backtraceStack = new Array();
-/** Max depth allowed
-  * @access private
-  */
-Debug.backtraceStack.maxDepth = 100;
-
 {
 #pragma "debugBacktrace=false"
   /** @access private */
@@ -59,20 +53,54 @@
 var __LzStackFrame = function (args) {
   if (args instanceof Array) {
     this['this'] = args['this'];
-    this['function'] = args['callee'];
+    this['function'] = args.callee;
+    this.__lineno = ('lineno' in args) ? args.lineno : this['function']._dbg_lineno;
   }
   this.arguments = args;
 }
 
 /**
+ * Is this a user stack frame?
+ * @access private
+ */
+  __LzStackFrame.prototype.isUserFrame = function () {
+    return this['function']._dbg_filename.indexOf('lfc') != 0;
+  }
+
+/**
+ * Filename associated with a stack frame
+ * @access private
+ */
+  __LzStackFrame.prototype.filename = function () {
+    return this['function']._dbg_filename;
+  }
+
+/**
+ * Lineno associated with a stack frame
+ * @access private
+ */
+  __LzStackFrame.prototype.lineno = function () {
+    return this.__lineno;
+  }
+
+/**
   * Debug printer
   * @access private
   */
 __LzStackFrame.prototype._dbg_name = function () {
-  return Debug.formatToString('%0.72w.apply(%w, %w)', this['function'], this['this'], this.arguments);
+  var callee = this['function'];
+  var filename = callee._dbg_filename;
+  var lineno = this.__lineno;
+  return Debug.formatToString('%0.64w @%s#%d', callee, filename, lineno);
 }
 
 /**
+  * Debug printer
+  * @access private
+  */
+__LzStackFrame.prototype._dbg_typename = "StackFrame";
+
+/**
   * Snapshot of the current backtrace.  Relies on compiler support that
   * inserts code at the top of each function in debug mode that records
   * the function's arguments in Debug.backtraceStack
@@ -92,8 +120,9 @@
   for (var i = 0; i < l; i++) {
     var fr = bs[i];
     // Reuse stack frames so they are unique
-    if (! fr.hasOwnProperty('__LzStackFrame')) {
-#pragma "passThrough=true"
+    if ((! fr.hasOwnProperty('__LzStackFrame')) ||
+        // Bad modularity
+        (fr['lineno'] != fr.__LzStackFrame.__lineno)) {
       fr.__LzStackFrame = new __LzStackFrame(fr);
     }
     this[i] = fr.__LzStackFrame;
@@ -107,6 +136,19 @@
 // LzBacktrace.prototype.constructor = LzBacktrace;
 
 /**
+ * Find the topmost user stack frame
+ * @access private
+ */
+  LzBacktrace.prototype.userStackFrame = function () {
+    for (var i = this.length - 1; i >= 0; i--) {
+      var fr = this[i];
+      if (fr.isUserFrame()) {
+        return fr;
+      }
+    }
+  }
+
+/**
   * Convert a backtrace to a string
   * @param printer:Function the function to print the backtrace
   * functions with.  Defaults to Debug.__String
@@ -151,6 +193,12 @@
 }
 
 /**
+  * Debug printer
+  * @access private
+  */
+LzBacktrace.prototype._dbg_typename = "Backtrace";
+
+/**
   * Snapshot the current call stack into a LzBacktrace object which
   * can be printed or inspected
   * 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzDebug.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -47,6 +47,19 @@
 Debug.printPretty = true;
 
 /**
+ * Possible values of Debug.messageLevel (q.v.)
+ */
+Debug.messageLevels = {ALL: 0, DEBUG: 1, INFO: 2, WARNING: 3, ERROR: 4, NONE: 5};
+
+/**
+ * Debug messages are enabled/disabled by the
+ * setting of Debug.messageLevel.  The valid levels are one of the
+ * keys of Debug.messageLevels.  All messages of a lower level than
+ * the current setting will be suppressed
+ */
+Debug.messageLevel = 'ALL';
+
+/**
   * Array of prefixes that indicate internal properties to the
   * inspector.  If Debug.showInternalProperties is false, any properties
   * with a prefix in this set will not be displayed.

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzMessage.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzMessage.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/LzMessage.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -14,10 +14,16 @@
 
 /**
   * A message is a string with annotations for the objects represented.
+  *
+  * This replaces the bootstrap LzMessage class in
+  * compiler/LzFormatter
+  *
   * @param String message: initial message
   * @access private
+  *
+  * @devnote TODO: [2007-09-05 ptw] Convert to class declaration
   */
-var LzMessage = function (message) {
+var LzMessage = function LzMessage (message) {
   // A Message would like to be a subclass of string, but mutable
   // TODO: [2006-04-11 ptw] Make this a real class
   this.constructor = arguments.callee;
@@ -241,7 +247,7 @@
   return this.toArray(function () {
       return Debug.makeObjectLink.apply(Debug, arguments);
     }).join('');
-}
+};
 
 // Mimic built-in class, which hides all prototype methods
 //ASSetPropFlags(LzMessage.prototype, null, 1);
@@ -255,15 +261,42 @@
   * @seealso LzSourceMessage.format
   * @access private
   */
-var LzSourceMessage = function (file, line, message) {
+function LzSourceMessage (file, line, message) {
   switch (arguments.length) {
     case 0:
-      file = null;
+    file = null;
     case 1:
-      line = null;
+    line = null;
     case 2:
-      message = '';
+    message = '';
   }
+  // Append a backtrace if there is one -- skip back to the
+  // $reportSourceWarning or warnInternal frames.
+  if ('backtraceStack' in Debug) {
+    var bts = Debug.backtraceStack;
+    var btsl = bts.length;
+    var skip = 3;
+    for (var i = btsl - 1; i > skip; i--) {
+      var callee = bts[i].callee;
+      if (callee === $reportSourceWarning ||
+          callee === Debug.warnInternal) {
+        // Skip the caller and the constructor frames too
+        skip = btsl - i + 3;
+        break;
+      }
+    }
+    if (Debug.backtraceStack.length > skip) {
+      this.backtrace = Debug.backtrace(skip);
+      // Heuristicate file/line from backtrace if available
+      if (file == null && this.backtrace) {
+        var top = this.backtrace.userStackFrame();
+        if (top) {
+          file = top.filename();
+          line = top.lineno();
+        }
+      }
+    }
+  }
   this.file = file;
   this.line = line;
   if (message instanceof LzMessage) {
@@ -271,17 +304,8 @@
   } else {
     this.message = new LzMessage(message);
   }
-  // Append a backtrace if there is one -- skip 3 (warning, this, and
-  // constructor frames)
-  if (Debug['backtraceStack']) {
-    if (Debug.backtraceStack.length > 3) {
-      this.backtrace = Debug.backtrace(3);
-    }
-  }
 }
 
-/* Correct constructor */
-LzSourceMessage.prototype.constructor = LzSourceMessage;
 LzSourceMessage.prototype.type = '';
 LzSourceMessage.prototype.color = '#000000';
 
@@ -314,6 +338,16 @@
     // Safari and Firefox do not implement arguments as an array
     message = debug.formatToString.apply(debug, Array.prototype.slice.call(arguments, 2));
   }
+  // Heuristicate file/line from args
+  if (file == null) {
+    for (var i = 3; i < arguments.length; i++) {
+      var arg = arguments[i];
+      if (arg instanceof lz.node && '_dbg_filename' in arg) {
+        file = arg._dbg_filename;
+        line = arg._dbg_lineno;
+      }
+    }
+  }
   return new this.prototype.constructor(file, line, message);
 }
 
@@ -321,17 +355,16 @@
  * Get the location as a string
  */
 LzSourceMessage.prototype.locationString = function () {
-  var str = this.type + ':';
+  var str = this.type;
   if (this.file) {
-    str += ' ';
+    str += ' @';
     str += this.file;
-    str += ':';
     if (this.line) {
+      str += '#';
       str += this.line;
-      str += ':';
     }
   }
-  str += ' ';
+  str += ': ';
   return str;
 }
 
@@ -385,7 +418,7 @@
   * An Warn is a sourceMessage with the tag 'WARN'
   * @access private
   */
-var LzWarning = function(file, line, message) {
+function LzWarning (file, line, message) {
   // super.apply(arguments);
   LzSourceMessage.apply(this, arguments);
 }
@@ -401,7 +434,7 @@
   * An Error is a sourceMessage with the tag 'ERROR'
   * @access private
   */
-var LzError = function(file, line, message) {
+function LzError (file, line, message) {
   // super.apply(arguments);
   LzSourceMessage.apply(this, arguments);
 }
@@ -416,7 +449,7 @@
   * An Info is a sourceMessage with the tag 'INFO'
   * @access private
   */
-var LzInfo = function(file, line, message) {
+function LzInfo (file, line, message) {
   // super.apply(arguments);
   LzSourceMessage.apply(this, arguments);
 }
@@ -431,7 +464,7 @@
   * An Debug is a sourceMessage with the tag 'DEBUG'
   * @access private
   */
-var LzDebug = function(file, line, message) {
+function LzDebug (file, line, message) {
   // super.apply(arguments);
   LzSourceMessage.apply(this, arguments);
 }
@@ -479,6 +512,17 @@
   */
 Debug.debug = function (control, args) {
   return this.warnInternal.apply(this, [LzDebug].concat(Array.prototype.slice.call(arguments, 0)));
-}
+};
 
 
+/**
+ * Deprecation message
+ * @param lznode obj: The object the deprecated method is being called
+ * on (usually `this`).
+ * @param Function method: The method being called (usually
+ * arguments.callee)
+ * @param Function method: The replacement method
+ */
+Debug.deprecated = function (obj, method, replacement) {
+  Debug.info("%w.%s is deprecated.  Use %w.%s instead", obj, method, obj, replacement);
+}

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/LzDebug.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/LzDebug.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/LzDebug.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -94,13 +94,16 @@
  */
 Debug.functionName = function (fn, mustBeUnique) {
   if (fn && (fn instanceof Function)) {
-    // tip o' the pin to osteele.com
-    var fstring = fn.toString();
-    var m = fstring.match(this.functionNamePattern);
-    if (m) {
-      var n = m[1];
-    } else if (fn.hasOwnProperty('_dbg_name')) {
+    // _dbg_name takes precedence over the actual function name
+    if (fn.hasOwnProperty('_dbg_name')) {
       var n = fn._dbg_name;
+    } else {
+      // tip o' the pin to osteele.com
+      var fstring = fn.toString();
+      var m = fstring.match(this.functionNamePattern);
+      if (m) {
+        var n = m[1];
+      }
     }
     if (n) {
       if ((! mustBeUnique) || (fn === global[n])) {
@@ -550,6 +553,7 @@
  */
 Debug.computeSlotDescription = function (obj, key, val, wid) {
   var r = key + ':';
+  wid++;
   try {
     // Annotate 'weight' if available
     if (this.markGeneration > 0) {

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/kernel.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/kernel.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/dhtml/kernel.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -230,13 +230,18 @@
 Debug.warnInternal = function (xtor, control, args) {
   var sourceMessage = LzSourceMessage;
   var level = sourceMessage.level
-    if (level > sourceMessage.levelMax) { return; }
+  if (level > sourceMessage.levelMax) { return; }
   try {
     sourceMessage.level = level + 1;
     // Safari and Firefox do not implement arguments as an array
     var msg = xtor.format.apply(xtor, [null, null].concat(Array.prototype.slice.call(arguments, 1)));
-    this.freshLine();
-    this.__write(msg);
+    {
+      var mls = this.messageLevels;
+      if (mls[xtor.prototype.type] >= mls[this.messageLevel]) {
+        this.freshLine();
+        this.__write(msg);
+      }
+    }
   }
   finally {
     sourceMessage.level = level;

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/LzDebug.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/LzDebug.as	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/LzDebug.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -614,6 +614,7 @@
   */
 Debug.computeSlotDescription = function (obj, key, val, wid) {
   var r = key + ':';
+  wid++;
   // Annotate 'weight' if available
   if (this.markGeneration > 0) {
     var annotation = this.annotation;

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/kernel.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/kernel.as	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/debugger/platform/swf/kernel.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -116,8 +116,13 @@
     sourceMessage.level = level + 1;
     // Safari and Firefox do not implement arguments as an array
     var msg = xtor.format.apply(xtor, [null, null].concat(Array.prototype.slice.call(arguments, 1)));
-    this.freshLine();
-    this.__write(msg);
+  {
+    var mls = this.messageLevels;
+    if (mls[xtor.prototype.type] >= mls[this.messageLevel]) {
+      this.freshLine();
+      this.__write(msg);
+    }
+  }
 //   }
 //   finally {
     sourceMessage.level = level;

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/Library.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/Library.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/Library.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -1,7 +1,7 @@
 /**
   * Library.lzs
   *
-  * @copyright Copyright 2001-2006 Laszlo Systems, Inc.  All Rights Reserved.
+  * @copyright Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.
   *            Use is subject to license terms.
   *
   * @access private
@@ -9,6 +9,7 @@
 
 #include "helpers/LzFont.lzs"
 #include "helpers/LzSelectionManager.lzs"
+#include "helpers/LzDataSelectionManager.lzs"
 #include "helpers/LzCommand.lzs"
 
 if ($as2) {

Copied: openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/LzDataSelectionManager.lzs (from rev 6362, openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/helpers/LzDataSelectionManager.lzs)

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/LzSelectionManager.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/LzSelectionManager.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/helpers/LzSelectionManager.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -270,182 +270,4 @@
 } // End of LzSelectionManager
 
 
-/**
-  * Implements same functionality as a normal selection manager, but without
-  * storing view references, which become invalid as views created by a datapath
-  * that uses lazy replication do. Does this by storing subview numbers.
-  *
-  * @lzxname dataselectionmanager
-  */
 
-class LzDataSelectionManager extends LzSelectionManager {
-
-/** @access private
-  * @modifiers override 
-  */
-static var tagname = 'dataselectionmanager';
-
-/**
-  * Makes the given view selected
-  * @access protected
-  * @param LzView o: The view to be selected
-  */
-function makeSelected ( o ){
-    var so = o.datapath.p;
-    if ( this.manager == null ) this.manager = o.cloneManager; 
-    if ( so.sel ) return; 
-    so.sel = true;
-    this.selected.push( so );
-    o.datapath[ this.sel ]( true );    
-    
-    if ( this.manager == null ){
-        //just one "clone", mark it!
-        this.singleClone = o;
-    }
-}
-
-/**
-  * Unselect the given view
-  * @param LzView o: The view to be unselected
-  */
-function unselect ( o ){
-    if ( this.manager == null ) this.manager = o.cloneManager;//try to get a cloneManager  
-
-    var so = o.datapath.p;
-    so.sel = false;
-    for ( var i = this.selected.length-1 ; i >= 0; i-- ){
-        if ( this.selected[ i ] == so ) {
-            this.selected.splice( i , 1 );
-            break;
-        }
-    }      
-    o.datapath[ this.sel ]( false );
-    
-    if ( o == this.singleClone ) this.singleClone = null;//clear "singleClone"
-}
-
-/**
-  * Selects the range between the datapath that was lastselected and the newly
-  * selected view
-  * @access private
-  * @param LzDataPath s: The datapath that was at top of the selection stack
-  * @param LzView e: The newly selected view
-  */
-function selectRange ( s , e ){
-    if ( this.manager == null ){        
-        this.manager = e.cloneManager;
-        
-        //maybe we've got now clones
-        if ( this.manager == null ){
-        //still no clones?          
-        //so it's nothing to do, just hope so...
-        if ( $debug ){
-            Debug.write( "selectRange failed, no clones" );
-        }
-        return;
-        }
-    }
-    
-    var nodes = this.manager.nodes;
-
-    var st = -1;
-    var en = -1;
-    var i  = 0;
-    var ennode = e.datapath.p;
-    //find the start and end in the sort array of parents
-
-    while ( ( st == -1 || en == -1 ) && i < nodes.length ){
-        if ( nodes[ i ] == s ){
-            st = i;
-        } 
-        if ( nodes[ i ] == ennode ){
-            en = i;
-        } 
-        i++;
-    }
-
-        
-    var dir = st > en ? -1 : 1;
-    
-    this.clearSelection();
-
-    this.lastRange = s;
-
-    //couldn't find -- wierd
-    if ( st == -1 || en == -1 ) return;
-    
-    for ( var i = st; i != en + dir; i += dir ) {
-        var p = nodes[ i ];
-        p.sel = true;
-        this.selected.push( p );
-        this.__LZsetSelected( p, true );
-    }
-}
-
-/**
-  * Returns a list of datapointers, which point to the selected records
-  * @return Array: A list of datapointers
-  */
-function getSelection (){
-    var r = [];
-    for ( var i = 0; i < this.selected.length ; i++ ){
-        r.push( new LzDatapointer( null , {pointer : this.selected[i] }));
-    }
-    return r;    
-}
-
-/**
-  * Unselects everything that is currently selected and clears the selection
-  * list
-  * 
-  */
-function clearSelection ( ){
-    while ( this.selected.length ){
-        var p  = this.selected.pop();
-        p.sel = false;
-        this.__LZsetSelected( p , false );
-    }
-    this.lastRange = null;
-}
-        
-/**
-  * Tests whether the given view is selected
-  * @param LzView o: The view to test for selectedness
-  * @return Boolean: The selectedness of the input object.
-  */
-function isSelected ( o){
-    if ( this.manager == null ) this.manager = o.cloneManager;//try to get a cloneManager
-
-    return o.datapath.p.sel;
-}
-
-/**
-  * sets the selected attribute of the data, if there is a clone, it will
-  * call setselected on the clone
-  * @param LzDataElement p: the node we want to set
-  * @param Boolean val: new value for selected
-  * @access private
-  */
-function __LZsetSelected ( p, val ){
-    if ( this.manager != null ){
-        var cl = this.manager.getCloneForNode( p, true );
-        if ( cl ){
-            cl.datapath[this.sel]( val );
-        } else { // no clone on screen
-            p.sel = val;
-        }
-    } else {//no clones
-        //if caller is selectRange, then "this.manager" won't be "null"
-        //but if caller is clearSelection, "this.manager" could be "null", but then "val" is definitely "false"
-        if ( !val ){
-            if ( this.singleClone != null && this.singleClone.datapath.p == p ){
-                this.singleClone.datapath[this.sel]( false );
-                this.singleClone = null;
-                return;//job is done...
-            }
-        }
-        p.sel = val;//default action
-    }
-}
-
-} // End of LzDataSelectionManager

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/LzUtils.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/LzUtils.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/LzUtils.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -55,13 +55,11 @@
             }
         }
     }
-    ,dectohex: function(c, pad) {
+    ,dectohex: function(c, p) {
         if (typeof c == 'number') {
             // convert from decimal to hex
-            var hD="0123456789ABCDEF";
-            var hex = hD.substr(c&15,1);
-            while(c>15) {c>>=4;hex=hD.substr(c&15,1)+hex;}
-            var pad = pad - hex.length;
+            var hex = c.toString(16);
+            var pad = (p ? p : 0) - hex.length;
             while (pad > 0) {
                 hex = '0' + hex;
                 pad--;

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenu.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenu.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenu.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -57,8 +57,8 @@
     var s = document.getElementById('lzcontextmenu')
     if (! s) {
         s = document.createElement('div');
-        s.setAttribute('id', 'lzcontextmenu');
-        s.setAttribute('style', 'display: none');
+        Lz.__setAttr(s, 'id', 'lzcontextmenu');
+        Lz.__setAttr(s, 'style', 'display: none');
         document.body.appendChild(s);
     }
     if (this.onmenuopen.ready) this.onmenuopen.sendEvent(this);

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -40,15 +40,15 @@
     //Debug.write('Multiline', this, this.multiline, this.owner.multiline);
     if (this.owner && this.owner.password) {
         this.__LzInputDiv = document.createElement('input');
-        this.__LzInputDiv.setAttribute('type', 'password');
+        Lz.__setAttr(this.__LzInputDiv, 'type', 'password');
     } else if (this.owner && this.owner.multiline) {
         this.__LzInputDiv = document.createElement('textarea');
     } else {    
         this.__LzInputDiv = document.createElement('input');
-        this.__LzInputDiv.setAttribute('type', 'text');
+        Lz.__setAttr(this.__LzInputDiv, 'type', 'text');
     }
     if (this.quirks.firefox_autocomplete_bug) {
-        this.__LzInputDiv.setAttribute('autocomplete', 'off');
+        Lz.__setAttr(this.__LzInputDiv, 'autocomplete', 'off');
     }
     this.__LzInputDiv.owner = this;
     if (this.quirks.emulate_flash_font_metrics) {
@@ -61,9 +61,11 @@
     } else {    
         this.__LzInputDiv.className = 'lzinputtext';
     }    
-    if (this.owner) this.__LzInputDiv.setAttribute('name', this.owner.name);
+    if (this.owner) {
+        Lz.__setAttr(this.__LzInputDiv, 'name', this.owner.name);
+    }
     if (t == null) t = '';
-    this.__LzInputDiv.setAttribute('value', t);
+    Lz.__setAttr(this.__LzInputDiv, 'value', t);
     if (this.quirks.fix_clickable) {
         if (this.quirks.fix_ie_clickable) {
             this.__LZinputclickdiv = document.createElement('img');

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/dhtml/LzTextSprite.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -186,7 +186,7 @@
 }
 
 LzTextSprite.prototype.getTextfieldHeight = function () {
-    if (this.fieldHeight != null) return this.fieldHeight
+    if (this._styledirty != true && this.fieldHeight != null) return this.fieldHeight
     if (this.text == null || this.text == '') {
         this.fieldHeight = this.getTextSize('Yq_gy').height;
 //       Debug.debug('getTextfieldHeight: 0');
@@ -299,7 +299,7 @@
             var mdiv = _textsizecache[tagname];
             if (mdiv == null) {
                 mdiv = document.createElement(tagname);
-                mdiv.setAttribute('style', style);
+                Lz.__setAttr(mdiv, 'style', style);
                 document.body.appendChild(mdiv);
                 _textsizecache[tagname] = mdiv;
             }

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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzInputTextSprite.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -335,6 +335,9 @@
     //@event ontext: Sent whenever the text in the field changes.
     //this.owner.ontext.sendEvent(t);
 }
+LzInputTextSprite.prototype.getTextfieldHeight = function ( ){
+    return this.__LZtextclip._height
+}
 
 LzTextSprite.prototype.getText = function ( ){
     return this.__LZtextclip.text;

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoadQueue.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoadQueue.as	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoadQueue.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -97,7 +97,10 @@
         Debug.warn("LzLoadQueue.XMLOnDataHandler load failed from URL %w, no data received.", this.url);
         Debug.warn("Failure to load data in serverless apps may be caused by Flash player security policies. Check your data server crossdomain.xml file");
         this.onload(false);
-        if (this.loader.onerror.ready) this.loader.onerror.sendEvent(this.loader);
+        //Debug.write("this.loader.onerror.ready =", this.loader.onerror.ready);
+        if (this.loader.onerror.ready) {
+            this.loader.onerror.sendEvent(null);
+        }
         // cancel the timeout handler
         LzLoadQueue.unloadRequest(this);
   } else {

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoader.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoader.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzLoader.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -201,7 +201,9 @@
 
     if ( err != null ){
         Debug.error( err );
-        if (this.onerror.ready) this.onerror.sendEvent( data );
+        if (this.onerror.ready) {
+            this.onerror.sendEvent( err );
+        }
         return;
     }
 

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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzMakeLoadSprite.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -193,7 +193,7 @@
     this.owner.__LZvizLoad = true; 
     this.owner.__LZupdateShown();
     this.owner.resourceload({width: this.resourcewidth, height: this.resourceheight, resource: this.resource, skiponload: false});
-    this.owner.reevaluateSize( );	
+    this.owner.reevaluateSize( );   
     //if (this.owner.onload) this.owner.onload.sendEvent( this.loader.mc );
 
     //Debug.write('Sprite.updateAfterLoad', mc, this.resourcewidth, this.resourceheight, this.resource, this.owner.resource, this.owner, this.x);
@@ -205,7 +205,7 @@
   * @access private
   */
 LzMakeLoadSprite.unload = function () {
-    this.loader.unload();
+    this.loader.unload( this.loader.mc );
 }
 
 /**
@@ -263,7 +263,7 @@
     if ('timeoutDel' in this)
          this.timeoutDel.unregisterAll();
  
-    this.loader.unload( );
+    this.loader.unload( this.loader.mc );
 
     // call shadowed destroy()
     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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzSprite.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -820,10 +820,11 @@
 LzSprite.prototype._setButtonSize = function ( axis , bsize ){
     var sc ="_" + ( axis =="width" ? "x" : "y" ) + "scale" ;
     if ( this[ "_setresc" + axis ] && this[ 'hasset' + axis ]){
-        this.__LZbuttonRef[ sc ] = this.__LZmovieClipRef[ "_" + axis ] /
-                            ( this.__LZmovieClipRef[ sc ] / 100 ) ;
+        var resdim = this.__LZmovieClipRef[ "_" + axis ];
+        if (resdim == 0) { resdim = 100; }
+        this.__LZbuttonRef[ sc ] = resdim / ( this.__LZmovieClipRef[ sc ] / 100 ) ;
     } else {
-        this.__LZbuttonRef[ sc ] = ( 100 / this.__LZmovieClipRef[ sc ] )*bsize;
+        this.__LZbuttonRef[ sc ] = ( 100 / this.__LZmovieClipRef[ sc ] ) * bsize;
     }
 }
 
@@ -1542,7 +1543,9 @@
         this.__contextmenu = cmenu;
         cmenu = cmenu.__LZcontextMenu();
     } else {
-        if ($debug) Debug.warn("Passing a Flash ContextMenu to LzView.setContextMenu is deprecated, use LzContextMenu instead");
+      if ($debug) {
+        Debug.info("Passing a Flash ContextMenu to LzView.setContextMenu is deprecated, use LzContextMenu instead");
+      }
     }
 
     var mc = this.getMCRef();
@@ -1557,7 +1560,7 @@
     }
 
     if (mb == null && mc == null) {
-        if ($debug) Debug.warn("LzView.setContextMenu: cannot set menu on view %w, it has no foreground or background movieclip");
+      if ($debug) Debug.warn("LzView.setContextMenu: cannot set menu on view %w, it has no foreground or background movieclip", this.owner);
     }
 }
 

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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/kernel/swf/LzTextSprite.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -40,6 +40,7 @@
 
     //Debug.write('created', textclip, 'in', mc, txtname);
 
+    textclip.cacheAsBitmap = true;
     this.__LZtextclip = textclip;
     // set a pointer back to this view from the TextField object
     textclip.__lzview = this.owner;
@@ -55,20 +56,8 @@
 
 LzTextSprite.prototype = new LzSprite(null);
 
-LzTextSprite.prototype.defaultattrs = {};
-
-LzTextSprite.prototype.defaultattrs.pixellock = true;
-
 LzTextSprite.prototype.colorstring = "#000000"; // black
 
-DeclareEvent(LzTextSprite.prototype, 'onmaxlength' );
-DeclareEvent(LzTextSprite.prototype, 'onpattern' );
-DeclareEvent(LzTextSprite.prototype, 'ontext' );
-DeclareEvent(LzTextSprite.prototype, 'onscroll' );
-DeclareEvent(LzTextSprite.prototype, 'onmaxscroll' );
-DeclareEvent(LzTextSprite.prototype, 'onxscroll' );
-
-
 LzTextSprite.prototype.__initTextProperties = function (args) {
     this.password = args.password  ? true : false;
     var textclip = this.__LZtextclip;
@@ -184,9 +173,6 @@
 
 LzTextSprite.prototype.DEFAULT_SIZE = 8;
 
-LzTextSprite.prototype.defaultattrs.clip = true;
-
-
 /**
   * setResize set behavior of text field width when new text is added.
   * LzTextSprite only (cannot be used with LzInputText).
@@ -218,26 +204,11 @@
     this.__LZtextclip._height = val;
     this._viewsetHeight( val );
 }
-
 LzTextSprite.prototype._viewsetHeight = LzSprite.prototype.setHeight;
 
 
-
 /**
   * @access private
-  */
-/*
-LzTextSprite.prototype.updateMaxLines = function (){
-
-    var newlin = Math.floor( this.height / (  this.font.height -1 ) );
-    if ( newlin != this.maxlines ){
-        this.maxlines = newlin;
-    }
-}
-*/
-
-/**
-  * @access private
   * Set the maximum number of chars a textfield can contain
   */
 LzTextSprite.prototype.setMaxLength = function ( val ){
@@ -283,33 +254,32 @@
 }
 
 LzTextSprite.prototype.getTextfieldHeight = function ( ){
-    return this.__LZtextclip._height
-}
+    if (this.multiline) {
+        return this.__LZtextclip._height
+    } else {
+        var textclip = this.__LZtextclip;
 
+        // Cache current values
+        var tcw = textclip._width;
+        var tch = textclip._height;
+        var tca = textclip.autoSize;
+        var tct = textclip.htmlText;
 
-/**
-  * @access private
-  */
-LzTextSprite.prototype.applyData = function ( d ){
-    if ( null == d ){
-        this.clearText();
-    } else {
-        this.setText( d );
+        textclip.autoSize = true;
+        textclip.htmlText = this.format + "__ypgSAMPLE__" + this.closeformat;
+        var h = textclip._height;
+
+        textclip.autoSize = tca;
+        textclip.htmlText = tct;
+        textclip._width   = tcw;
+        textclip._height  = tch;
     }
+    return h;
 }
 
 /**
   * @access private
   */
-LzTextSprite.prototype.toString = function ( ){
-    return "LzTextSprite: " + this.text;
-}
-
-
-
-/**
-  * @access private
-  */
 LzTextSprite.prototype.setScroll = function ( h ){
     this.__LZtextclip.scroll = h;
 }
@@ -394,8 +364,6 @@
     }
 }
 
-LzTextSprite.prototype.defaultattrs.selectable = false;
-
 /**
   * @access private
   */
@@ -560,58 +528,8 @@
     }
 }
 
-/**
-  * @access private
-  */
-LzTextSprite.prototype.getTextWidth.dependencies = function ( who , self){
-      return [ self , "text" ];
-}
 
 /**
-  * @access private
-  */
-
-LzTextSprite.prototype.getTextHeight.dependencies = function ( who , self){
-      return [ self , "text" ];
-}
-
-/**
-  * @access private
-  */
-LzTextSprite.prototype.getMaxScroll.dependencies = function ( who , self){
-      return [ self , "maxscroll" ];
-}
-
-
-LzTextSprite.prototype.escapeChars = { };
-LzTextSprite.prototype.escapeChars[ '>' ] = '&gt;';
-LzTextSprite.prototype.escapeChars[ '<' ] = '&lt;';
-
-/**
-  * Returns an escaped version of the string if called with no args. If called
-  * with a string argument, returns an escaped version of that string (escaped
-  * here means markup-escaped, hot http escaped.)
-  * @param String ts: text string to escape
-  */
-LzTextSprite.prototype.escapeText = function( ts ){
-
-    var t = ts == null ? this.text : ts;
-
-    var i;
-    for ( var ec in this.escapeChars ){
-
-        while( t.indexOf( ec ) > -1 ){
-            i = t.indexOf( ec );
-            t = t.substring( 0 , i ) + this.escapeChars[ ec ]  +
-                t.substring( i+1 );
-        }
-    }
-
-    return t;
-
-}
-
-/**
   * Sets the selectability (with Ibeam cursor) of the text field
   * @param Boolean isSel: true if the text may be selected by the user
   */
@@ -935,8 +853,3 @@
     var siz = Selection.getEndIndex() - Selection.getBeginIndex();
     return siz;
 }
-
-
-LzTextSprite.prototype.toString = function () {
-    return 'LzTextSprite for ' + this.owner;
-}

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/services/LzTrack.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/services/LzTrack.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/services/LzTrack.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -338,7 +338,14 @@
     for (var i in this.__LZactivegroups) {
         var thisgroup = this.__LZactivegroups[i];
         //Debug.info('i', i, thisgroup, thisgroup.__LZlasthit, thisgroup.__LZlasthit.onmousetrackup);
-        if (thisgroup && thisgroup.__LZlasthit.onmousetrackup && thisgroup.__LZlasthit.onmousetrackup.ready) thisgroup.__LZlasthit.onmousetrackup.sendEvent(this.__LZlasthit);
+        if (thisgroup && thisgroup.__LZlasthit.onmousetrackup && thisgroup.__LZlasthit.onmousetrackup.ready) {
+            if (this['__LZlastmouseup'] == thisgroup.__LZlasthit) {
+                this.__LZlastmouseup = null;
+            } else {
+                thisgroup.__LZlasthit.onmousetrackup.sendEvent(this.__LZlasthit);
+                this.__LZlastmouseup = thisgroup.__LZlasthit;
+            }
+        }
     }
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/dhtml/LzHistory.js
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/dhtml/LzHistory.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/dhtml/LzHistory.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -36,7 +36,7 @@
   */
 LzHistory.setHistory = function(s) {
     //Debug.write('setHistory', s);
-    Lz._setHash(s);
+    Lz.history.set(s);
     this.__lzloading = true;
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/swf/LzHistory.as
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/swf/LzHistory.as	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/services/platform/swf/LzHistory.as	2007-09-14 21:45:55 UTC (rev 6483)
@@ -37,7 +37,7 @@
 LzHistory.__setHistory = function(s) {
     //Debug.write('__setHistory', s);
     LzBrowser._jsreset();
-    LzBrowser.callJS('Lz._setHash("' + s + '")', false);
+    LzBrowser.callJS('Lz.history.set("' + s + '")', false);
     this.__lzloading = true;
 }
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LaszloView.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -163,6 +163,7 @@
 DeclareEvent(prototype, 'onunstretchedheight' );
 DeclareEvent(prototype, 'onunstretchedwidth' );
 DeclareEvent(prototype, 'onvisible' );
+/** @access private */
 DeclareEvent(prototype, 'onvisibility' );
 
 /** event for changes to view's <attribute>width</attribute> property */
@@ -342,6 +343,7 @@
 /** @access private */
 setters.alpha = "setOpacity";
 setters.visible = "setVisible"
+/** @access private */
 setters.visibility = "setVisibility"
 
 /**
@@ -512,6 +514,7 @@
   * @type String
   * @lzxtype string
   * @lzxdefault "collapse"
+  * @access private
   */
 var visibility = "collapse";
 
@@ -855,7 +858,7 @@
 /** @access private */
 function searchimmediateparents ( prop ){
     if ( $debug ){
-        Debug.warn( "LzView.searchimmediateparents is deprecated. Use LzNode.searchParents instead.");
+      Debug.deprecated(this, arguments.callee, this.searchParents);
     }
 
     return this.searchParents( prop );
@@ -1054,8 +1057,7 @@
 /** @access private */
 function deleteView( recursiveCall ){
     if ( $debug ){
-        Debug.warn( 'LzView.deleteView is deprecated.' +
-                    ' Use LzView.destroy instead' );
+      Debug.deprecated(this, arguments.callee, this.destroy);
     }
     this.destroy();
 }
@@ -1081,7 +1083,9 @@
   * This method sets the <attribute>visible</attribute> attribute of the view
   * and also disables or re-enables any click region associated with the view.
   * 
-  * @param Boolean amVisible: boolean for visibility of view
+  * @param Boolean|Null amVisible: Controls the visibility of a view.
+  * `true` makes the view visible, `false` makes the view hidden,
+  * `null` will make the view visible only if it has a data binding.
   */
 function setVisible( amVisible ) {
     if (this._visible == amVisible) return;
@@ -1091,17 +1095,17 @@
     if (amVisible) {
         var v = "visible";
     } else if (amVisible == null) {
-        var v = "collapse";
         if ($debug) {
-            Debug.warn("setVisible(null) is deprecated, use setVisibility('collapse') instead");
+          Debug.info("%w.%s(%w) is deprecated.  Perhaps you meant %w.%s(%s)?  If not, use %w.%s('collapse').",
+                     this, arguments.callee, amVisible, this, arguments.callee, false, this, this.setVisibility);
         }
+        var v = "collapse";
     } else {
         var v = "hidden";
     }
     this.visibility = v;
-    // 
+
     if (this.onvisibility.ready) this.onvisibility.sendEvent( this.visibility );
-
     this.__LZupdateShown();
 }
 
@@ -1116,17 +1120,19 @@
   * a datapath and there are no matching data nodes in its dataset.
   *
   * @param String amVisible: visibility of view
+  * @access private
   */
 function setVisibility( amVisible ) {
     if (this.visibility == amVisible) return;
     this.visibility = amVisible;
     if ($debug) {
         if (! (amVisible == "visible" || amVisible == "hidden" || amVisible == "collapse")) {
-            Debug.warn("setVisibility called with unknown arg,", amVisible, " use 'visible','hidden',or 'collapse'");
+          Debug.error("%w.%s called with unknown arg '%s' use 'visible', 'hidden', or 'collapse'.",
+                      this, arguments.callee, amVisible);
         }
     }
+    if (this.onvisibility.ready) this.onvisibility.sendEvent( amVisible );
     this.__LZupdateShown();
-    if (this.onvisibility.ready) this.onvisibility.sendEvent( amVisible );
 }
     
 /**
@@ -2393,8 +2399,8 @@
 function getPlayPerc ( ){
     if ( $debug ){
         if ( !this.__LZdidPPwarn ){
-            Debug.warn( 'LzView.getPlayPerc is deprecated. ' +
-                        'Use frame/totalframes attributes instead.' );
+          Debug.info("%w.%s is deprecated.  Use frame/totalframes attributes instead.",
+                     this, arguments.callee);
         }
         this.__LZdidPPwarn = true;
     }

Modified: openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/lfc/views/LzText.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -84,6 +84,8 @@
 DeclareEvent(prototype, 'onpattern');
 DeclareEvent(prototype, 'onscroll');
 DeclareEvent(prototype, 'onmaxscroll');
+DeclareEvent(prototype, 'onhscroll');
+DeclareEvent(prototype, 'onmaxhscroll');
 
 /**
   * @access private
@@ -214,7 +216,7 @@
         if (this.multiline) {
             args.width = this.parent.width;
         } else {
-            // if there's text content, measure it's width
+            // if there's text content, measure its width
             if (this.text != null && this.text != '' && this.text.length > 0) {
                 args.width = this.getTextWidth();
             } else {
@@ -656,10 +658,10 @@
   * setText sets the text of the field to display
   * @param String t: the string to which to set the text
   */
-function setText ( t ){
+function setText ( t, force ){
     // force to a string
     t += '';
-    if (t == this.text) return;
+    if (force != true && t == this.text) return;
     if (this.visible) this.sprite.setVisible(this.visible);
     this.sprite.setText(t);
     this.text =  t;
@@ -794,7 +796,7 @@
     this.sprite.setFontName(fname);
     this.fontname = fname;
     // force recompute of height if needed
-    this.setText( this.getText());
+    this.setText( this.getText(), true);
 }
 
 /**
@@ -804,7 +806,7 @@
     this.sprite.setFontSize(fsize);
     this.fontsize = fsize;
     // force recompute of height if needed
-    this.setText( this.getText() );
+    this.setText( this.getText(), true);
 }
 
 /**

Modified: openlaszlo/branches/legals/WEB-INF/lps/misc/lzx-autoincludes.properties
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/misc/lzx-autoincludes.properties	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/misc/lzx-autoincludes.properties	2007-09-14 21:45:55 UTC (rev 6483)
@@ -128,4 +128,3 @@
 
 lazyreplicator: utils/replicator/lazyreplicator.lzx
 replicator: utils/replicator/replicator.lzx
-replicatorselectionmanager: utils/replicator/replicatorselectionmanager.lzx

Modified: openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/schema/lzx.rnc	2007-09-14 21:45:55 UTC (rev 6483)
@@ -645,6 +645,11 @@
   [lza:since="1.1"
    lza:defaultValue="false"]
   attribute request {boolean}? &
+  ## If true, every change to the dataset source or query params will
+  ## cause a new request to be made automatically
+  [lza:since="4.1"
+   lza:defaultValue="false"]
+  attribute autorequest {boolean}? &
   ## If true, the client should ensure that each request is made,
   ## rather than just making and reporting the last request.
   [lza:since="1.1"

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cache/Cache.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cache/Cache.java	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/cache/Cache.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -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 *********************************************************/
 
@@ -997,9 +997,9 @@
         { 
             mLock = new ReentrantLock();
 
-            FileInputStream in = null;
+            InputStream in = null;
             try {
-                in = new FileInputStream(f);
+                in = new BufferedInputStream(new FileInputStream(f));
                 ObjectInputStream istr = new ObjectInputStream(in);
                 mInfo = (CachedInfo)istr.readObject();
         // after reading the object, call our override routine

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/NodeModel.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -483,6 +483,20 @@
                          attrs, events, references, paths, styles);
         }
 
+        // Add file/line information if debugging
+        if (env.getBooleanProperty(env.DEBUG_PROPERTY)) {
+          // File/line stored separately for string sharing
+          String name = "_dbg_filename";
+          String filename = Parser.getSourceMessagePathname(element);
+          CompiledAttribute cattr =
+            compileAttribute(element, name, filename, ViewSchema.STRING_TYPE, WHEN_IMMEDIATELY);
+          addAttribute(cattr, name, attrs, events, references, paths, styles);
+          name = "_dbg_lineno";
+          Integer lineno = Parser.getSourceLocation(element, Parser.LINENO);
+          cattr = compileAttribute(element, name, lineno.toString(), ViewSchema.NUMBER_TYPE, WHEN_IMMEDIATELY);
+          addAttribute(cattr, name, attrs, events, references, paths, styles);
+        }
+
         ClassModel classModel = getClassModel();
         if (classModel == null) {
           throw new CompilationError("Could not find class definition for tag `" + className + "`", element);
@@ -693,7 +707,10 @@
                       ComparisonMap references, ComparisonMap paths,
                       ComparisonMap styles) {
         if (cattr.type == cattr.ATTRIBUTE) {
-            if (attrs.containsKey(name, caseSensitive)) {
+            // Ignore warnings for 'validate'
+            // FIXME [2007-08-31 pbr]: LPP-4620.
+            if (attrs.containsKey(name, caseSensitive) && 
+                !"validate".equalsIgnoreCase(name)) {
                 env.warn(
 /* (non-Javadoc)
  * @i18n.test

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewCompiler.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewCompiler.java	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/compiler/ViewCompiler.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -154,6 +154,15 @@
      */
     void compileXML(Element element, FontInfo fontInfo)
     {
+        // TODO: [2007-09-03 ptw] (LPP-4634) You should not be able to
+        // get here.  This appears to happen when a binary file has
+        // already included a sub-library and that same sub-library is
+        // included by a source file.  Since the include is already
+        // loaded, it is not expanded in expandIncludes, but because
+        // ViewCompiler.isElement returns true for everything, we end up
+        // here.  For now, just don't do anything.
+        if ("include".equals(element.getName())) return;
+
         // TODO: [12-27-2002 ows] use the log4j API instead of this property
         boolean tracexml = mEnv.getBooleanProperty("trace.xml");
         if (tracexml) {

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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/CodeGenerator.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -831,6 +831,7 @@
           assert c.length == 3;
           p.add(c[0]);
           SimpleNode funexpr = new ASTFunctionExpression(0);
+          funexpr.setBeginLocation(n.filename, n.beginLine, n.beginColumn);
           funexpr.setChildren(c);
           p.add(funexpr);
         } else if (n instanceof ASTVariableStatement) {
@@ -1833,6 +1834,31 @@
     return false;
   }
 
+  private static SimpleNode parseFragment(String code) {
+    if (code.equals("\"\"") || code == null) {
+        code = "";
+    }
+    code =
+      "{" +
+      "\n#pragma 'warnUndefinedReferences=false'\n" +
+      "\n#file CodeGenerator.parseFragment\n#line 0\n" +
+      code +
+      "}";
+    // Extract the statement list from the program
+    try {
+      return (new Compiler.Parser()).parse(code).get(0);
+    } catch (ParseException e) {
+      System.err.println("while compiling " + code);
+      throw e;
+    }
+  }
+
+  // TODO: [2007-08-20 ptw] Replace with Java 1.5 UUID
+  private Random rand = new Random();
+  private Integer UUID() {
+    return new Integer(rand.nextInt(Integer.MAX_VALUE));
+  }
+
   public boolean visitCallExpression(SimpleNode node, boolean isReferenced, SimpleNode[] children) {
     SimpleNode fnexpr = children[0];
     SimpleNode[] args = children[1].getChildren();
@@ -1926,70 +1952,99 @@
     // them.
     // FIXME: [2002-12-03 ptw] This substitution is not correct
     // because it does not verify that the method being inlined is
-    // actually ViewsystemNode.setAttribute.
-    // TODO: [2004-03-29 ptw] Enable this optimization for swf 7 by
-    // allocating some temp registers if it is worth it
-    if (fnexpr instanceof ASTPropertyIdentifierReference &&
-        "setAttribute".equals(((ASTIdentifier)fnexpr.get(1)).getName()) &&
-        arglen == 2 &&
-        (! options.getBoolean(Compiler.FLASH_COMPILER_COMPATABILITY)) &&
-        (! options.getBoolean(Compiler.GENERATE_FUNCTION_2))) {
-      Object[] onprop = new Instruction[] 
-        {Instructions.PUSH.make("on"),
-         Instructions.PUSH.make(Values.Register(1)),
-         Instructions.ADD};
-      // Optimize literal property name
-      // TODO: [2002-12-03 ptw] Should check for constant expression
-      if (args[0] instanceof ASTLiteral) {
-        Object v = translateLiteralNode(args[0]);
-        if (v instanceof String) {
-          onprop = new Instruction[]
-            {Instructions.PUSH.make("on" + v)};
+    // actually LzNode.setAttribute.
+    if (
+      // Here this means 'compiling the lfc'
+      options.getBoolean(Compiler.FLASH_COMPILER_COMPATABILITY) &&
+      (! options.getBoolean("passThrough")) &&
+      (fnexpr instanceof ASTPropertyIdentifierReference)) {
+      SimpleNode[] fnchildren = fnexpr.getChildren();
+      String name = ((ASTIdentifier)fnchildren[1]).getName();
+      // We can't expand this if an expression value is expected,
+      // since we don't have 'let'
+      if (name.equals("setAttribute") && (! isReferenced)) {
+        SimpleNode scope = fnchildren[0];
+        SimpleNode property = args[0];
+        SimpleNode value = args[1];
+        List newBody = new ArrayList();
+        String thisvar = "$lzsc$" + UUID().toString();
+        String propvar = "$lzsc$" + UUID().toString();
+        String valvar = "$lzsc$" + UUID().toString();
+        String changedvar = "$lzsc$" + UUID().toString();
+        String svar = "$lzsc$" + UUID().toString();
+        String evtvar = "$lzsc$" + UUID().toString();
+        String decls = "";
+        Compiler.ParseTreePrinter ptp = new Compiler.ParseTreePrinter();
+        if (scope instanceof ASTIdentifier || scope instanceof ASTThisReference) {
+          thisvar = ptp.visit(scope);
+        } else {
+          decls += "var " + thisvar + " = " + ptp.visit(scope) + ";";
         }
+        if (property instanceof ASTLiteral || property instanceof ASTIdentifier) {
+          propvar = ptp.visit(property);
+          if (property instanceof ASTLiteral) {
+            assert propvar.startsWith("\"") || propvar.startsWith("'");
+            evtvar = propvar.substring(0,1) + "on" + propvar.substring(1);
+          }
+        } else {
+          decls += "var " + propvar + " = " + ptp.visit(property) + ";";
+        }
+        if (value instanceof ASTLiteral || value instanceof ASTIdentifier) {
+          valvar = ptp.visit(value);
+        } else {
+          decls += "var " + valvar + " = " + ptp.visit(value) + ";";
+        }
+        if (arglen > 2) {
+          SimpleNode ifchanged = args[2];
+          if (ifchanged instanceof ASTLiteral || ifchanged instanceof ASTIdentifier) {
+            changedvar = ptp.visit(ifchanged);
+          } else {
+            decls += "var " + changedvar + " = " + ptp.visit(ifchanged) + ";";
+          }
+        }
+        newBody.add(parseFragment(decls));
+        String fragment = "if (! (" + thisvar + ".__LZdeleted " +
+            ((arglen > 2) ? ("|| (" + changedvar + " && (" + thisvar + "[" + propvar + "] == " + valvar + "))") : "") +
+            ")) {" +
+            "var " + svar + " = " + thisvar + ".setters;" +
+            "if (" + svar + " && (" + propvar + " in " + svar + ")) {" +
+            "    " + thisvar + "[" + svar + "[" + propvar + "]](" + valvar + ");" +
+            "} else {" +
+            "    if ($debug) {" +
+            "        if (" + svar + " == null) {" +
+            "            Debug.warn('null setters on', " + thisvar + ", " + propvar + ", " + valvar + ");" +
+            "        }" +
+            "    }" +
+            "    " + thisvar + "[ " + propvar + " ] = " + valvar + ";" +
+          ((property instanceof ASTLiteral) ? "" : ("    var " + evtvar + " = (\"on\" + " + propvar + ");")) +
+            "    if (" + evtvar + " in " + thisvar + ") {" +
+            "        if (" + thisvar + "[" + evtvar + "].ready) {" + thisvar + "[ " + evtvar + " ].sendEvent( " + valvar + " ); }" +
+            "    }" +
+          "}}";
+        newBody.add(parseFragment(fragment));
+        SimpleNode newStmts = new ASTStatementList(0);
+        newStmts.setChildren((SimpleNode[])newBody.toArray(new SimpleNode[0]));
+        visitStatement(newStmts);
+        return true;
       }
-      // exprs are evaluated first, in proper order, and
-      // before any registers are set (as they might be
-      // clobbered by expression evaluation).
-      List code = new ArrayList(Arrays.asList(new Object[] {fnexpr.get(0), // : obj
-                                              Instructions.DUP, // : obj, obj
-                                              args[0],   // : obj, obj, prop
-                                              args[1],   // : obj, obj, prop, val
-                                              Instructions.SetRegister.make(3), // r3 = val
-                                              Instructions.POP, // : obj, obj, prop
-                                              Instructions.SetRegister.make(1), // r1 = prop
-                                              Instructions.SWAP, // : obj, prop, obj
-                                              Instructions.PUSH.make("setters"), // : obj, prop, obj, setters
-                                              Instructions.GetMember, // : obj, prop, obj.setters
-                                              Instructions.SWAP, // : obj, obj.setters, prop
-                                              Instructions.GetMember, // : obj, obj.setters[prop]
-                                              Instructions.SetRegister.make(2), // r2 = obj.setters[prop]
-                                              Instructions.PUSH.make(Values.Null), // : obj, obj.setters[prop], null
-                                              Instructions.EQUALS, // : obj, null == obj.setters[prop]
-                                              Instructions.BranchIfTrue.make(0), // : obj
-                                              Instructions.SetRegister.make(0), // r0 = obj
-                                              Instructions.POP, // :
-                                              Instructions.PUSH.make(Values.Register(3)), // : val
-                                              Instructions.PUSH.make(1), // : val, 1
-                                              Instructions.PUSH.make(Values.Register(0)), // : val, 1, obj
-                                              Instructions.PUSH.make(Values.Register(2)), // : val, 1, obj, setter
-                                              Instructions.BRANCH.make(1),
-                                              new Integer(0), // : obj
-                                              Instructions.SetRegister.make(0), // r0 = obj
-                                              Instructions.PUSH.make(Values.Register(1)), // : obj, prop
-                                              Instructions.PUSH.make(Values.Register(3)), // : obj, prop, val
-                                              Instructions.SetMember, // :
-                                              Instructions.PUSH.make(Values.Register(3)), // : val
-                                              Instructions.PUSH.make(1), // : val, 1
-                                              Instructions.PUSH.make(Values.Register(0))}));
-      code.addAll(Arrays.asList(onprop));
-      code.addAll(Arrays.asList((new Object[] {Instructions.GetMember, // : val, 1, obj["on"+prop]
-                                Instructions.PUSH.make("sendEvent"), // : val, 1, obj["on"+prop], "sendEvent"
-                                new Integer(1),
-                                Instructions.CallMethod, // : result
-                                Instructions.POP}))); // :
-      translateControlStructure(node, code.toArray());
-      return true;        // no return value
     }
+
+    // Note current call-site in a function context and backtracing
+    if ((options.getBoolean(Compiler.DEBUG_BACKTRACE) && (node.beginLine != 0)) &&
+        (context.findFunctionContext() != null)) {
+      Map registers = (Map)context.get(TranslationContext.REGISTERS);
+      // We know arguments register will exist if we are doing
+      // bactraces because it will be referenced in the function
+      // prefix.
+      if (registers != null && registers.containsKey("arguments")) {
+        collector.push(Values.Register(((Instructions.Register)registers.get("arguments")).regno));
+        collector.push("lineno");
+        collector.push(node.beginLine);
+        collector.emit(Instructions.SetMember);
+      }
+    }
+
+    // Okay, it is not going to be transformed.  Just do it!
     visitCallParameters(node, isReferenced, args);
     boolean isref = translateReferenceForCall(fnexpr, true, node);
     if (isref) {
@@ -2255,6 +2310,7 @@
     return true;
   }
 
+  // useName => declaration not expression
   void translateFunction(SimpleNode node, boolean useName, SimpleNode[] children) {
     // label for profiling return
     String label = newLabel(node);
@@ -2291,6 +2347,7 @@
   }
 
   // Internal helper function for above
+  // useName => declaration not expression
   SimpleNode translateFunctionInternal(SimpleNode node, boolean useName, SimpleNode[] children) {
     // ast can be any of:
     //   FunctionDefinition(name, args, body)
@@ -2719,6 +2776,30 @@
       collector.push("name");
       collector.push(userFunctionName);
       collector.emit(Instructions.SetMember);
+      if (options.getBoolean(Compiler.DEBUG_BACKTRACE)) {
+        // TODO: [2007-09-04 ptw] Come up with a better way to
+        // distinguish LFC from user stack frames.  See
+        // lfc/debugger/LzBactrace
+        String fn = (options.getBoolean(Compiler.FLASH_COMPILER_COMPATABILITY) ? "lfc/" : "") + filename;
+        if (functionName != null) {
+          collector.push(functionName);
+          collector.emit(Instructions.GetVariable);
+        } else {
+          collector.emit(Instructions.DUP);
+        }
+        collector.push("_dbg_filename");
+        collector.push(fn);
+        collector.emit(Instructions.SetMember);
+        if (functionName != null) {
+          collector.push(functionName);
+          collector.emit(Instructions.GetVariable);
+        } else {
+          collector.emit(Instructions.DUP);
+        }
+        collector.push("_dbg_lineno");
+        collector.push(lineno);
+        collector.emit(Instructions.SetMember);
+      }
     }
     if (options.getBoolean(Compiler.CONSTRAINT_FUNCTION)) {
 //       assert (functionName != null);

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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/Compiler.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -1035,6 +1035,9 @@
       // TODO: [2005-11-17 ptw] Not quite right, but javacc doesn't
       // tell us the range of its Ops
       for (int i = 0; i < 256; i++) { on.add("<" + Integer.toString(i) + ">"); }
+      on.set(Ops.LPAREN, "(");
+      on.set(Ops.LBRACKET, "[");
+      on.set(Ops.DOT, ".");
       on.set(Ops.ASSIGN, "=");
       on.set(Ops.COMMA, ",");
       on.set(Ops.GT, ">");
@@ -1088,22 +1091,14 @@
 
     public String visitAssignmentExpression(SimpleNode node, String[] children) {
       int thisPrec = prec(((ASTOperator)node.get(1)).getOperator(), false);
-      for (int i = 1; i < children.length; i += 2) {
-        children[i] = maybeAddParens(thisPrec, node.get(i), children[i]);
-      }
+      assert children.length == 3;
+      children[2] = maybeAddParens(thisPrec, node.get(2), children[2], true);
       return children[0] + SPACE + children[1] + delimit(children [2], false);
     }
     public String visitCallExpression(SimpleNode node, String[] children) {
-      SimpleNode c = node.get(0);
-      // Only needed because our parser is broken
-      if (c instanceof ASTFunctionExpression) {
-        return "(" + children[0] + ")(" + children[1] + ")";
-      } else {
-        // CallExpression is prec 0, even though it has no operator
-        // but associativity means you don't need parens
-//         children[0] = maybeAddParens(0, c, children[0])
-        return children[0] + "(" + children[1] + ")";
-      }
+      int thisPrec = prec(Ops.LPAREN, true);
+      children[0] = maybeAddParens(thisPrec, node.get(0), children[0], true);
+      return children[0] + "(" + children[1] + ")";
     }
     public String visitSuperCallExpression(SimpleNode node, String[] children) {
       // Same as above
@@ -1111,7 +1106,7 @@
     }
     public String visitConditionalExpression(SimpleNode node, String[] children) {
       int thisPrec = prec(Ops.COLON, false);
-      for (int i = 1; i < children.length; i++) {
+      for (int i = 0; i < children.length; i++) {
         children[i] = maybeAddParens(thisPrec, node.get(i), children[i]);
       }
       return children[0] + CONDITIONAL + children[1] + ALTERNATIVE + children[2];
@@ -1218,7 +1213,7 @@
     public int prec(int op, boolean unary) {
       String n = OperatorNames[op];
       String classes[][] = {
-        {"()", "[]", ".", "new"},
+        {"(", "[", ".", "new"},
         {"!", "~", "-", "+", "--", "++", "typeof", "void", "delete"},
         {"*", "/", "%"},
         {"+", "-"},
@@ -1240,6 +1235,10 @@
     }
 
     public String visitArrayLiteral(SimpleNode node, String[] children) {
+      int thisPrec = prec(Ops.COMMA, false);
+      for (int i = 0; i < children.length; i++) {
+        children[i] = maybeAddParens(thisPrec, node.get(i), children[i], false);
+      }
       return "[" + join(COMMA, children) + "]";
     }
 
@@ -1247,6 +1246,12 @@
       return maybeAddParens(parentPrec, node, nodeRep, false);
     }
 
+    // Set assoc to true if the sub-expression appears in a place
+    // where operator associativity implies the parens, e.g. on the
+    // left operand of a binary operator that is left-to-right
+    // associative.  (It is always safe to leave it false, you will
+    // just end up with extra parens where you don't need them, which
+    // will impact compression but not correctness.)
     public String maybeAddParens(int parentPrec, SimpleNode node, String nodeRep, boolean assoc) {
       int thisPrec = Integer.MAX_VALUE;
       if (node instanceof ASTBinaryExpressionSequence ||
@@ -1265,13 +1270,31 @@
       } else if (node instanceof ASTNewExpression) {
         thisPrec = prec(Ops.NEW, true);
       } else if (node instanceof ASTCallExpression ||
-                 node instanceof ASTPropertyValueReference ||
-                 node instanceof ASTPropertyIdentifierReference) {
-        // These have prec of 0 even though they don't have ops
-        thisPrec = 0;
+                 node instanceof ASTSuperCallExpression) {
+        thisPrec = prec(Ops.LPAREN, true);
+      } else if (node instanceof ASTPropertyValueReference) {
+        thisPrec = prec(Ops.LBRACKET, true);
+      } else if (node instanceof ASTPropertyIdentifierReference) {
+        thisPrec = prec(Ops.DOT, true);
       } else if (node instanceof ASTExpressionList) {
         thisPrec = prec(Ops.COMMA, false);
+      } else if (// Our compiler is broken -- if one of these shows up
+                 // in an expression, it had to have been in an
+                 // expression list initially
+                 node instanceof ASTFunctionExpression ||
+                 node instanceof ASTFunctionDeclaration) {
+        thisPrec = prec(Ops.ASSIGN, false);
+      } else if (node instanceof ASTObjectLiteral ||
+                 node instanceof ASTArrayLiteral ||
+                 node instanceof ASTIdentifier ||
+                 node instanceof ASTThisReference ||
+                 node instanceof ASTLiteral) {
+        ;
+      } else {
+        System.err.println("No prec for " + node + " in " + nodeString(node));
+        (new CompilerException()).printStackTrace();
       }
+      
       if (assoc ? (thisPrec < parentPrec) : (thisPrec <= parentPrec)) {
         nodeRep = "(" + nodeRep + ")";
       }
@@ -1383,15 +1406,19 @@
     public String visitObjectLiteral(SimpleNode node, String[] children) {
       StringBuffer s = new StringBuffer("{");
       int len = children.length - 1;
+      int thisPrec = prec(Ops.COMMA, false);
       for (int i = 0; i < len; i++) {
-        s.append(children[i]);
         if (i % 2 != 0) {
+          children[i] = maybeAddParens(thisPrec, node.get(i), children[i], false);
+          s.append(children[i]);
           s.append(COMMA);
         } else {
+          s.append(children[i]);
           s.append(COLON);
         }
       }
       if (len > 0) {
+        children[len] = maybeAddParens(thisPrec, node.get(len), children[len], false);
         s.append(children[len]);
       }
       s.append("}");
@@ -1405,6 +1432,9 @@
 
     public String visitVariableDeclaration(SimpleNode node, String[] children) {
       if (children.length > 1) {
+        int thisPrec = prec(Ops.ASSIGN, false);
+        assert children.length == 2;
+        children[1] = maybeAddParens(thisPrec, node.get(1), children[1], true);
         return "var " + children[0] + ASSIGN + children[1];
       } else {
         return "var " + 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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptCompressor.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -37,7 +37,7 @@
 
   // Don't transform super calls for compression
   public SimpleNode visitSuperCallExpression(SimpleNode node, boolean isReferenced, SimpleNode[] children) {
-    assert children.length == 2;
+    assert children.length == 3;
     for (int i = 0, len = children.length; i < len; i++) {
       SimpleNode child = children[i];
       children[i] = visitExpression(child, isReferenced);

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-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/sc/JavascriptGenerator.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -124,7 +124,10 @@
     AssignOpTable.put(ParserConstants.RUNSIGNEDSHIFTASSIGN, ">>>");
   };
 
-  static SimpleNode parseFragment(String code) {
+  private static SimpleNode parseFragment(String code) {
+    if (code.equals("\"\"") || code == null) {
+        code = "";
+    }
     code =
       "{" +
       "\n#pragma 'warnUndefinedReferences=false'\n" +
@@ -132,7 +135,12 @@
       code +
       "}";
     // Extract the statement list from the program
-    return (new Compiler.Parser()).parse(code).get(0);
+    try {
+      return (new Compiler.Parser()).parse(code).get(0);
+    } catch (ParseException e) {
+      System.err.println("while compiling " + code);
+      throw e;
+    }
   }
 
   // Code to meter a function call.  If name is set, uses that,
@@ -662,6 +670,7 @@
           assert c.length == 3;
           p.add(c[0]);
           SimpleNode funexpr = new ASTFunctionExpression(0);
+          funexpr.setBeginLocation(n.filename, n.beginLine, n.beginColumn);
           funexpr.setChildren(c);
           p.add(funexpr);
         } else if (n instanceof ASTVariableStatement) {
@@ -1411,16 +1420,112 @@
     return node;
   }
 
+  // TODO: [2007-08-20 ptw] Replace with Java 1.5 UUID
+  private Random rand = new Random();
+  private Integer UUID() {
+    return new Integer(rand.nextInt(Integer.MAX_VALUE));
+  }
+
   // Could do inline expansions here, like setAttribute
   public SimpleNode visitCallExpression(SimpleNode node, boolean isReferenced, SimpleNode[] children) {
     SimpleNode fnexpr = children[0];
     SimpleNode[] args = children[1].getChildren();
     int arglen = args.length;
+
+    // TODO: [2002-12-03 ptw] There should be a more general
+    // mechanism for matching patterns against AST's and replacing
+    // them.
+    // FIXME: [2002-12-03 ptw] This substitution is not correct
+    // because it does not verify that the method being inlined is
+    // actually LzNode.setAttribute.
+    if (
+      // Here this means 'compiling the lfc'
+      options.getBoolean(Compiler.FLASH_COMPILER_COMPATABILITY) &&
+      (! options.getBoolean("passThrough")) &&
+      (fnexpr instanceof ASTPropertyIdentifierReference)) {
+      SimpleNode[] fnchildren = fnexpr.getChildren();
+      String name = ((ASTIdentifier)fnchildren[1]).getName();
+      // We can't expand this if an expression value is expected,
+      // since we don't have 'let'
+      if (name.equals("setAttribute") && (! isReferenced)) {
+        SimpleNode scope = fnchildren[0];
+        SimpleNode property = args[0];
+        SimpleNode value = args[1];
+        List newBody = new ArrayList();
+        String thisvar = "$lzsc$" + UUID().toString();
+        String propvar = "$lzsc$" + UUID().toString();
+        String valvar = "$lzsc$" + UUID().toString();
+        String changedvar = "$lzsc$" + UUID().toString();
+        String svar = "$lzsc$" + UUID().toString();
+        String evtvar = "$lzsc$" + UUID().toString();
+        String decls = "";
+        Compiler.ParseTreePrinter ptp = new Compiler.ParseTreePrinter();
+        if (scope instanceof ASTIdentifier || scope instanceof ASTThisReference) {
+          thisvar = ptp.visit(scope);
+        } else {
+          decls += "var " + thisvar + " = " + ptp.visit(scope) + ";";
+        }
+        if (property instanceof ASTLiteral || property instanceof ASTIdentifier) {
+          propvar = ptp.visit(property);
+          if (property instanceof ASTLiteral) {
+            assert propvar.startsWith("\"") || propvar.startsWith("'");
+            evtvar = propvar.substring(0,1) + "on" + propvar.substring(1);
+          }
+        } else {
+          decls += "var " + propvar + " = " + ptp.visit(property) + ";";
+        }
+        if (value instanceof ASTLiteral || value instanceof ASTIdentifier) {
+          valvar = ptp.visit(value);
+        } else {
+          decls += "var " + valvar + " = " + ptp.visit(value) + ";";
+        }
+        if (arglen > 2) {
+          SimpleNode ifchanged = args[2];
+          if (ifchanged instanceof ASTLiteral || ifchanged instanceof ASTIdentifier) {
+            changedvar = ptp.visit(ifchanged);
+          } else {
+            decls += "var " + changedvar + " = " + ptp.visit(ifchanged) + ";";
+          }
+        }
+        newBody.add(parseFragment(decls));
+        String fragment = "if (! (" + thisvar + ".__LZdeleted " +
+            ((arglen > 2) ? ("|| (" + changedvar + " && (" + thisvar + "[" + propvar + "] == " + valvar + "))") : "") +
+            ")) {" +
+            "var " + svar + " = " + thisvar + ".setters;" +
+            "if (" + svar + " && (" + propvar + " in " + svar + ")) {" +
+            "    " + thisvar + "[" + svar + "[" + propvar + "]](" + valvar + ");" +
+            "} else {" +
+            "    if ($debug) {" +
+            "        if (" + svar + " == null) {" +
+            "            Debug.warn('null setters on', " + thisvar + ", " + propvar + ", " + valvar + ");" +
+            "        }" +
+            "    }" +
+            "    " + thisvar + "[ " + propvar + " ] = " + valvar + ";" +
+          ((property instanceof ASTLiteral) ? "" : ("    var " + evtvar + " = (\"on\" + " + propvar + ");")) +
+            "    if (" + evtvar + " in " + thisvar + ") {" +
+            "        if (" + thisvar + "[" + evtvar + "].ready) {" + thisvar + "[ " + evtvar + " ].sendEvent( " + valvar + " ); }" +
+            "    }" +
+          "}}";
+        newBody.add(parseFragment(fragment));
+        SimpleNode newStmts = new ASTStatementList(0);
+        newStmts.setChildren((SimpleNode[])newBody.toArray(new SimpleNode[0]));
+        return visitStatement(newStmts);
+      }
+    }
+
     children[1].setChildren(translateFunctionCallParameters(node, isReferenced, args));
     children[0] = translateReferenceForCall(fnexpr, true, node);
 //     if (options.getBoolean(Compiler.WARN_UNDEFINED_REFERENCES)) {
 //       return makeCheckedNode(node);
 //     }
+    // Note current call-site in a function context and backtracing
+    if ((options.getBoolean(Compiler.DEBUG_BACKTRACE) && (node.beginLine != 0)) &&
+        (context.findFunctionContext() != null)) {
+      SimpleNode newNode = new ASTExpressionList(0);
+      newNode.set(0, (new Compiler.Parser()).parse("$lzsc$a.lineno = " + node.beginLine).get(0).get(0));
+      newNode.set(1, new Compiler.PassThroughNode(node));
+      return visitExpression(newNode);
+    }
     return node;
   }
 
@@ -1583,6 +1688,7 @@
     return node;
   }
 
+  // useName => declaration not expression
   SimpleNode translateFunction(SimpleNode node, boolean useName, SimpleNode[] children) {
     // TODO: [2003-04-15 ptw] bind context slot macro
     SimpleNode[] result;
@@ -1624,6 +1730,7 @@
   static java.util.regex.Pattern identifierPattern = java.util.regex.Pattern.compile("[\\w$_]+");
 
   // Internal helper function for above
+  // useName => declaration not expression
   SimpleNode[] translateFunctionInternal(SimpleNode node, boolean useName, SimpleNode[] children) {
     // ast can be any of:
     //   FunctionDefinition(name, args, body)
@@ -1911,6 +2018,7 @@
       if (scriptElement || used.containsKey(name)) {
         SimpleNode fundecl = (SimpleNode)fundefs.get(name);
         SimpleNode funexpr = new ASTFunctionExpression(0);
+        funexpr.setBeginLocation(fundecl.filename, fundecl.beginLine, fundecl.beginColumn);
         funexpr.setChildren(fundecl.getChildren());
         Map map = new HashMap();
         map.put("_1", funexpr);
@@ -1952,13 +2060,34 @@
     // Finally replace the function body with that whole enchilada
     children[stmtsIndex] = newStmts;
     if ( options.getBoolean(Compiler.NAME_FUNCTIONS)) {
-      if (functionName != null) {
-        // the name will be available from the runtime
+      // TODO: [2007-09-04 ptw] Come up with a better way to
+      // distinguish LFC from user stack frames.  See
+      // lfc/debugger/LzBactrace
+      String fn = (options.getBoolean(Compiler.FLASH_COMPILER_COMPATABILITY) ? "lfc/" : "") + filename;
+      if (functionName != null &&
+          // Either it is a declaration or we are not doing
+          // backtraces, so the name will be available from the
+          // runtime
+          (useName || (! (options.getBoolean(Compiler.DEBUG_BACKTRACE))))) {
+        if (options.getBoolean(Compiler.DEBUG_BACKTRACE)) {
+          SimpleNode newNode = new ASTStatementList(0);
+          newNode.set(0, new Compiler.PassThroughNode(node));
+          newNode.set(1, parseFragment(functionName + "._dbg_filename = " + ScriptCompiler.quote(fn)));
+          newNode.set(2, parseFragment(functionName + "._dbg_lineno = " + lineno));
+          node = visitStatement(newNode);
+        }
       } else {
         Map map = new HashMap();
         map.put("_1", node);
         SimpleNode newNode = new Compiler.PassThroughNode((new Compiler.Parser()).substitute(
-          "(function () {var $lzsc$temp = _1; $lzsc$temp._dbg_name = " + ScriptCompiler.quote(userFunctionName) + "; return $lzsc$temp})()",
+          "(function () {" +
+          "   var $lzsc$temp = _1;" +
+          "   $lzsc$temp._dbg_name = " + ScriptCompiler.quote(userFunctionName) + ";" +
+          ((options.getBoolean(Compiler.DEBUG_BACKTRACE)) ?
+           ("   $lzsc$temp._dbg_filename = " + ScriptCompiler.quote(fn) + ";" +
+            "   $lzsc$temp._dbg_lineno = " + lineno + ";") : 
+           "") +
+          "   return $lzsc$temp})()",
           map));
         node = newNode;
       }

Modified: openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/utils/FileUtils.java
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/utils/FileUtils.java	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/server/src/org/openlaszlo/utils/FileUtils.java	2007-09-14 21:45:55 UTC (rev 6483)
@@ -36,6 +36,8 @@
 
 import org.apache.log4j.*;
 import org.apache.oro.text.regex.*;
+import java.io.InputStreamReader;
+import java.io.BufferedInputStream;
 
 // A dir is absolute if it begins with "" (the empty string to
 // the left of the initial '/'), or a drive letter.
@@ -137,6 +139,20 @@
     }
 
 
+    private static final Pattern pattern;
+    static {
+        Perl5Compiler compiler = new Perl5Compiler();
+        Pattern tmp = null;
+        try {
+            tmp = compiler.compile("[^<]*\\s*<[?]xml\\s+[^>]*encoding=[\"'](.*)['\"][^>]*?>", Perl5Compiler.READ_ONLY_MASK);
+        } catch( MalformedPatternException failed ) {
+            System.err.println( failed );
+            System.exit( 0 );
+        }
+        pattern = tmp;
+    }
+        
+
     /** Attempt to deduce the encoding of an XML file, by looking for the "encoding" attribute in the
      * XML declaration.
      * Default is to return "UTF-8"
@@ -144,24 +160,26 @@
      * @return the encoding name
      * @throws IOException if an error occurs
      */
-    public static String getXMLEncodingFromFile(String pathname, String defaultEncoding)
+    public static Reader getXMLEncodingFromFile(InputStream input, String defaultEncoding)
       throws IOException {
-        java.io.FileInputStream ifs = new java.io.FileInputStream(pathname);
         ByteArrayOutputStream bout = new ByteArrayOutputStream();
-        send(ifs, bout);
+        send(input, bout);
         Perl5Matcher matcher = new Perl5Matcher();
-        try {
-            Perl5Compiler compiler = new Perl5Compiler();
-            Pattern pattern = compiler.compile("[^<]*\\s*<[?]xml\\s+[^>]*encoding=[\"'](.*)['\"][^>]*?>");
-            if (matcher.contains(new String(bout.toByteArray()), pattern)) {
-                MatchResult result = matcher.getMatch();
-                String encoding = result.group(1);
-                return encoding;
-            } else {
-                return "UTF-8";
-            }
-        } catch (MalformedPatternException e) {
-            throw new RuntimeException(e.getMessage());
+        
+        byte [] array = bout.toByteArray();
+        // We will ignore the byte order mark encoding for now,
+        // hopefully no one is going to be using UTF16. I don't want
+        // to deal right now with the case where the XML encoding
+        // directive conflicts with the byte order mark.
+        int skip = stripByteOrderMark( array );
+        ByteArrayInputStream bais = new ByteArrayInputStream( array, skip, array.length );
+        
+        if (matcher.contains(new String(array, 0, Math.min( 1024, array.length )), pattern)) {
+            MatchResult result = matcher.getMatch();
+            String encoding = result.group(1);
+            return new InputStreamReader( bais, encoding ); 
+        } else {
+            return new InputStreamReader( bais, defaultEncoding ); 
         }
     }
 
@@ -174,18 +192,11 @@
      */
     public static Reader makeXMLReaderForFile (String pathname, String defaultEncoding)
       throws IOException {
-        String encoding = getXMLEncodingFromFile(pathname, defaultEncoding);
-        InputStream ifs = new java.io.FileInputStream(pathname);
+        InputStream ifs = new BufferedInputStream( new java.io.FileInputStream(pathname) );
         if (pathname.endsWith(".lzo")) {
           ifs = new java.util.zip.GZIPInputStream(ifs);
         }
-        java.io.PushbackInputStream pbis = new java.io.PushbackInputStream(ifs, 1024);
-        // We will ignore the byte order mark encoding for now,
-        // hopefully no one is going to be using UTF16. I don't want
-        // to deal right now with the case where the XML encoding
-        // directive conflicts with the byte order mark.
-        FileUtils.stripByteOrderMark(pbis);
-        return new java.io.InputStreamReader(pbis, encoding);
+        return getXMLEncodingFromFile( ifs, defaultEncoding );
     }
 
     /** Read a (pushback-able) byte input stream looking for some form of
@@ -223,6 +234,50 @@
         }
     }
 
+    /** Read a (pushback-able) byte input stream looking for some form of
+        Unicode Byte Order Mark Defaults. If found, strip it out.
+     * @param raw bytes
+     * @return the count of characters to skip
+     */
+    public static int stripByteOrderMark (byte[] raw) {
+        try {
+            // We need to peek at the stream and if the first three chars
+            // are a UTF-8 or UTF-16 encoded BOM (byte order mark) we will
+            // discard them. 
+            int c1 = ((int) raw[0]) & 0xff;
+            int c2 = ((int) raw[1]) & 0xff;
+            int c3 = ((int) raw[2]) & 0xff;
+            int count = 0;
+            if (c1 == 0xFF & c2 == 0xFE) {
+                // UTF16 Big Endian BOM
+                // discard the first two chars
+    //             pbis.unread(c3);
+    //             return "UTF-16BE";
+                return 2;
+            } else if (c1 == 0xFE & c2 == 0xFF) {
+                // UTF16 Little Endian BOM
+                // discard the first two chars
+    //             pbis.unread(c3);
+    //             return "UTF-16LE";
+                return 2;
+            } else if (c1 == 0xEF && c2 == 0xBB && c3 == 0xBF) {
+    //             // UTF-8 BOM
+    //             // discard all three chars
+    //             return "UTF-8";
+                return 3;
+            } else {
+                // Otherwise put back the chars we just read and proceed
+    //             pbis.unread(c3);
+    //             pbis.unread(c2);
+    //             pbis.unread(c1);
+    //             return null;
+                return 0;
+            }
+        } catch (Exception e) {
+            return 0;
+        }
+    }
+
     /**
      * @param file file to read
      * @return size of file

Modified: openlaszlo/branches/legals/WEB-INF/lps/templates/app-console.xslt
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/templates/app-console.xslt	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/templates/app-console.xslt	2007-09-14 21:45:55 UTC (rev 6483)
@@ -165,10 +165,9 @@
 
             </xsl:when>
             <xsl:otherwise>
-              <iframe id="dhtml-application"
-                      frameborder="0"
-                      src="{/canvas/request/@url}?lzt=html{/canvas/request/@query_args}"
-                      style="width: {$canvaswidth}; height: {$canvasheight}" />
+              <script type="text/javascript">
+                Lz.swfEmbed({url: '<xsl:value-of select="/canvas/request/@url"/>?lzt=swf<xsl:value-of select="/canvas/request/@query_args"/>', bgcolor: '<xsl:value-of select="/canvas/@bgcolor"/>', width: '<xsl:value-of select="/canvas/@width"/>', height: '<xsl:value-of select="/canvas/@height"/>', id: '<xsl:value-of select="/canvas/@id"/>', accessible: '<xsl:value-of select="/canvas/@accessible"/>'});
+              </script>
             </xsl:otherwise>
           </xsl:choose>
 
@@ -212,9 +211,9 @@
         <xsl:when test="@runtime = 'dhtml'">
         </xsl:when>
         <xsl:otherwise>
-            <script type="text/javascript">
-                Lz.swfEmbed({url: '<xsl:value-of select="$lps"/>/lps/admin/dev-console.lzx.swf?lzappuid=<xsl:value-of select="$appuid"/>&amp;lzt=swf&amp;appinfo=<xsl:value-of select="$appinfo"/>', bgcolor: '#9494ad', width: '100%', height: '<xsl:value-of select="$consoleheight"/>', appenddivid: 'console'});
-            </script>
+            <iframe id="dhtml-application"
+                    src="{$lps}/lps/admin/dev-console.html?lzappuid={$appuid}&amp;appinfo={$appinfo}"
+                    style="width: 100%; height: {$consoleheight}px" width="100%" height="70"/>
         </xsl:otherwise>
       </xsl:choose>
 

Modified: openlaszlo/branches/legals/WEB-INF/lps/templates/app-console_jp.xslt
===================================================================
--- openlaszlo/branches/legals/WEB-INF/lps/templates/app-console_jp.xslt	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/WEB-INF/lps/templates/app-console_jp.xslt	2007-09-14 21:45:55 UTC (rev 6483)
@@ -165,10 +165,9 @@
 
             </xsl:when>
             <xsl:otherwise>
-              <iframe id="dhtml-application"
-                      frameborder="0"
-                      src="{/canvas/request/@url}?lzt=html{/canvas/request/@query_args}"
-                      style="width: {$canvaswidth}; height: {$canvasheight}" />
+              <script type="text/javascript">
+                Lz.swfEmbed({url: '<xsl:value-of select="/canvas/request/@url"/>?lzt=swf<xsl:value-of select="/canvas/request/@query_args"/>', bgcolor: '<xsl:value-of select="/canvas/@bgcolor"/>', width: '<xsl:value-of select="/canvas/@width"/>', height: '<xsl:value-of select="/canvas/@height"/>', id: '<xsl:value-of select="/canvas/@id"/>', accessible: '<xsl:value-of select="/canvas/@accessible"/>'});
+              </script>
             </xsl:otherwise>
           </xsl:choose>
 
@@ -212,9 +211,9 @@
         <xsl:when test="@runtime = 'dhtml'">
         </xsl:when>
         <xsl:otherwise>
-            <script type="text/javascript">
-                Lz.swfEmbed({url: '<xsl:value-of select="$lps"/>/lps/admin/dev-console.lzx.swf?lzappuid=<xsl:value-of select="$appuid"/>&amp;lzt=swf&amp;appinfo=<xsl:value-of select="$appinfo"/>', bgcolor: '#9494ad', width: '100%', height: '<xsl:value-of select="$consoleheight"/>', appenddivid: 'console'});
-            </script>
+            <iframe id="dhtml-application"
+                    src="{$lps}/lps/admin/dev-console.html?lzappuid={$appuid}&amp;appinfo={$appinfo}"
+                    style="width: 100%; height: {$consoleheight}px" width="100%" height="70"/>
         </xsl:otherwise>
       </xsl:choose>
 

Modified: openlaszlo/branches/legals/build.xml
===================================================================
--- openlaszlo/branches/legals/build.xml	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/build.xml	2007-09-14 21:45:55 UTC (rev 6483)
@@ -160,6 +160,7 @@
       <include name="developers/**" />
       <include name="deployers/**" />
       <include name="component-design/**" />
+      <include name="component-browser/**" />      
       <include name="reference/**" />
       <include name="contributors/**" />
       <include name="contribref/**" />

Modified: openlaszlo/branches/legals/demos/weather/weather.lzx
===================================================================
--- openlaszlo/branches/legals/demos/weather/weather.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/demos/weather/weather.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -8,7 +8,8 @@
 <!-- is subject to license terms.                                          -->
 <!--=======================================================================-->
 
-<canvas width="240" height="320" bgcolor="#EAEAEA" title="Laszlo Weather">
+<!-- <canvas width="240" height="320" bgcolor="#EAEAEA" title="Laszlo Weather"> -->
+<canvas  bgcolor="#EAEAEA" title="Laszlo Weather">
     <!-- the actual size of the app is:  width="240" height="320"
          this app is sized larger to appear consistent with other samples -->
     <splash/>
@@ -294,12 +295,12 @@
             <datapointer xpath="weatherdata:/*" ondata="processData();"
                 onerror="showError();"
                 ontimeout="showTimeout();">
-
                 <!-- When data is received from the datasource, do this -->
                 <method name="processData">
-                    if ( this.getNodeName() == "error" ) {
+                    var title = this.xpathQuery("/rss/channel/title/text()");
+                    if ( title.indexOf( "Error" ) != -1 ) {
                         error.setText("Error: " +
-                                      this.getNodeAttribute( 'message' ) );
+                                      this.xpathQuery( '/rss/channel/item/title/text()' ) );
                         zipBtn.animate('x',0,333,false);
                         return;
                     }

Copied: openlaszlo/branches/legals/docs/component-browser (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser)

Deleted: openlaszlo/branches/legals/docs/component-browser/common.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/common.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/common.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/components.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/components.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/components.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/formview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/formview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/formview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/hierarchyview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/hierarchyview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/hierarchyview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/listview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/listview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/listview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/menuview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/menuview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/menuview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/scrollbarview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/scrollbarview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/scrollbarview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/tabsliderview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/tabsliderview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/tabsliderview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/tabsview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/tabsview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/tabsview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/treeview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/treeview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/treeview.lzx)

Deleted: openlaszlo/branches/legals/docs/component-browser/windowview.lzx

Copied: openlaszlo/branches/legals/docs/component-browser/windowview.lzx (from rev 6261, openlaszlo/branches/wafflecone/docs/component-browser/windowview.lzx)

Modified: openlaszlo/branches/legals/docs/includes/lzx-pretty-print.css
===================================================================
--- openlaszlo/branches/legals/docs/includes/lzx-pretty-print.css	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/docs/includes/lzx-pretty-print.css	2007-09-14 21:45:55 UTC (rev 6483)
@@ -17,3 +17,25 @@
 .comment-markup {color: gray; }
 .constraint-markup {color: gray}
 .constraint-expression {color: red}
+
+/* Next two styles, .warningheader and .warningheader a, 
+are for the in-progress tag for the OL4.0.5 reference only. 
+After 4.0.5, these can be deleted. [bshine 2007.08.30] 
+Bug LPP-4539. */
+.warningheader {
+    padding-top: 10pt;
+    padding-bottom: 10pt;
+    padding-left: 20pt;
+    border-top: 1pt solid red;
+    border-bottom: 1pt solid red;
+    
+    background-color: #FF9999;
+    color : #ffffff;
+    font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;
+    font-size : 15px;
+    text-decoration: none;
+}
+
+.warningheader a {
+    color: #000099;
+}

Modified: openlaszlo/branches/legals/docs/release-notes.html
===================================================================
--- openlaszlo/branches/legals/docs/release-notes.html	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/docs/release-notes.html	2007-09-14 21:45:55 UTC (rev 6483)
@@ -3,7 +3,8 @@
 <!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
 * Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
 * Use is subject to license terms.                                            *
-* X_LZ_COPYRIGHT_END ****************************************************** --><title>OpenLaszlo 4.0.3 Release Notes</title>
+* X_LZ_COPYRIGHT_END ****************************************************** -->
+<title>OpenLaszlo 4.0.5 Release Notes</title>
 
 
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
@@ -13,196 +14,185 @@
 
 <body class="release-notes">
 
-<h1><b>Release Notes for OpenLaszlo 4.0.3</b> </h1>
+<h1>Release Notes for OpenLaszlo 4.0.5</h1>
 
+
 <p class="bodytext">
-OpenLaszlo 4.0.3 is a bug fix release, based on OpenLaszlo 4.0.2. This release includes many bugfixes, including many community-reported bugs, and several community-contributed fixes. If you are developing in 4.0.0, 4.0.1, or 4.0.2, please upgrade to 4.0.3 in order to take advantage of the bugs fixed in this release. 4.0.x is a big change from OpenLaszlo 3.x.</p>
+
+<b>OpenLaszlo 4.0.5 is the recommended platform for .swf development.</b> With OpenLaszlo 4.0.5, there is no longer any reason to continue application development using OpenLaszlo 3.4. 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.</p>
+
 <p>
 For every release, we rely on the OpenLaszlo community to help ensure
 the quality of the platform release and to determine its future
-direction. We encourage you to report any problems, and to make
+direction. To propose or participate in discussion of new features,
+see <a href="http://wiki.openlaszlo.org/Enhancement_Proposals">the wiki.</a>
+We encourage you to report any problems, and to make
 suggestions for enhancements, through our <a
 href="http://www.openlaszlo.org/jira/browse/LPP">JIRA bug tracking
-system.</a>
-</p>
+system.</a> </p>
 <p>
 Please see the <a href="http://download.openlaszlo.org/4.0.0/release-notes.html">OpenLaszlo 4.0 Release Notes</a> for an overview of significant changes since 3.x.
 </p>
-<h1>Important Known Open Bugs in 4.0.3</h1>
-<p>Many known bugs are present in 4.0.3; this is the way of the world. A few of these bugs deserve special attention:</p>
+<p><i>What happened to version 4.0.4? We skipped a number. We don't like 404s.</i></p>
+<h1>New Features in 4.0.5</h1>
 <ul>
-    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-4235">With jdk 1.6 and tomcat 5.5.23, changes to build.xml deploy task necessary></a> The bug description indicates a small change that must be made to the main build.xml file in order to use these recent versions of tomcat and java.</li>
-    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-3579"> Fix debugger in Safari</a> The dhtml debugger does not work in Safari 2 or Safari 3 or WebKit nightly as of r24285. The bug description includes a workaround if you are building OL from source and you need the safari debugger to work. If you do not do the special dance described in the bug, <em>the dhtml debugger will not work in any known version of Safari.</em></li>
-    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-4210">drawview gradients broken in Firefox</a> This is due to lack of support in the DHTML canvas tag for opacity in gradients. Firefox is among the browsers that doesn't accept opacity information for gradient stops. Similar effects can be achieved with color.</li>
-    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-2958">lztest-textstyle.lzx fails in legals</a> The foreground and background colors of text are not handled the same in swf and in dhtml. There are minor display differences between SWF and DHTML, because SWF uses a separate background movieclip, whereas DHTML just uses bgcolor attribute of text. The workaround is to put an extra view in behind the text view. This workaround will not work for DHTML/Safari.</li>
-    
+    <li><b>Explicit Replication</b>. Please see <a href="http://wiki.openlaszlo.org/Explicit_Replication">the proposal for explicit replication on the wiki</a> for details. Expect more detailed documentation in upcoming releases. </li>
 </ul>
-<h1>Resoloved Bugs in OpenLaszlo 4.0.3 (76)</h1>
+<h1>Important Known Issues in 4.0.5</h1>
+<p>Some known bugs are present in this release; this is the way of the world. A few of these bugs deserve special attention:</p>
 <ul>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-1813">LPP-1813</a> Clicking on image in clips should put it into details view</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-1834">LPP-1834</a> cubic bezier implementation in drawview has issues</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2059">LPP-2059</a> LzDrawview.clip() is private</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2145">LPP-2145</a> spelling mistake under 'Animation Basics' in 'Laszlo in 10 minutes'</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2373">LPP-2373</a> Lzpix: 'data source error' when double-clicking on an image in the grid</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2440">LPP-2440</a> WARNING: views/details.lzx:15: reference to undefined property 'childNodes' (FF1.5 and IE6 swf only)</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2731">LPP-2731</a> getMouse fails to account for xoffset and yoffset</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2828">LPP-2828</a> Find some way to get rid of LzFixTags in the LFC</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2915">LPP-2915</a> baseedittext _internaltext y offset wrong if placed in tabpane</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2932">LPP-2932</a> setter for 'enabled' property on inputtext fails to send onenabled event</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3224">LPP-3224</a> remove canvas size from last example</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3330">LPP-3330</a> leap year check in basedatepicker.lzx is not correct</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3406">LPP-3406</a> LzTextFormat should have textformat tag</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3556">LPP-3556</a> Datapath doesn't parse XML attribute correctly</li>
-<li><a href='http://www.openlaszlo.org/jira/browse/LPP-3664'>LPP-3664</a> LzTrack send onmousetrack* event to the wrong registred node...</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3691">LPP-3691</a> issues with inputtext in ie6/7 in html example</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3701">LPP-3701</a> combobox's list can hang off the edge of the screen</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3715">LPP-3715</a> tooltip should extend node not view </li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3743">LPP-3743</a> Amazon App: Shipping address edit pane doesn't fit all the controls</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3744">LPP-3744</a> FF 1.5/2.0 dhtml: &lt;edittext&gt; control doesn't draw box around input area</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3753">LPP-3753</a> onmouseup and onmousedown not reported by LzGlobalMouse for inputtext and selectable text, </li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3773">LPP-3773</a> Newlines not escaped in attribute values</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3855">LPP-3855</a> Setting a class's datapath to its parent datapath results in Firebug error and non-working app in DHTML only</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3860">LPP-3860</a> Sometimes xml comes back as application/xml, but Tomcat out of the box isn't setup to compress this</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3877">LPP-3877</a> Loading images in proxyless mode can lead to false onload events with resourceheight/width of 0</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3880">LPP-3880</a> IE/dhtml: vacation survey crashes when run</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3885">LPP-3885</a> Window title not clipped in 4.0</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3901">LPP-3901</a> problem changing query string with data sets</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3921">LPP-3921</a> Client hangs when destroying deeply nested tree</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3923">LPP-3923</a> DHTML window: Opening a window with no explicit parent argument generates an error</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3943">LPP-3943</a> Splash off center</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3946">LPP-3946</a> specify rtmpconnection to display status</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3959">LPP-3959</a> SWF: tree_example is broken in legals</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3963">LPP-3963</a> 'Regression: state onapply not alwasy fired in 4.x'</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3971">LPP-3971</a> setAttribute('bgcolor', null) doesn't work in IE7</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3992">LPP-3992</a> reference to null querystring </li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3994">LPP-3994</a> Javascript error : this.actAnim has no properties, this.actAnim[$2].stop()</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3997">LPP-3997</a> visibility warnings with test-basetabs.lzx</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3998">LPP-3998</a> test-basetabs.lzx reference to undefined variable goldstyle</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3999">LPP-3999</a> old applyStyle code broken for tabpane</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4000">LPP-4000</a> error when creating tabs without tabpane</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4001">LPP-4001</a> roundrectbutton in dhtml</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4003">LPP-4003</a> Wrapping layout incorrect behavior with non visible subviews</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4008">LPP-4008</a> LZPIX: error setSource called with an empty url</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4012">LPP-4012</a> Got warning while resizing grid width.</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4018">LPP-4018</a> LzDraw - drawing lines rapidly leading to browser slowdown and hang</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4020">LPP-4020</a> Amazon-soap demo starts up in a corrupted state in DHTML</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4026">LPP-4026</a> Lztrack not workng properly</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4027">LPP-4027</a> animated focus rectangles don't show in IE DHTML</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4044">LPP-4044</a> DHTML: IE7 bug with java rpc</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4045">LPP-4045</a> HTML tag can have spurious warnings</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4047">LPP-4047</a> Weather example: zip code in upper-right corner looks strange in IE 7</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4048">LPP-4048</a> onframesloadratio not firing</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4049">LPP-4049</a> DHTML: Weather link in internal index is wrong</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4050">LPP-4050</a> ChildView's width/height isn't reflected to the immediateparent (swf-only)</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4058">LPP-4058</a> CSS typography test fails in trunk and legals</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4062">LPP-4062</a> Launching applications with a history event can cause javascript errors</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4063">LPP-4063</a> CSS name attribute selector doesn't work in Flash 6</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4065">LPP-4065</a> Smoke test failing under legals</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4080">LPP-4080</a> Drawview referece page is very poor</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4082">LPP-4082</a> 'LzDatapointer.selectChild not careful enough'</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4084">LPP-4084</a> loading code with import-tag in ol application in a diffrent webcontext don´t work</li>
-<li><a href='http://www.openlaszlo.org/jira/browse/LPP-4102'>LPP-4102</a> Sizing canvas height or width to 100 percent isn't working</li>
-<li><a href='http://www.openlaszlo.org/jira/browse/LPP-4109'>LPP-4109</a> DHTML Smokecheck - output is erased, so you can't tell if it succeeded</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4119">LPP-4119</a> multiline edittext does not work in IE DHTML</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4120">LPP-4120</a> LzTrack interferes w/ window drag w/ FF DHTML</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4128">LPP-4128</a> Drawview's width and height cannot be constrained in DHTML.</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4149">LPP-4149</a> bug in scrollbar component in DHTML</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4150">LPP-4150</a> drawview broken in non-IE DHTML as of r5422</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4151">LPP-4151</a> Drawview LZX cachebitmap attribute values have no effect</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4152">LPP-4152</a> Global cursor should be cleared by LzCursor.restoreCursor() in DHTML</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4156">LPP-4156</a> Drawview fill() broken in R5451 DHTML FF</li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-4168">LPP-4168</a> onframe event not being sent</li>
-<li><a href='http://www.openlaszlo.org/jira/browse/LPP-4252'>LPP-4252</a> Demos in IE/dhtml have artifacts and buttons/tabs cannot be selected</li>
-<li><a href='http://www.openlaszlo.org/jira/browse/LPP-4254'>LPP-4254</a> Combobox items not reliably responding to mouse clicks for SWF and DHTML R5599</li>
-<li><a href='http://www.openlaszlo.org/jira/browse/LPP-4271'>LPP-4271</a> Flash and DHTML: Problem selecting editable and non-editable combobox (Regression)</li>
+    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-4235">With jdk 1.6 and tomcat 5.5.23, changes to build.xml deploy task necessary</a> The bug description indicates a small change that must be made to the main build.xml file in order to use these recent versions of tomcat and java.</li>
+<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3579"> Fix debugger in Safari</a> The dhtml debugger does not work in Safari 2 or Safari 3 or WebKit nightly as of r24285. If you need the Safari debugger to work, in lps.properties you can set compiler.debug.safari to true, do a clean build and flush your browser cache to allow debugging in Safari 2. This is not on by default because it makes debugging less useful in Firefox (backtaces will not see function names). WebKit and Safari 3 work correctly without any workaround. </li>
 </ul>
 
-<h1>Improvements in OpenLaszlo 4.0.3</h1>
+<h1>Bugs Fixed in 4.0.5</h1>
 <ul>
-    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-2322">LPP-2322</a> Incubator component colorslider by Bajarang Lai Chitlangi</li>
-    <li><a href='http://www.openlaszlo.org/jira/browse/LPP-2828'>LPP-2828</a> Find some way to get rid of LzFixTags in the LFC</li>    
-    <li><a href='http://www.openlaszlo.org/jira/browse/LPP-3419'>LPP-3419</a> Debug interface should use firebug console when available</li>    
-    <li><a href='http://www.openlaszlo.org/jira/browse/LPP-3986'>LPP-3986</a> Move services/LzTrack.lzs to class system</li>
-    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-4135">LPP-4135</a> Add implementation for setting request headers in Dataset requests in SWF</li>
-    <li><a href="http://www.openlaszlo.org/jira/browse/LPP-4162">LPP-4162</a> Implement &lt;library/&gt; support in DHTML</li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4655" target="buggies">LPP-4655: History mechanism not working</a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4695" target="buggies">LPP-4695: Runtime-Exception in IE with Flash8</a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4699" target="buggies">LPP-4699: Explicit replicator displays warning when a clone's datapath is null</a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4660" target="buggies">LPP-4660:  Httpdatarequest has LzLoader value for xmldata when status is "error"   </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4610" target="buggies">LPP-4610: 'request' method is deprecated, causing trouble, needs to be removed for LzDataset </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4600" target="buggies">LPP-4600: Flash: navbar buttons in laszlo-explorer and examples have clipped text </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4584" target="buggies">LPP-4584: dataset fires multiple ondata-Events </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4583" target="buggies">LPP-4583: Improve compiler and caching performance </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4582" target="buggies">LPP-4582: YouTube demo not working due to changes of Youtube.com FLV url pattern </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4560" target="buggies">LPP-4560: lzc does not respect JAVA_OPTS on non-windows platforms </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4538" target="buggies">LPP-4538: richtexteditarea-test.lzx and richtexteditarea-driver.lzx have warnings and errors </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4535" target="buggies">LPP-4535: Memory leaks in "LzMakeLoadSprite" </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4532" target="buggies">LPP-4532: Two typos in "LzHTTPDatasource#doRequest(..)" </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4509" target="buggies">LPP-4509: internal index page has broken link to deployer's guide </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4505" target="buggies">LPP-4505: Eliminate several warnings in doc build </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4497" target="buggies">LPP-4497: Selecting Contributor's and Developer's Guide results in 404 error </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4462" target="buggies">LPP-4462: When running a SOLO SWF in an HTML file located in a different directory than the SWF, data requests are made relative to SWF, not HTML file </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4436" target="buggies">LPP-4436: window decrements its x and y coordinates when clicked </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4433" target="buggies">LPP-4433: Better performance for &lt;basetrackgroup&gt; </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4432" target="buggies">LPP-4432: Memory leaks in "basetabelement" </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4431" target="buggies">LPP-4431: &lt;list&gt; should disable "autoscrollbar" on destroy </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4418" target="buggies">LPP-4418: Wafflecone: LzDataElement.makeNodeList broken </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4370" target="buggies">LPP-4370: drawview doesn't respect visibility </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4352" target="buggies">LPP-4352: scrollrichedittext can't create scrollbar </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3431" target="buggies">LPP-3431: Ensure richtext and richtexteditor work in OL4/SWF
+</a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4316" target="buggies">LPP-4316: "datalistselector#getItemByData(..)" and "datalistselector#getItemIndexByData(..)" should test against null </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4315" target="buggies">LPP-4315: "datalistselector#findIndex(..)" attempts to compare a "LzDataElement" against a "LzView" </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4269" target="buggies">LPP-4269: No event data in calendar demo for August 2007 </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4206" target="buggies">LPP-4206: Add support for flash 8 font smoothing APIs </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4120" target="buggies">LPP-4120: LzTrack interferes w/ window drag w/ FF DHTML </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4055" target="buggies">LPP-4055: constructWithArgs defined twice in LzNode.lzs </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3907" target="buggies">LPP-3907: edittext and inputtext may fire onfocus resp. onblur twice </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3560" target="buggies">LPP-3560: radiogroup and selecting an item </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3521" target="buggies">LPP-3521: Debugger warnings when rich text editor is instantiated </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-1952" target="buggies">LPP-1952: destroy before resource is loaded leads to full load queue and hang </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4675" target="buggies">LPP-4675: Scrolling large text (100K) is very slow </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4665" target="buggies">LPP-4665: Compilation of some binary libraries fails </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4659" target="buggies">LPP-4659: DHTML: OS X: Cannot load laszlo-explorer in dhtml on OS X/FF2 </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4626" target="buggies">LPP-4626: Can only click into the first 10 to 20 pixels of inputtext </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4544" target="buggies">LPP-4544: Ability to override default container and mask views for explicit replicator </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4533" target="buggies">LPP-4533: Link to 3.4 docs on openlaszlo.org from laszlo explorer </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4414" target="buggies">LPP-4414: Improve startup performance </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4405" target="buggies">LPP-4405: Implement ExplicitReplication </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4404" target="buggies">LPP-4404: Implement DataProvider API </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4397" target="buggies">LPP-4397: rich text editor: cannot switch to the same font twice </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4396" target="buggies">LPP-4396: rich text editor: clicking bold moves insertion point </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4357" target="buggies">LPP-4357: getMouse returns absolute coordinates in DHTML + FF </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4332" target="buggies">LPP-4332: Merge release notes from 4.0.3 into legals </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4261" target="buggies">LPP-4261: Unable to load and unload resources repeatedly - DHTML </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4240" target="buggies">LPP-4240: View.updateResourceSize() generates error in DHTML </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4215" target="buggies">LPP-4215: wrappinglayout construct() method refers to args.spacing, which is undefined. should refer to this.spacing. </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4200" target="buggies">LPP-4200: Missing warnings in "LzBrowser.js" (DHTML) </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4015" target="buggies">LPP-4015: Text selection position and size should be available during onblur event </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3726" target="buggies">LPP-3726: stretches breaks clickable in swf7/8 </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-2894" target="buggies">LPP-2894: CSS: subclasses and instances can't override style constraints set on superclass* </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-2111" target="buggies">LPP-2111: Horrendously inefficient looping in layout classes!! </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4676" target="buggies">LPP-4676: replicator xpath attribute -- double quotes is strange </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4671" target="buggies">LPP-4671: explicit lazyreplicator tag places it's first two views out of order </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4667" target="buggies">LPP-4667: replicatorselectionmanager: yet another replication manager is confusing </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4666" target="buggies">LPP-4666: explicit lazyreplication fails in test file test-replicator.lzx </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4661" target="buggies">LPP-4661: View with stretches="both" does not get onclick </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4657" target="buggies">LPP-4657: Input text does not obey font style directives in SWF7/8 </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4638" target="buggies">LPP-4638: selectionmanager test broken </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4631" target="buggies">LPP-4631: test/lfc/data/datanode.lzx fails </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4630" target="buggies">LPP-4630: Dataset subclasses doRequest oninit if autorequest="true" and request="false" </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4612" target="buggies">LPP-4612: Explicit replicator doesn't update when items are added or deleted </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4601" target="buggies">LPP-4601: Link to Deployer's Guide in Server Admin is broken </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4597" target="buggies">LPP-4597: turn debugger warnings for non-fatal issues into INFO </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4592" target="buggies">LPP-4592: basedatacombobox-based components with selectfirst="false" emits Debugger warnings </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4589" target="buggies">LPP-4589: Two messages highlighted on autocheck when one message is in inbox </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4585" target="buggies">LPP-4585: Two onmousetrackup events fired when only 1 should be fired. </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4571" target="buggies">LPP-4571: Text component not sized correctly when fontsize configured via a constraint </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4569" target="buggies">LPP-4569: Update nav_dhtml.xml whenever nav.xml for laszlo-explorer changes </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4565" target="buggies">LPP-4565: Selecting Contributor's Guide in navbar and quick index entry opens Comprehensive Reference </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4564" target="buggies">LPP-4564: Links to Contributor's Guide have (alpha), the guide has (beta) in the title </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4563" target="buggies">LPP-4563: LZX Reference gets 404 error from the quick index page </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4562" target="buggies">LPP-4562: LoadJS works differently in the dev console </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4561" target="buggies">LPP-4561: Multiple select is undone by mousedown </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4558" target="buggies">LPP-4558: test/wafflecone/test/components/incubator/richtexteditarea-driver.lzx needs to be deleted, no longer valid </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4556" target="buggies">LPP-4556: Rich text: Can't change font back to Verdana </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4553" target="buggies">LPP-4553: basefocusview warnings when canvas size changes </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4551" target="buggies">LPP-4551: debugger warnings emitted from a private LFC function </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4549" target="buggies">LPP-4549: runtime warnings should include file references, line #s </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4543" target="buggies">LPP-4543: setVisibility was not an approved API change </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4540" target="buggies">LPP-4540: Laszlo Explorer hierarchical menu does not display in dhtml/firefox/opera/safari </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4539" target="buggies">LPP-4539: Put in a header in each page of reference guide saying "this is an alpha; please look elsewhere(link) for better docs" </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4537" target="buggies">LPP-4537: Laszlo Explorer welcome page says "This is a fully-qualified release" -- but it's not </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4534" target="buggies">LPP-4534: Make a left-nav index navigator for OL 4 docs </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4530" target="buggies">LPP-4530: lzunit basedatacombobox test fails </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4521" target="buggies">LPP-4521: dhtml/flash: Clicking OK without a zip code no longer gives an error (regression) </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4520" target="buggies">LPP-4520: dhtml/swf: Window is missing in Date Picker component </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4513" target="buggies">LPP-4513: Compiler Improvements to address performance </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4510" target="buggies">LPP-4510: Quick Index page has broken doc links </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4502" target="buggies">LPP-4502: Investigate whether the docs build </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4495" target="buggies">LPP-4495: Richedittext: can't change font </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4489" target="buggies">LPP-4489: Richedittext: Can't change formatting before typing </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4487" target="buggies">LPP-4487: test/explicit-replicators/replicator.lzx not working </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4481" target="buggies">LPP-4481: Richedittext: Text size 18 doesn't seem to do anything. </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4479" target="buggies">LPP-4479: Richedittext: Successive changing of a text's properties shortens the selected text range by one character. </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4478" target="buggies">LPP-4478: Richedittext: WARNING: __LZgetNodes: p is null in LzDatapointer </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4477" target="buggies">LPP-4477: Selecting all of the text in a richedittext and then changing the text's properties doesn't change the final character. </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4474" target="buggies">LPP-4474: amazon soap fails in dhtml / wafflecone branch </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4464" target="buggies">LPP-4464: setVisible(null) warning, but it is never called </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4463" target="buggies">LPP-4463: ERROR:Class for tag include has not been defined yet </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4461" target="buggies">LPP-4461: In rich text editor, font color combo box does not update when cursor moves to different colored text </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4459" target="buggies">LPP-4459: Visible property not respected for replication </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4458" target="buggies">LPP-4458: Flash and dhtml: Cannot enter/edit text in Calendar demo (broke between r5934 and r5938) </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4456" target="buggies">LPP-4456: Idle/wait resource is out of position </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4453" target="buggies">LPP-4453: datapointer gets stuck on text elements </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4448" target="buggies">LPP-4448: fixes for dataprovider </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4428" target="buggies">LPP-4428: Make warning on CSS value is null more informative </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4427" target="buggies">LPP-4427: Clean-up for "basescrollbar" </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4425" target="buggies">LPP-4425: Source for Small applications, Demos, and Components can't be viewed </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4423" target="buggies">LPP-4423: Class hierarchy document is not found </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4421" target="buggies">LPP-4421: linkdialog driver can't make links </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4403" target="buggies">LPP-4403: 4.0 history system should warn if first argument to save() isn't a string </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4401" target="buggies">LPP-4401: Namespace separators are not recognized in datapaths - updated </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4400" target="buggies">LPP-4400: Editor for live code examples in dguide isn't working </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4394" target="buggies">LPP-4394: "LzGlobalMouse.onmousemove" is way to slow for "LzView.prototype.getMouse.dependencies" in SWF </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4356" target="buggies">LPP-4356: link dialog does not make links (regression from r5852) </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4347" target="buggies">LPP-4347: baserichedittext-test.lzx fails
+</a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3988" target="buggies">LPP-3988: Redundant 'validate' warnings on binary library compiles </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3738" target="buggies">LPP-3738: Remove DHTML startup warning message for IceWeasel browser </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3431" target="buggies">LPP-3431: Ensure richtext and richtexteditor work in OL4/SWF </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-3024" target="buggies">LPP-3024: If a css'd resource is not found, an error or warning should be issued </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-2760" target="buggies">LPP-2760: Decide how the data API's should handle null values </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4663" target="buggies">LPP-4663: Class hierarchy doc not found in binary dist </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4504" target="buggies">LPP-4504: Calendar demo presents no sample data </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4496" target="buggies">LPP-4496: Links to demo apps in refguide are wrongly mapped </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4470" target="buggies">LPP-4470: Make a test/driver file for lzcombobox </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4443" target="buggies">LPP-4443: Don't warn on undefined style constraints when constant specified </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4375" target="buggies">LPP-4375: Fix lztest-text.lzx </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4374" target="buggies">LPP-4374: Fix lztest-stableborderlayout.lzx </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4351" target="buggies">LPP-4351: richtexteditarea-test has warnings and errors in debugger, but lzunit test passes
+</a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4350" target="buggies">LPP-4350: linkdialog-test fails </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4349" target="buggies">LPP-4349: test-baseedittext.lzx fails </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-4348" target="buggies">LPP-4348: rich-text: formatfontsize test fails
+</a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-1605" target="buggies">LPP-1605: ctor precedence is wrong </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-1417" target="buggies">LPP-1417: Allow backtracing to be invoked from the developer console </a></li>
+<li><a href="http://jira.openlaszlo.org/jira/browse/LPP-1635" target="buggies">LPP-1635: runtime warning on richtexteditarea test </a></li>
 </ul>
-<h1>Release notes for OpenLaszlo 4.0.1/4.0.2</h1>
-<p class="bodytext">
-OpenLaszlo 4.0.1 and OpenLaszlo 4.0.2 were released together; OpenLaszlo 4.0.2 was a point release that addresses bugs in the 4.0.0 and 4.0.1 release. There are no significant new features in this release, although there are several minor improvements:</p>
-<ul>
-    <li>The &lt;html&gt; tag, which used to only be only supported for the dhtml runtime now works in applications compiled to swf. </li>
-    <li>All three remote RPC services are now working in dhtml, but please note that the support for the RPC services is preliminary, however, as it has not been exhaustively tested.</li>
-    <li><ul>
-        <li>XML-RPC</li>
-        <li>JAVA-RPC</li>
-        <li>SOAP</li>
-    </ul></li>    
-    <li>There is new documentation content, and</li>
-    <li>Improvements have been made to the default Tomcat configuration. </li>
-</ul>
-<h1><a name="fixed-bugs">Resolved Bugs in OpenLaszlo 4.0.1/4.0.2 (48)</a></h1>
 
-<p>OpenLaszlo 4.0.1/4.0.2 resolves the bugs listed below. Please see the descriptions in the JIRA database for more details.</p>
-    <ul>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3980">LPP-3980   Amazon app uses 100% CPU when idle when compiled for SWF.</a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3947"> LPP-3947  Flash and DHTM: Setting canvas width to 100% in legals results in a canvas that is 500 pixels wide </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3943"> LPP-3943  Splash off center </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3911"> LPP-3911  navbar is missing in laszlo-explorer </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3908"> LPP-3908  components not clickable in safari or opera </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3903"> LPP-3903  ondblclick broken in 4.0 in Win XP </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3900"> LPP-3900  LZX reference the example for datepicker contains a wrong date for the selecteddate attribute </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3894"> LPP-3894  Relative HTTP paths no longer work for datasets </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3882"> LPP-3882  Databinding to xpathQuery broken in 4.0 </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3878"> LPP-3878  Streaming proxyless mp3 audio can't be controlled until it's completely finished loading </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3877"> LPP-3877  Loading images in proxyless mode can lead to false onload events with resourceheight/width of 0 </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3869"> LPP-3869  Flash 9 blocks loading of non-proxied mp3 audio files </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3866"> LPP-3866  ant lztest failing in legals </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3858"> LPP-3858  Script compiler compressor precedence error </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3856"> LPP-3856  DHTML: clonemanager is null in datalistselector.lzx </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3854"> LPP-3854  LzKeys.onmousewheeldelta broken in swf  Max Carlson </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3828"> LPP-3828  Put a last resort catch around the top level in DHTML debug mode </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3805"> LPP-3805  lzc.bat fails in the release of LPS 4.0 </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3784"> LPP-3784  Debugger needs to indicate when it has abbreviated an object. </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3782"> LPP-3782  Windows-only unit test failure in js2doc.test with unit @path attribute </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3781"> LPP-3781  documentation disables scrollwheel and navigation </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3779"> LPP-3779  Misleading Compilation exception syntax error </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3778"> LPP-3778  Remove contacts/contacts.lzx because it requires the redmond components </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3777"> LPP-3777  Bug in DHTML datapath processing: function __LZgetNodes $2_p.attributes has no properties </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3776"> LPP-3776  DHTML apps need to use embedDHTML url, not page load URL for proxied loads... </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3775"> LPP-3775  Canvas div should be clipped instead of the container view </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3774"> LPP-3774  Dynamically created multiline text has incorrect height </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3769"> LPP-3769  LzBrowser shouldn't be documented as a kernel API, should appear in refguide </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3758"> LPP-3758  Java stack trace while compiling malformed JavaScript code </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3752"> LPP-3752  Constraints don't seem to fully work </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3750"> LPP-3750  SOLO DHTML deploy wizard gets errors in released windows installation </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3746"> LPP-3746  docs missing illustrations </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3741"> LPP-3741  Amazon demo: Error after deleting a radio button that is selected </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3737"> LPP-3737  Calendar demo event text is not clipped for recent edits </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3735"> LPP-3735  &lt;html&gt; embedding tag not working in FF2.0 / OS X in swf </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3727"> LPP-3727  Stale links in Documentation -> Developers Tools->DTD / IntelliJ Settings / IDE for Laszlo </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3722"> LPP-3722  XP IE6: cannot select LZX Reference and guides from navbar buttons in Documentation menu </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3703"> LPP-3703  IE issue with DHTML embed frame scrolling on unclipped views </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3688"> LPP-3688  New xml parsing not working? </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3657"> LPP-3657  Implement SOAP RPC in DHTML </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3558"> LPP-3558  wording of tutorial </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2903"> LPP-2903  unit test test/lztest/lztest-layout.lzx fails in DHTML runtime </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2876"> LPP-2876  event info is partially clipped in calendar demo, IE, swf7 and dhtml </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2628"> LPP-2628  Splash swf resource is unpredictably scaled </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2491"> LPP-2491  solo wizard does not respect the specified input height and width sizes </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-1644"> LPP-1644  datalistselector fails to call setSelected() method if view was previously selected and was the only replicated view. </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-1534"> LPP-1534  LzTrack doesn't document unregister() method </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-1379"> LPP-1379  repeated mouse events with same coordinates </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-414">  LPP-414   data selection manager doesn't update selection </a></li>
-</ul>
-<h1><a name="features-added">Improvements in OpenLaszlo 4.0.1/4.0.2 (7)</a></h1>
-<ul>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3868"> LPP-3868  Fix memory leak for images in DHTML runtime </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3717"> LPP-3717  SOAP/DHTML should cleanly not work </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-3159"> LPP-3159  The good charting &amp; graphing example should be included in the distro </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2996"> LPP-2996  Explorer should use canvas attributes to fill in version info at bottom of navbar </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-2117"> LPP-2117  Added support for inset management to incubator's roundrect.lzx </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-1071"> LPP-1071  how to delete an imported library </a></li>
-<li><a href="http://www.openlaszlo.org/jira/browse/LPP-990">  LPP-990   constraints and performance </a></li>
-   </ul>
+
 </body>
 </html>

Modified: openlaszlo/branches/legals/docs/src/build.xml
===================================================================
--- openlaszlo/branches/legals/docs/src/build.xml	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/docs/src/build.xml	2007-09-14 21:45:55 UTC (rev 6483)
@@ -707,22 +707,26 @@
       <param name="localdir" value="docs/reference/"/>
     </antcall>
 
+
   </target>
 
   <target name="reference.resources" depends="init,reference.preprocess,components.resources.generate"
           unless="reference.skip">
 
+    <ant target="reference.frameset.generate" />
+
     <mkdir dir="${contribref.build.dir}"/>
     <antcall target="book.resources.generate" inheritAll="true">
       <param name="local.input.dir" value="${reference.src.dir}"/>
       <param name="local.build.dir" value="${reference.build.dir}"/>
       <param name="local.output.dir" value="${reference.output.dir}"/>
     </antcall>
+    
 
   </target>
 
   <target name="reference" description="Build the reference"
-          depends="init,reference.resources,reference.html.generate"
+          depends="init,reference.resources,reference.html.generate,reference.frameset.generate"
           unless="reference.skip">
   </target>
 
@@ -747,6 +751,15 @@
       </apply>
   </target>
   
+  <target name="reference.frameset.generate" depends="init"
+      description="Copy a hand-generated html index for the reference into the output directory.">
+      <echo message="***gonna copy in reference frameset ***" />      
+      <!-- To actually build or update the index-generated.html, see navbuilder/navbuilder.rb -->
+      <copy todir="${reference.output.dir}">
+          <fileset dir="${reference.src.dir}/navbuilder" includes="index*.html"/>
+      </copy>
+  </target>
+  
   <!-- CONTRIBUTORS GUIDE -->
   
   <target name="contribref.dbk.build" depends="init,reference.js2doc.build,docbook.catalog.generate"

Modified: openlaszlo/branches/legals/docs/src/contributors/index.dbk
===================================================================
--- openlaszlo/branches/legals/docs/src/contributors/index.dbk	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/docs/src/contributors/index.dbk	2007-09-14 21:45:55 UTC (rev 6483)
@@ -8,7 +8,7 @@
 <book language="en" xmlns:xi="http://www.w3.org/2003/XInclude">
   <?dbhtml dir="contributors" ?>
   <?dbhtml filename="index.html" ?>
-  <title>OpenLaszlo 4.0 Contributor's Guide (beta)</title>
+  <title>OpenLaszlo 4.0 Contributor's Guide (alpha)</title>
   <titleabbrev>OL4 Contributor's Guide</titleabbrev>
 
   <?xi :include href="preface.dbk">

Modified: openlaszlo/branches/legals/docs/src/reference/langref.xml
===================================================================
--- openlaszlo/branches/legals/docs/src/reference/langref.xml	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/docs/src/reference/langref.xml	2007-09-14 21:45:55 UTC (rev 6483)
@@ -562,7 +562,6 @@
 &lt;/canvas&gt;
 </example>
 
-<p>Also see the <a href="${demos}contacts/contacts.lzx">contacts</a> example.</p>
     </text>
   </doc>
   <class>

Copied: openlaszlo/branches/legals/docs/src/reference/navbuilder (from rev 6362, openlaszlo/branches/wafflecone/docs/src/reference/navbuilder)

Deleted: openlaszlo/branches/legals/docs/src/reference/navbuilder/index-frames.html

Copied: openlaszlo/branches/legals/docs/src/reference/navbuilder/index-frames.html (from rev 6362, openlaszlo/branches/wafflecone/docs/src/reference/navbuilder/index-frames.html)

Deleted: openlaszlo/branches/legals/docs/src/reference/navbuilder/index-generated.html

Copied: openlaszlo/branches/legals/docs/src/reference/navbuilder/index-generated.html (from rev 6362, openlaszlo/branches/wafflecone/docs/src/reference/navbuilder/index-generated.html)

Deleted: openlaszlo/branches/legals/docs/src/reference/navbuilder/navbuilder.rb

Copied: openlaszlo/branches/legals/docs/src/reference/navbuilder/navbuilder.rb (from rev 6362, openlaszlo/branches/wafflecone/docs/src/reference/navbuilder/navbuilder.rb)

Modified: openlaszlo/branches/legals/docs/src/xsl/common-html.xsl
===================================================================
--- openlaszlo/branches/legals/docs/src/xsl/common-html.xsl	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/docs/src/xsl/common-html.xsl	2007-09-14 21:45:55 UTC (rev 6483)
@@ -198,8 +198,12 @@
     <!-- throw in the edit button -->
     <xsl:if test="$live">
       <xsl:variable name="edit-href">
-        <xsl:text>../../laszlo-explorer/editor.jsp?src=</xsl:text>
+        <xsl:text>../../../laszlo-explorer/editor.jsp?src=</xsl:text>
         <xsl:value-of select="$localdir"/>
+        <xsl:text>developers/</xsl:text> <!-- TODO: BUG LPP-4683 
+                                          This should not be hardcoded to developers. What about 
+                                          programs that are in contributors or deployers? This needs to 
+                                          be parameterized per-book [bshine 2007.09.07] -->
         <xsl:value-of select="$fname"/>
       </xsl:variable>
       <xsl:text>&#x0a;</xsl:text>
@@ -291,6 +295,10 @@
     <xsl:param name="href">
       <xsl:text>../../laszlo-explorer/editor.jsp?src=</xsl:text>
       <xsl:value-of select="$localdir"/>
+      <xsl:text>developers/</xsl:text> <!-- TODO: BUG LPP-4683 
+                                          This should not be hardcoded to developers. What about 
+                                          programs that are in contributors or deployers? This needs to 
+                                          be parameterized per-book [bshine 2007.09.07] -->
       <xsl:value-of select="."/>
     </xsl:param>
     <xsl:text>&#x0a;</xsl:text>

Modified: openlaszlo/branches/legals/index.jsp
===================================================================
--- openlaszlo/branches/legals/index.jsp	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/index.jsp	2007-09-14 21:45:55 UTC (rev 6483)
@@ -78,7 +78,7 @@
                     </li>
                     </ul>
                 </li>
-                <li>class hierarchy (<a href="examples/components/components.lzx?lzr=swf7">flash</a>) (<a href="examples/components/components.lzx?lzr=dhtml">dhtml</a>)</li>
+                <li>class hierarchy (<a href="docs/component-browser/components.lzx?lzr=swf7">flash</a>) (<a href="docs/component-browser/components.lzx?lzr=dhtml">dhtml</a>)</li>
                 </ul>
             </li>
             <li><a href="test">Tests</a> (these won't ship with the product)</li>

Modified: openlaszlo/branches/legals/laszlo-explorer/coverpages/server_admin_cover.html
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/coverpages/server_admin_cover.html	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/laszlo-explorer/coverpages/server_admin_cover.html	2007-09-14 21:45:55 UTC (rev 6483)
@@ -33,7 +33,7 @@
         <li><a href="foo.lzx?lzt=log&pwd=laszlo">Current  OpenLaszlo Server log file (can be long)</a></li>
      </ul>
    <p>This distribution is configured for development, for deployment details see
-   <a href="../../docs/deploy/index.html" target="laszlo-dguide">Deploying OpenLaszlo Applications</a> in the Developers Guide.
+   <a href="../../docs/deployers/index.html" target="laszlo-dguide">Deploying OpenLaszlo Applications</a> in the Developers Guide.
     </p>
 
     </div>

Modified: openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/laszlo-explorer/coverpages/welcome/index.html	2007-09-14 21:45:55 UTC (rev 6483)
@@ -49,7 +49,7 @@
 <h3>
 It's not just Flash anymore!
 </h3>
-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.
+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 idiosyncrasies so you don't have to.
 </div>
 
 
@@ -60,7 +60,7 @@
 <h3>
 OpenLaszlo 4.0.5 is the recommended platform for .swf development
 </h3>
-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.
+With OpenLaszlo 4.0.5, there is no longer any reason to continue application development using OpenLaszlo 3.4. 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>
 
@@ -70,7 +70,7 @@
 <h3>
 OpenLaszlo Depends on You
 </h3>
-As an open source project, we rely on the goodwill of our users. You can support OpenLaszlo by <a href="http://www.openlaszlo.org/bugs" target="_top">filing bug reports</a>, <a href="http://www.openlaszlo.org/lists" target="_top">sending us feedback</a>, and helping us to spread the word.
+As an open source project, we rely on the goodwill of our users. You can support OpenLaszlo by <a href="http://www.openlaszlo.org/bugs" target="_top">filing bug reports</a>, <a href="http://www.openlaszlo.org/lists" target="_top">sending us feedback</a>, <a href="http://www.openlaszlo.org/cfaq">contributing bug fixes and enhancements</a>, and helping us to spread the word.
 </div>
 </div>
 

Modified: openlaszlo/branches/legals/laszlo-explorer/nav.xml
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/nav.xml	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/laszlo-explorer/nav.xml	2007-09-14 21:45:55 UTC (rev 6483)
@@ -300,7 +300,7 @@
             <subitem src="/examples/components/menu_example.lzx" name="Source" action="source" />
         </item>
       </topic>
-    <topic name="Class Hierarchy" src="/docs/components/components.lzx" />
+    <topic name="Class Hierarchy" src="/docs/component-browser/components.lzx" />
   </section>
 
   <section name="Documentation" title="Documentation" src="/laszlo-explorer/coverpages/documentation_cover.html" text="Tutorial, advanced, reference">
@@ -310,7 +310,7 @@
     <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/index.html" name="Contributor's Guide" action="popup" target="laszlocontributorsguide" />
+     <topic popup="/docs/contributors/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/laszlo-explorer/nav_dhtml.xml
===================================================================
--- openlaszlo/branches/legals/laszlo-explorer/nav_dhtml.xml	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/laszlo-explorer/nav_dhtml.xml	2007-09-14 21:45:55 UTC (rev 6483)
@@ -295,14 +295,14 @@
             <subitem src="/examples/components/menu_example.lzx" name="Source" action="source" />
         </item>
       </topic>
-    <topic name="Class Hierarchy" src="/docs/components/components.lzx" />
+    <topic name="Class Hierarchy" src="/docs/component-browser/components.lzx" />
   </section>
 
   <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 popup="/docs/deploy/index.html" name="Administrator's Guide" action="popup" target="laszloadminguide" />
+    <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/contributors/index.html" name="Contributor's Guide" action="popup" target="laszlocontributorsguide" />

Copied: openlaszlo/branches/legals/lps/admin/dev-console.html (from rev 6450, openlaszlo/branches/wafflecone/lps/admin/dev-console.html)

Modified: openlaszlo/branches/legals/lps/admin/dev-console.lzx
===================================================================
--- openlaszlo/branches/legals/lps/admin/dev-console.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/admin/dev-console.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -97,7 +97,7 @@
         var url = app_lps_root + "/lps/admin/solo-deploy.jsp?appurl="+path;
      }
 
-     LzBrowser.loadURL(url);
+     this.loadURL(url);
   </method>
 
 
@@ -118,18 +118,22 @@
 
    <method name="viewDocs">
      var url = app_lps_root + "/docs/index.html";
-     LzBrowser.loadURL(url);
+     this.loadURL(url);
    </method>
    
    <method name="viewDev">
      var url = "http://www.laszlosystems.com/developers";
-     LzBrowser.loadURL(url);
+     this.loadURL(url);
    </method>
    
    <method name="viewForums">
      var url = "http://www.laszlosystems.com/developers/community/forums/";
-     LzBrowser.loadURL(url);
+     this.loadURL(url);
    </method>
+
+   <method name="loadURL" args="url">
+     LzBrowser.loadURL(url, '_top');
+   </method>
    
   <resource name="footer_logo" src="../assets/logo_laszlo_footer.gif"/>
 
@@ -138,8 +142,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="412" height="32" bgcolor="black">
-                <view x="1" y="1" width="410" height="30" bgcolor="#9494ad"/>
+            <view x="125" width="410" height="32" bgcolor="black">
+                <view x="1" y="1" width="408" 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">
@@ -336,8 +340,8 @@
 
     var url = app_fullpath+"?"+params.serialize();
 
-    //Debug.write('LzBrowser.loadURL("'+url+'")');
-    LzBrowser.loadURL(url);
+    //Debug.write('this.loadURL("'+url+'")');
+    this.loadURL(url);
 
     ]]>
   </method>

Modified: openlaszlo/branches/legals/lps/admin/dev-console.lzx.js
===================================================================
--- openlaszlo/branches/legals/lps/admin/dev-console.lzx.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/admin/dev-console.lzx.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -18,11 +18,11 @@
 }
 if(arguments.length>0){
 $1.prototype=this.prototype
-var $2=(new $1)
+var $2=new $1()
 this.apply($2,arguments)
 return $2
 }else{
-return(new this)
+return new this()
 }
 }
 Object.make=Object
@@ -34,10 +34,10 @@
 $1=""
 
 }
-return(new String($1))
+return new String($1)
 }
 Boolean.make=function($1){
-return(new Boolean($1))
+return new Boolean($1)
 }
 Number.make=function($1){
 switch(arguments.length){
@@ -45,7 +45,7 @@
 $1=+0
 
 }
-return(new Number($1))
+return new Number($1)
 }
 Date.make=function($1,$2,$3,$4,$5,$6,$7){
 switch(arguments.length){
@@ -61,7 +61,7 @@
 $7=0
 
 }
-return(new Date($1,$2,$3,$4,$5,$6,$7))
+return new Date($1,$2,$3,$4,$5,$6,$7)
 }
 window._root=window
 var $modules={}
@@ -71,6 +71,7 @@
 var global=$modules.user
 var Instance=function(){
 this.constructor=arguments.callee
+this.initialize.apply(this,arguments)
 }
 Instance.prototype.constructor=Instance
 Instance.prototype.__initialized=false
@@ -127,49 +128,20 @@
 $1.__initialized=false
 }
 Instance.make=function(){
-var $1=this.prototype
-do{
-var $2=$1.constructor
-if(!$1.__initialized){
-for(var $3 in $1){
-if($1.hasOwnProperty($3)&&$3!="constructor"){
-var $4=$1[$3]
-if($4 instanceof Function){
-if($4.hasOwnProperty("superclasses")){
-var $5=$4.superclasses
-var $6=false
-for(var $7=$5.length-1;$7>=0;$7--){
-if($5[$7]===$2){
-$6=true
-break
+var $1
+$1=function(){
+this.constructor=constructor
 }
+if(arguments.length>0){
+var constructor=this
+$1.prototype=constructor.prototype
+var $2=new $1()
+constructor.apply($2,arguments)
+return $2
 }
-if(!$6){
-$4.superclasses.push($2)
+return new this()
 }
-}else{
-if($4.hasOwnProperty("superclass")){
-var $8=$4.superclass
-if($8!==$2){
-delete $4.superclass
-$4.superclasses=[$8,$2]
-}
-}else{
-$4.superclass=$2
-}
-}
-}
-}
-}
-$1.__initialized=true
-}
-$1=$2.prototype
-}while($2!==Instance)
-var $7=(new this())
-$7.initialize.apply($7,arguments)
-return $7
-}
-var Class={prototype:Instance.make(),addProperty:function($1,$2){
+var Class={prototype:new Instance(),addProperty:function($1,$2){
 var $3=this.prototype
 $3.addProperty.apply($3,arguments)
 },addStaticProperty:function($1,$2){
@@ -177,33 +149,40 @@
 },_dbg_name:"Class",allClasses:{Instance:Instance},make:function($1,$2,$3,$4){
 var nc=function(){
 this.constructor=arguments.callee
+if(this.initialize!==Instance.prototype.initialize){
+this.initialize.apply(this,arguments)
 }
+}
 nc.constructor=this
 nc.classname=$1
 this.addStaticProperty.call(nc,"addStaticProperty",this.addStaticProperty)
 nc.addStaticProperty("addProperty",this.addProperty)
-var $5=null
+var superclass=null
 if($2 instanceof Array){
-for(var $6=$2.length-1;$6>=0;$6--){
-var $7=$2[$6]
-if($7 instanceof Function){
-$2.splice($6,1)
-$5=$7
+for(var $5=$2.length-1;$5>=0;$5--){
+var $6=$2[$5]
+if($6 instanceof Function){
+$2.splice($5,1)
+superclass=$6
 }
 }
 }else{
 if($2 instanceof Function){
-$5=$2
+superclass=$2
 $2=null
 }else{
 
 }
 }
-if(!$5){
-$5=Instance
+if(!superclass){
+superclass=Instance
 }
-nc.addStaticProperty("make",$5.make)
-var $8=(new $5)
+nc.addStaticProperty("make",superclass.make)
+var $7=function(){
+this.constructor=superclass
+}
+$7.prototype=superclass.prototype
+var $8=new $7()
 if($2 instanceof Array){
 while($2.length){
 var $9=$2.pop()
@@ -227,7 +206,7 @@
 this.allClasses[$1]=nc
 return nc
 }}
-var Trait={prototype:Instance.make(),allTraits:{},_dbg_typename:Class._dbg_name,_dbg_name:"Trait",addProperty:function($1,$2){
+var Trait={prototype:new Instance(),allTraits:{},_dbg_typename:Class._dbg_name,_dbg_name:"Trait",addProperty:function($1,$2){
 this.prototype[$1]=$2
 var $3=this.implementations
 for(var $4 in $3){
@@ -256,13 +235,11 @@
 $7.initialize=this.initialize
 }
 $7.classname=$4
-$7._dbg_typename="Interstitial Constructor"
-$7._dbg_name=$7.classname
-var $8=(new $7())
+var $8=new $7()
 $3[$4]=$8
 return $8
 },make:function($1,$2,$3,$4){
-var $5={constructor:this,classname:$1,_dbg_typename:this._dbg_name,_dbg_name:$1,prototype:$2?$2.make():(new Object),implementations:{}}
+var $5={constructor:this,classname:$1,_dbg_typename:this._dbg_name,_dbg_name:$1,prototype:$2?$2.make():new Object(),implementations:{}}
 this.addStaticProperty.call($5,"addStaticProperty",this.addStaticProperty)
 $5.addStaticProperty("addProperty",this.addProperty)
 $5.addStaticProperty("makeInterstitial",this.makeInterstitial)
@@ -390,7 +367,7 @@
 }
 var al=arguments.length
 if(!(typeof control=="string"||control instanceof String)||al>1!=control.indexOf("%")>=0){
-var $2=LzMessage.make()
+var $2=new LzMessage()
 for(var $3=0;$3<al;$3++){
 var $4=arguments[$3]
 var $5=$3==al-1?"\n":" "
@@ -409,7 +386,7 @@
 var $10=$6.length
 var $11=0
 var $12=0
-var $2=LzMessage.make()
+var $2=new LzMessage()
 while($11<$10){
 $12=$6.indexOf("%")
 if($12==-1){
@@ -677,17 +654,16 @@
 $1[$2[$3]]=LzDeclaredEvent
 }
 }
-var LzInheritedHash={make:function($1){
+function LzInheritedHash($1){
 var $2
 $2=function(){
 
 }
 if($1){
 $2.prototype=$1
-return(new $2())
+return new $2()
 }
-return(new Object)
-}}
+}
 var ConstructorMap={}
 var lz=ConstructorMap
 var LzNode=Class.make("LzNode",null,{initialize:function($1,$2,$3,$4){
@@ -698,7 +674,7 @@
 if($2&&$2["$hasdefaultattrs"]){
 $7=$2
 }else{
-$7=LzInheritedHash.make(this.defaultattrs)
+$7=new LzInheritedHash(this.defaultattrs)
 if($2){
 var $8=this.defaultattrs
 var $9="$refs" in $8&&$8.$refs
@@ -719,7 +695,7 @@
 continue
 }else{
 if(typeof $12=="object"){
-var $14=LzInheritedHash.make($13)
+var $14=new LzInheritedHash($13)
 for(var $15 in $12){
 $14[$15]=$12[$15]
 }
@@ -733,7 +709,7 @@
 }
 if($10){
 if(!$7.hasOwnProperty("$refs")){
-$7.$refs=LzInheritedHash.make($9)
+$7.$refs=new LzInheritedHash($9)
 }
 var $16=LzNode._ignoreAttribute
 for(var $11 in $10){
@@ -744,7 +720,7 @@
 }
 this._instanceAttrs=$7
 this._instanceChildren=$3
-var $17=LzInheritedHash.make($7)
+var $17=new LzInheritedHash($7)
 this.__LZisnew=!$4
 var $18="classChildren" in this.constructor.prototype?this.constructor.prototype.classChildren:null
 if($18&&$18.length){
@@ -805,19 +781,45 @@
 }
 }else{
 if($5!=null){
-this.setAttribute($4,$5)
+if(!this.__LZdeleted){
+var $lzsc$1190165364=this.setters
+if($lzsc$1190165364&&$4 in $lzsc$1190165364){
+this[$lzsc$1190165364[$4]]($5)
+}else{
+this[$4]=$5
+var $lzsc$263972551="on"+$4
+if($lzsc$263972551 in this){
+if(this[$lzsc$263972551].ready){
+this[$lzsc$263972551].sendEvent($5)
 }
 }
 }
 }
+}
+}
+}
+}
 return $3
 },__LZapplyStyleConstraints:function(){
 var $1=this.__LZstyleConstraints
 for(var $2 in $1){
 var $3=$1[$2]
 var $4=$3.call(this)
-this.setAttribute($2,$4)
+if(!this.__LZdeleted){
+var $lzsc$469215421=this.setters
+if($lzsc$469215421&&$2 in $lzsc$469215421){
+this[$lzsc$469215421[$2]]($4)
+}else{
+this[$2]=$4
+var $lzsc$1902115310="on"+$2
+if($lzsc$1902115310 in this){
+if(this[$lzsc$1902115310].ready){
+this[$lzsc$1902115310].sendEvent($4)
 }
+}
+}
+}
+}
 },construct:function($1,$2){
 var $3=$1
 this.parent=$3
@@ -846,7 +848,7 @@
 }
 var $8=$4.subnodes
 if($8==null){
-$8=(new Array)
+$8=new Array()
 $4.subnodes=$8
 }
 $8[$8.length]=this
@@ -991,27 +993,40 @@
 }else{
 return this[this.getters[$1]]()
 }
-},setAttribute:function($1,$2){
-if(this.__LZdeleted){
+},setAttribute:function($1,$2,$3){
+if(this.__LZdeleted||$3&&this[$1]==$2){
 return
 }
-var $3=this.setters
-if($3&&$1 in $3){
-this[$3[$1]]($2)
+var $4=this.setters
+if($4&&$1 in $4){
+this[$4[$1]]($2)
 }else{
-if($3==null){
+if($4==null){
 
 }
 this[$1]=$2
-var $4="on"+$1
-if($4 in this){
-if(this[$4].ready){
-this[$4].sendEvent($2)
+var $5="on"+$1
+if($5 in this){
+if(this[$5].ready){
+this[$5].sendEvent($2)
 }
 }
 }
 },setProp:function($1,$2){
-this.setAttribute($1,$2)
+if(!this.__LZdeleted){
+var $lzsc$1572297463=this.setters
+if($lzsc$1572297463&&$1 in $lzsc$1572297463){
+this[$lzsc$1572297463[$1]]($2)
+}else{
+this[$1]=$2
+var $lzsc$289782460="on"+$1
+if($lzsc$289782460 in this){
+if(this[$lzsc$289782460].ready){
+this[$lzsc$289782460].sendEvent($2)
+}
+}
+}
+}
 },getExpectedAttribute:function($1){
 var $2="e_"+$1
 if(!this[$2]){
@@ -1053,7 +1068,7 @@
 var $4=ConstructorMap[$1.name]
 var $5
 if($4){
-$5=$4.make(this,$1.attrs,"children" in $1?$1.children:null,$2)
+$5=new $4(this,$1.attrs,"children" in $1?$1.children:null,$2)
 }
 return $5
 },setters:{name:"setName",id:"setID",$events:"__LZsetEvents",$refs:"__LZstoreRefs",$delegates:"__LZstoreDelegates",options:"__LZsetOptions",placement:-1,datapath:"setDatapath",$setters:-1,$classrootdepth:"__LZsetClassRoot",$datapath:"__LZmakeDatapath"},__LZsetClassRoot:function($1){
@@ -1073,7 +1088,7 @@
 }
 },__LZaddSetter:function($1,$2){
 if(!this.hasOwnProperty("setters")){
-this.setters=LzInheritedHash.make(this.setters)
+this.setters=new LzInheritedHash(this.setters)
 }
 if("put" in this.setters){
 this.setters.put($1,$2)
@@ -1087,7 +1102,7 @@
 if(!this.__LZdelegates){
 this.__LZdelegates=[]
 }
-this.__LZdelegates.push(LzDataAttrBind.make(this.datapath,$1,$2))
+this.__LZdelegates.push(new LzDataAttrBind(this.datapath,$1,$2))
 },__LZdelayedSetters:{$refs:"__LZresolveRefs"},earlySetters:{name:1,id:2,$events:3,$delegates:4,$classrootdepth:5,$datapath:6},getters:{},__LZstoreDelegates:function($1){
 var $2=[]
 var $3=$1.length
@@ -1099,7 +1114,7 @@
 if(!this.__LZdelegates){
 this.__LZdelegates=[]
 }
-this.__LZdelegates.push(LzDelegate.make(this,$5,this,$1[$4]))
+this.__LZdelegates.push(new LzDelegate(this,$5,this,$1[$4]))
 }
 }
 if($2.length){
@@ -1174,7 +1189,7 @@
 $5=this
 }
 var $6=$1[$3+1]
-this.__LZdelegates.push(LzDelegate.make(this,$6,$5,$1[$3]))
+this.__LZdelegates.push(new LzDelegate(this,$6,$5,$1[$3]))
 }
 },applyConstraint:function($1,$2,$3){
 var $4=$3.length
@@ -1186,7 +1201,7 @@
 this[$5]=$2
 var $6
 for(var $7=0;$7<$4;$7+=2){
-var $8=LzDelegate.make(this,$5)
+var $8=new LzDelegate(this,$5)
 this.__LZdelegates.push($8)
 $6=$3[$7]
 if($6){
@@ -1233,11 +1248,11 @@
 if(null!=this.datapath&&$1!=LzNode._ignoreAttribute){
 this.datapath.setXPath($1)
 }else{
-LzDatapath.make(this,{xpath:$1})
+new LzDatapath(this,{xpath:$1})
 }
 },setData:function($1){
 this.data=$1
-var $2=this.datapath!=null?this.datapath:LzDatapath.make(this)
+var $2=this.datapath!=null?this.datapath:new LzDatapath(this)
 $2.setPointer($1)
 if(this.ondata.ready){
 this.ondata.sendEvent($1)
@@ -1251,7 +1266,7 @@
 },__LZsetDefaultHandler:function($1,$2){
 var $3="_handle"+$1
 this[$3]=$2
-var $4=LzDelegate.make(this,$3,this,$1)
+var $4=new LzDelegate(this,$3,this,$1)
 if(!this.__LZhandlers){
 this.__LZhandlers=[$4]
 }else{
@@ -1259,7 +1274,7 @@
 }
 },options:{},__LZsetOptions:function($1){
 if(!this.hasOwnProperty("options")){
-this.options=LzInheritedHash.make(this.options)
+this.options=new LzInheritedHash(this.options)
 }
 for(var $2 in $1){
 this.options[$2]=$1[$2]
@@ -1268,7 +1283,7 @@
 return this.options[$1]
 },setOption:function($1,$2){
 if(!this.hasOwnProperty("options")){
-this.options=LzInheritedHash.make(this.options)
+this.options=new LzInheritedHash(this.options)
 }
 this.options[$1]=$2
 },determinePlacement:function($1,$2,$3){
@@ -1294,7 +1309,7 @@
 var $3=this.subnodes?this.subnodes.concat():[]
 while($3.length>0){
 var $4=$3
-$3=(new Array)
+$3=new Array()
 for(var $5=$4.length-1;$5>=0;$5--){
 var $6=$4[$5]
 if($6[$1]==$2){
@@ -1398,14 +1413,27 @@
 },animate:function($1,$2,$3,$4,$5){
 if($3==0){
 var $6=$4?this[$1]+$2:$2
-this.setAttribute($1,$6)
+if(!this.__LZdeleted){
+var $lzsc$1732853902=this.setters
+if($lzsc$1732853902&&$1 in $lzsc$1732853902){
+this[$lzsc$1732853902[$1]]($6)
+}else{
+this[$1]=$6
+var $lzsc$1400830395="on"+$1
+if($lzsc$1400830395 in this){
+if(this[$lzsc$1400830395].ready){
+this[$lzsc$1400830395].sendEvent($6)
+}
+}
+}
+}
 return null
 }
 var $7={attribute:$1,to:$2,duration:$3,start:true,relative:$4,target:this}
 for(var $8 in $5){
 $7[$8]=$5[$8]
 }
-var $9=LzAnimator.make(null,$7)
+var $9=new LzAnimator(null,$7)
 return $9
 },toString:function(){
 return this.constructor.classname+" "+this.getDebugIdentification()
@@ -1460,7 +1488,7 @@
 }
 for(var $3 in {setters:true,getters:true,defaultattrs:true,options:true,__LZdelayedSetters:true,earlySetters:true}){
 if(!$1.hasOwnProperty($3)){
-$1[$3]=LzInheritedHash.make($1[$3])
+$1[$3]=new LzInheritedHash($1[$3])
 }
 }
 },_ignoreAttribute:{toString:function(){
@@ -1574,7 +1602,7 @@
 continue
 }else{
 if(typeof $27=="object"){
-var $29=LzInheritedHash.make($28)
+var $29=new LzInheritedHash($28)
 for(var $30 in $27){
 $29[$30]=$27[$30]
 }
@@ -1588,7 +1616,7 @@
 }
 if($24){
 if(!$22.hasOwnProperty("$refs")){
-$22.$refs=LzInheritedHash.make($23)
+$22.$refs=new LzInheritedHash($23)
 }
 var $31=LzNode._ignoreAttribute
 for(var $17 in $24){
@@ -1622,7 +1650,7 @@
 }
 var $3=$1[$2]
 if($3==LzDeclaredEvent||!$3){
-$3=LzEvent.make($1,$2,this)
+$3=new LzEvent($1,$2,this)
 }else{
 $3.addDelegate(this)
 }
@@ -1696,7 +1724,7 @@
 return
 }
 this.locked=true
-var $4=(new Array)
+var $4=new Array()
 var $5
 var $6=LzDelegate.__LZdelegatesQueue
 for(var $7=$2;$7>=0;$7--){
@@ -1788,18 +1816,13 @@
 }
 }},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 $3=$1.toString(16)
+var $4=($2?$2:0)-$3.length
+while($4>0){
+$3="0"+$3
+$4--
 }
-var $2=$2-$4.length
-while($2>0){
-$4="0"+$4
-$2--
-}
-return $4
+return $3
 }else{
 return $1
 }
@@ -1854,9 +1877,9 @@
 }},{tagname:"__libraryloadercomplete"})
 var LzResourceLibrary={}
 var getTimer=function(){
-return(new Date()).valueOf()-getTimer.startTime
+return new Date().valueOf()-getTimer.startTime
 }
-getTimer.startTime=(new Date()).valueOf()
+getTimer.startTime=new Date().valueOf()
 global=window
 var LzPool=function($1,$2,$3,$4){
 this.cache={}
@@ -2141,7 +2164,7 @@
 $1+="}"
 }
 document.write('<style type="text/css">'+$1+"</style>")
-},__re:(new RegExp("[A-Z]")),hyphenate:function($1){
+},__re:new RegExp("[A-Z]"),hyphenate:function($1){
 var $2=$1.search(this.__re)
 if($2!=-1){
 var $3=$1.substring($2,$2+1)
@@ -2313,7 +2336,7 @@
 this.loading=true
 this.source=$1
 if(!this.__ImgPool){
-this.__ImgPool=LzPool.make(LzSprite.prototype.__getImage,LzSprite.prototype.__gotImage,LzSprite.prototype.__destroyImage,this)
+this.__ImgPool=new LzPool(LzSprite.prototype.__getImage,LzSprite.prototype.__gotImage,LzSprite.prototype.__destroyImage,this)
 }
 var $3=this.__ImgPool.get($1)
 if(this.__LZimg){
@@ -2682,7 +2705,7 @@
 }
 LzSprite.prototype.__preloadFrames=function(){
 if(!this.__ImgPool){
-this.__ImgPool=LzPool.make(LzSprite.prototype.__getImage,LzSprite.prototype.__gotImage,LzSprite.prototype.__destroyImage,this)
+this.__ImgPool=new LzPool(LzSprite.prototype.__getImage,LzSprite.prototype.__gotImage,LzSprite.prototype.__destroyImage,this)
 }
 var $1=this.frames.length
 for(var $2=0;$2<$1;$2++){
@@ -3190,12 +3213,19 @@
 LzSprite.prototype.getZ=function(){
 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
+}
 LzSprite.prototype.__setCSSClassProperty=function($1,$2,$3){
 var $4=document.all?"rules":"cssRules"
 var $5=document.styleSheets
@@ -3249,7 +3279,7 @@
 }
 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)
+this.sprite=new LzSprite(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)
@@ -3309,7 +3339,7 @@
 this.__sprites[this.uid]=this
 }
 }
-LzTextSprite.prototype=LzSprite.make(null)
+LzTextSprite.prototype=new LzSprite(null)
 LzTextSprite.prototype.__initTextProperties=function($1){
 this.setFontName($1.font)
 this.setFontStyle($1.fontstyle)
@@ -3440,7 +3470,7 @@
 }
 }
 LzTextSprite.prototype.getTextfieldHeight=function(){
-if(this.fieldHeight!=null){
+if(this._styledirty!=true&&this.fieldHeight!=null){
 return this.fieldHeight
 }
 if(this.text==null||this.text==""){
@@ -3553,7 +3583,7 @@
 var $7=$4[$6]
 if($7==null){
 $7=document.createElement($6)
-$7.setAttribute("style",$3)
+Lz.__setAttr($7,"style",$3)
 document.body.appendChild($7)
 $4[$6]=$7
 }
@@ -3667,7 +3697,7 @@
 }
 this.__createInputText()
 }
-LzInputTextSprite.prototype=LzTextSprite.make(null)
+LzInputTextSprite.prototype=new LzTextSprite(null)
 LzInputTextSprite.prototype.____hpadding=2
 LzInputTextSprite.prototype.____wpadding=2
 LzInputTextSprite.prototype.__createInputText=function($1){
@@ -3676,17 +3706,17 @@
 }
 if(this.owner&&this.owner.password){
 this.__LzInputDiv=document.createElement("input")
-this.__LzInputDiv.setAttribute("type","password")
+Lz.__setAttr(this.__LzInputDiv,"type","password")
 }else{
 if(this.owner&&this.owner.multiline){
 this.__LzInputDiv=document.createElement("textarea")
 }else{
 this.__LzInputDiv=document.createElement("input")
-this.__LzInputDiv.setAttribute("type","text")
+Lz.__setAttr(this.__LzInputDiv,"type","text")
 }
 }
 if(this.quirks.firefox_autocomplete_bug){
-this.__LzInputDiv.setAttribute("autocomplete","off")
+Lz.__setAttr(this.__LzInputDiv,"autocomplete","off")
 }
 this.__LzInputDiv.owner=this
 if(this.quirks.emulate_flash_font_metrics){
@@ -3700,12 +3730,12 @@
 this.__LzInputDiv.className="lzinputtext"
 }
 if(this.owner){
-this.__LzInputDiv.setAttribute("name",this.owner.name)
+Lz.__setAttr(this.__LzInputDiv,"name",this.owner.name)
 }
 if($1==null){
 $1=""
 }
-this.__LzInputDiv.setAttribute("value",$1)
+Lz.__setAttr(this.__LzInputDiv,"value",$1)
 if(this.quirks.fix_clickable){
 if(this.quirks.fix_ie_clickable){
 this.__LZinputclickdiv=document.createElement("img")
@@ -4021,9 +4051,9 @@
 }
 return $3
 }
-var LzXMLParser=(new Object)
+var LzXMLParser=new Object()
 LzXMLParser.parseXML=function($1,$2,$3){
-var $4=(new DOMParser())
+var $4=new DOMParser()
 var $5=$4.parseFromString($1,"text/xml")
 return $5.childNodes[0]
 }
@@ -4033,12 +4063,12 @@
 }
 DOMParser.prototype.parseFromString=function($1,$2){
 if(typeof window.ActiveXObject!="undefined"){
-var $3=(new ActiveXObject("MSXML.DomDocument"))
+var $3=new ActiveXObject("MSXML.DomDocument")
 $3.loadXML($1)
 return $3
 }else{
 if(typeof XMLHttpRequest!="undefined"){
-var $4=(new XMLHttpRequest)
+var $4=new XMLHttpRequest()
 $4.open("GET","data:"+($2||"application/xml")+";charset=utf-8,"+encodeURIComponent($1),false)
 if($4.overrideMimeType){
 $4.overrideMimeType($2)
@@ -4049,14 +4079,14 @@
 }
 }
 }
-var LzXMLTranslator=(new Object)
+var LzXMLTranslator=new Object()
 LzXMLTranslator.copyXML=function($1,$2,$3){
 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.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,$4){
 if(!$1){
 return $1
@@ -4071,7 +4101,7 @@
 var $7=$5
 $5=$5.replace(LzXMLTranslator.stringTrimPat,"")
 }
-$6=LzDataText.make($5)
+$6=new LzDataText($5)
 return $6
 }else{
 if($1.nodeType==1||$1.nodeType==9){
@@ -4101,7 +4131,7 @@
 $16=$16.substring($17+1)
 }
 }
-$6=LzDataElement.make($16,$9)
+$6=new LzDataElement($16,$9)
 var $18=$1.childNodes
 var $19=[]
 for(var $20=0;$20<$18.length;$20++){
@@ -4176,7 +4206,7 @@
 LzHTTPLoader.PUT_METHOD="PUT"
 LzHTTPLoader.DELETE_METHOD="DELETE"
 LzHTTPLoader.prototype.open=function($1,$2,$3,$4){
-this.req=window.XMLHttpRequest?(new XMLHttpRequest()):(new ActiveXObject("Microsoft.XMLHTTP"))
+this.req=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP")
 this.requesturl=$2
 this.requestmethod=$1
 }
@@ -4194,7 +4224,7 @@
 $6["headers"]=$8
 }
 if(!this.options.ccache){
-$6.__lzbc__=(new Date()).getTime()
+$6.__lzbc__=new Date().getTime()
 }
 $5+="?"
 var $9=""
@@ -4218,7 +4248,7 @@
 this.timeout=$1
 }
 LzHTTPLoader.prototype.setupTimeout=function($1,$2){
-var $3=(new Date()).getTime()+$2
+var $3=new Date().getTime()+$2
 LzHTTPLoader.activeRequests.push($1,$3)
 setTimeout("LzHTTPLoader.__LZcheckXMLHTTPTimeouts()",$2)
 }
@@ -4239,7 +4269,7 @@
 for(var $2=0;$2<$1.length;$2+=2){
 var $3=$1[$2]
 var $4=$1[$2+1]
-var $5=(new Date()).getTime()
+var $5=new Date().getTime()
 if($5>$4){
 if($3.req){
 $3.req.abort()
@@ -4252,7 +4282,7 @@
 }
 }
 LzHTTPLoader.prototype.getElapsedTime=function(){
-return(new Date()).getTime()-this.gstart
+return new Date().getTime()-this.gstart
 }
 LzHTTPLoader.prototype.__setRequestHeaders=function($1,$2){
 if($2!=null){
@@ -4335,7 +4365,7 @@
 this.__resizeEvent()
 }}
 var LzContextMenu=Class.make("LzContextMenu",LzNode,{initialize:function($1){
-this.__LZmousedowndel=LzDelegate.make(this,"__hide")
+this.__LZmousedowndel=new LzDelegate(this,"__hide")
 this.items=[]
 this.setDelegate($1)
 },showbuiltins:false,setDelegate:function($1){
@@ -4346,8 +4376,8 @@
 var $1=document.getElementById("lzcontextmenu")
 if(!$1){
 $1=document.createElement("div")
-$1.setAttribute("id","lzcontextmenu")
-$1.setAttribute("style","display: none")
+Lz.__setAttr($1,"id","lzcontextmenu")
+Lz.__setAttr($1,"style","display: none")
 document.body.appendChild($1)
 }
 if(this.onmenuopen.ready){
@@ -4397,7 +4427,7 @@
 },getItems:function(){
 return this.items
 },makeMenuItem:function($1,$2){
-var $3=LzContextMenuItem.make($1,$2)
+var $3=new LzContextMenuItem($1,$2)
 return $3
 }},null);(function(){
 with(LzContextMenu){
@@ -4441,7 +4471,7 @@
 }
 }
 })()
-var LzView=Class.make("LzView",LzNode,{DOUBLE_CLICK_TIME:500,construct:function($1,$2){
+var LzView=Class.make("LzView",LzNode,{DOUBLE_CLICK_TIME:500,capabilities:LzSprite.prototype.capabilities,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
@@ -4476,10 +4506,23 @@
 }
 },spriteAttribute:function($1,$2){
 if(this[$1]){
-this.setAttribute($1,$2)
+if(!this.__LZdeleted){
+var $lzsc$716596955=this.setters
+if($lzsc$716596955&&$1 in $lzsc$716596955){
+this[$lzsc$716596955[$1]]($2)
+}else{
+this[$1]=$2
+var $lzsc$1080520445="on"+$1
+if($lzsc$1080520445 in this){
+if(this[$lzsc$1080520445].ready){
+this[$lzsc$1080520445].sendEvent($2)
 }
+}
+}
+}
+}
 },__makeSprite:function($1){
-this.sprite=LzSprite.make(this,false,$1)
+this.sprite=new LzSprite(this,false,$1)
 },init:function(){
 this.sprite.init(this.visible)
 },addSubview:function($1){
@@ -4526,7 +4569,7 @@
 this.__LZlayout=null
 return
 }
-this.__LZlayout=ConstructorMap[$2].make(this,$3)
+this.__LZlayout=new (ConstructorMap[$2])(this,$3)
 }
 },setFontName:function($1,$2){
 this.fontname=$1
@@ -4538,7 +4581,7 @@
 var $3=this.subviews.concat()
 while($3.length>0){
 var $4=$3
-$3=(new Array)
+$3=new Array()
 for(var $5=$4.length-1;$5>=0;$5--){
 var $6=$4[$5]
 if($6[$1]==$2){
@@ -4704,10 +4747,10 @@
 return
 }
 this.visibility=$1
-this.__LZupdateShown()
 if(this.onvisibility.ready){
 this.onvisibility.sendEvent($1)
 }
+this.__LZupdateShown()
 },__LZupdateShown:function(){
 if(this.visibility=="collapse"){
 var $1=this.__LZvizO&&this.__LZvizDat&&this.__LZvizLoad
@@ -4795,8 +4838,10 @@
 }
 }
 },setOpacity:function($1){
-if(this.sprite.capabilities.opacity){
+if(this.capabilities.opacity){
 this.sprite.setOpacity($1)
+}else{
+
 }
 this.opacity=$1
 if(this.onopacity.ready){
@@ -4813,7 +4858,7 @@
 this._x=$1
 this.x=$1
 if(this.__LZhasoffset){
-if(this.sprite.capabilities.rotation){
+if(this.capabilities.rotation){
 $1-=this.xoffset*this.__LZrcos-this.yoffset*this.__LZrsin
 }else{
 $1-=this.xoffset
@@ -4835,7 +4880,7 @@
 this._y=$1
 this.y=$1
 if(this.__LZhasoffset){
-if(this.sprite.capabilities.rotation){
+if(this.capabilities.rotation){
 $1-=this.xoffset*this.__LZrsin+this.yoffset*this.__LZrcos
 }else{
 $1-=this.yoffset
@@ -4853,8 +4898,10 @@
 }
 }
 },setRotation:function($1){
-if(this.sprite.capabilities.rotation){
+if(this.capabilities.rotation){
 this.sprite.setRotation($1)
+}else{
+
 }
 this.rotation=$1
 var $2=Math.PI/180*this.rotation
@@ -4876,18 +4923,56 @@
 },setAlign:function($1){
 if($1=="left"){
 this.releaseConstraint("x")
-this.setAttribute("x",0)
+if(!this.__LZdeleted){
+var $lzsc$1703518339=this.setters
+if($lzsc$1703518339&&"x" in $lzsc$1703518339){
+this[$lzsc$1703518339["x"]](0)
 }else{
+this["x"]=0
+if("onx" in this){
+if(this["onx"].ready){
+this["onx"].sendEvent(0)
+}
+}
+}
+}
+}else{
 if($1=="center"){
 var $2=function(){
-this.setAttribute("x",this.immediateparent.width/2-this.width/2)
+var $lzsc$1689684331=this.immediateparent.width/2-this.width/2
+if(!this.__LZdeleted){
+var $lzsc$105138784=this.setters
+if($lzsc$105138784&&"x" in $lzsc$105138784){
+this[$lzsc$105138784["x"]]($lzsc$1689684331)
+}else{
+this["x"]=$lzsc$1689684331
+if("onx" in this){
+if(this["onx"].ready){
+this["onx"].sendEvent($lzsc$1689684331)
 }
+}
+}
+}
+}
 this.setPosConstraint(this.immediateparent,$2,"width")
 }else{
 if($1=="right"){
 var $2=function(){
-this.setAttribute("x",this.immediateparent.width-this.width)
+var $lzsc$185694933=this.immediateparent.width-this.width
+if(!this.__LZdeleted){
+var $lzsc$888270527=this.setters
+if($lzsc$888270527&&"x" in $lzsc$888270527){
+this[$lzsc$888270527["x"]]($lzsc$185694933)
+}else{
+this["x"]=$lzsc$185694933
+if("onx" in this){
+if(this["onx"].ready){
+this["onx"].sendEvent($lzsc$185694933)
 }
+}
+}
+}
+}
 this.setPosConstraint(this.immediateparent,$2,"width")
 }
 }
@@ -4945,18 +5030,56 @@
 },setValign:function($1){
 if($1=="top"){
 this.releaseConstraint("y")
-this.setAttribute("y",0)
+if(!this.__LZdeleted){
+var $lzsc$1289201669=this.setters
+if($lzsc$1289201669&&"y" in $lzsc$1289201669){
+this[$lzsc$1289201669["y"]](0)
 }else{
+this["y"]=0
+if("ony" in this){
+if(this["ony"].ready){
+this["ony"].sendEvent(0)
+}
+}
+}
+}
+}else{
 if($1=="middle"){
 var $2=function(){
-this.setAttribute("y",this.immediateparent.height/2-this.height/2)
+var $lzsc$4651145=this.immediateparent.height/2-this.height/2
+if(!this.__LZdeleted){
+var $lzsc$1691777991=this.setters
+if($lzsc$1691777991&&"y" in $lzsc$1691777991){
+this[$lzsc$1691777991["y"]]($lzsc$4651145)
+}else{
+this["y"]=$lzsc$4651145
+if("ony" in this){
+if(this["ony"].ready){
+this["ony"].sendEvent($lzsc$4651145)
 }
+}
+}
+}
+}
 this.setPosConstraint(this.immediateparent,$2,"height")
 }else{
 if($1=="bottom"){
 var $2=function(){
-this.setAttribute("y",this.immediateparent.height-this.height)
+var $lzsc$175394630=this.immediateparent.height-this.height
+if(!this.__LZdeleted){
+var $lzsc$567574167=this.setters
+if($lzsc$567574167&&"y" in $lzsc$567574167){
+this[$lzsc$567574167["y"]]($lzsc$175394630)
+}else{
+this["y"]=$lzsc$175394630
+if("ony" in this){
+if(this["ony"].ready){
+this["ony"].sendEvent($lzsc$175394630)
 }
+}
+}
+}
+}
 this.setPosConstraint(this.immediateparent,$2,"height")
 }
 }
@@ -4970,12 +5093,16 @@
 },getColor:function(){
 return this.sprite.getColor()
 },setColorTransform:function($1){
-if(this.sprite.capabilities.colortransform){
+if(this.capabilities.colortransform){
 this.sprite.setColorTransform($1)
+}else{
+
 }
 },getColorTransform:function(){
-if(this.sprite.capabilities.colortransform){
+if(this.capabilities.colortransform){
 return this.sprite.getColorTransform()
+}else{
+
 }
 },getWidth:function(){
 return this.width
@@ -5112,13 +5239,41 @@
 var $4=$2[$1]
 if($1=="x"||$1=="y"){
 $3.update($1)
-this.setAttribute($1,($4-$3.offset[$1])/$3.scale[$1])
+var $lzsc$259439822=($4-$3.offset[$1])/$3.scale[$1]
+if(!this.__LZdeleted){
+var $lzsc$2040884966=this.setters
+if($lzsc$2040884966&&$1 in $lzsc$2040884966){
+this[$lzsc$2040884966[$1]]($lzsc$259439822)
 }else{
+this[$1]=$lzsc$259439822
+var $lzsc$1128460375="on"+$1
+if($lzsc$1128460375 in this){
+if(this[$lzsc$1128460375].ready){
+this[$lzsc$1128460375].sendEvent($lzsc$259439822)
+}
+}
+}
+}
+}else{
 if($1=="width"||$1=="height"){
 var $5=$1=="width"?"x":"y"
 $3.update($5)
-this.setAttribute($1,$4/$3.scale[$5])
+var $lzsc$153420007=$4/$3.scale[$5]
+if(!this.__LZdeleted){
+var $lzsc$130966124=this.setters
+if($lzsc$130966124&&$1 in $lzsc$130966124){
+this[$lzsc$130966124[$1]]($lzsc$153420007)
 }else{
+this[$1]=$lzsc$153420007
+var $lzsc$607604885="on"+$1
+if($lzsc$607604885 in this){
+if(this[$lzsc$607604885].ready){
+this[$lzsc$607604885].sendEvent($lzsc$153420007)
+}
+}
+}
+}
+}else{
 
 }
 }
@@ -5138,11 +5293,11 @@
 }
 },__LZviewLinks:null,getLinkage:function($1){
 if(this.__LZviewLinks==null){
-this.__LZviewLinks=(new Object)
+this.__LZviewLinks=new Object()
 }
 var $2=$1.getUID()
 if(this.__LZviewLinks[$2]==null){
-this.__LZviewLinks[$2]=LzViewLinkage.make(this,$1)
+this.__LZviewLinks[$2]=new LzViewLinkage(this,$1)
 }
 return this.__LZviewLinks[$2]
 },mouseevent:function($1){
@@ -5255,20 +5410,28 @@
 },stop:function($1,$2){
 this.sprite.stop($1,$2)
 },setVolume:function($1){
-if(this.sprite.capabilities.audio){
+if(this.capabilities.audio){
 this.sprite.setVolume($1)
+}else{
+
 }
 },getVolume:function(){
-if(this.sprite.capabilities.audio){
+if(this.capabilities.audio){
 return this.sprite.getVolume()
+}else{
+
 }
 },setPan:function($1){
-if(this.sprite.capabilities.audio){
+if(this.capabilities.audio){
 this.sprite.setPan($1)
+}else{
+
 }
 },getPan:function(){
-if(this.sprite.capabilities.audio){
+if(this.capabilities.audio){
 return this.sprite.getPan()
+}else{
+
 }
 },getZ:function(){
 return this.sprite.getZ()
@@ -5308,28 +5471,40 @@
 },setShowHandCursor:function($1){
 this.sprite.setShowHandCursor($1)
 },setAccessible:function($1){
-if(this.sprite.capabilities.accessibility){
+if(this.capabilities.accessibility){
 this.sprite.setAccessible($1)
+}else{
+
 }
 },setAAActive:function($1,$2){
-if(this.sprite.capabilities.accessibility){
+if(this.capabilities.accessibility){
 this.sprite.setAAActive($1,$2)
+}else{
+
 }
 },setAAName:function($1,$2){
-if(this.sprite.capabilities.accessibility){
+if(this.capabilities.accessibility){
 this.sprite.setAAName($1,$2)
+}else{
+
 }
 },setAADescription:function($1,$2){
-if(this.sprite.capabilities.accessibility){
+if(this.capabilities.accessibility){
 this.sprite.setAADescription($1,$2)
+}else{
+
 }
 },setAATabIndex:function($1,$2){
-if(this.sprite.capabilities.accessibility){
+if(this.capabilities.accessibility){
 this.sprite.setAATabIndex($1,$2)
+}else{
+
 }
 },setAASilent:function($1,$2){
-if(this.sprite.capabilities.accessibility){
+if(this.capabilities.accessibility){
 this.sprite.setAASilent($1,$2)
+}else{
+
 }
 },shouldYieldFocus:function(){
 return true
@@ -5337,6 +5512,8 @@
 this.sprite.setContextMenu($1)
 },getContextMenu:function(){
 return this.sprite.getContextMenu()
+},__warnCapability:function($1){
+Debug.warn("The %s runtime does not support %s",lzr,$1)
 }},{tagname:"view",__LZproxypolicies:[],__LZcheckProxyPolicy:function($1){
 var $2=LzView.__LZproxypolicies
 for(var $3=$2.length-1;$3>=0;$3--){
@@ -5518,8 +5695,8 @@
 }
 })()
 var LzViewLinkage=Class.make("LzViewLinkage",null,{initialize:function($1,$2){
-this.scale=(new Object())
-this.offset=(new Object())
+this.scale=new Object()
+this.offset=new Object()
 if($1==$2){
 return
 }
@@ -5620,6 +5797,7 @@
 if("pattern" in $2&&$2.pattern!=null){
 this.setPattern($2.pattern)
 }
+if(this.capabilities.advancedfonts){
 if("antiAliasType" in $2&&$2.antiAliasType!=null){
 this.setAntiAliasType($2.antiAliasType)
 }else{
@@ -5640,8 +5818,19 @@
 }else{
 this.setThickness(0)
 }
+if(!LzText.prototype.setters.antiAliasType){
+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
+}
+}
 },__makeSprite:function($1){
-this.sprite=LzTextSprite.make(this,$1)
+this.sprite=new LzTextSprite(this,$1)
 },getMCRef:function(){
 return this.sprite.getMCRef()
 },setResize:function($1){
@@ -5784,9 +5973,9 @@
 }
 }
 return $4
-},setText:function($1){
+},setText:function($1,$2){
 $1+=""
-if($1==this.text){
+if($2!=true&&$1==this.text){
 return
 }
 if(this.visible){
@@ -5795,15 +5984,15 @@
 this.sprite.setText($1)
 this.text=$1
 if(this.width==0||this.resize&&this.multiline==false){
-var $2=this.getTextWidth()
-if($2!=this.width){
-this.setWidth($2)
+var $3=this.getTextWidth()
+if($3!=this.width){
+this.setWidth($3)
 }
 }
 if(this.sizeToHeight){
-var $3=this.sprite.getTextfieldHeight()
-if($3>0){
-this.setHeight($3)
+var $4=this.sprite.getTextfieldHeight()
+if($4>0){
+this.setHeight($4)
 }
 }
 if(this.ontext.ready){
@@ -5833,11 +6022,11 @@
 },setFontName:function($1){
 this.sprite.setFontName($1)
 this.fontname=$1
-this.setText(this.getText())
+this.setText(this.getText(),true)
 },setFontSize:function($1){
 this.sprite.setFontSize($1)
 this.fontsize=$1
-this.setText(this.getText())
+this.setText(this.getText(),true)
 },setFontStyle:function($1){
 this.sprite.setFontStyle($1)
 this.fontstyle=$1
@@ -5851,56 +6040,72 @@
 },setEmbedFonts:function($1){
 this.sprite.setEmbedFonts($1)
 },setAntiAliasType:function($1){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 if($1=="normal"||$1=="advanced"){
 this.antiAliasType=$1
 this.sprite.setAntiAliasType($1)
 }else{
 
 }
+}else{
+
 }
 },getAntiAliasType:function(){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 return this.antiAliasType
+}else{
+
 }
 },setGridFit:function($1){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 if($1=="none"||$1=="pixel"||$1=="subpixel"){
 this.gridFit=$1
 this.sprite.setGridFit($1)
 }else{
 
 }
+}else{
+
 }
 },getGridFit:function(){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 return this.gridFit
+}else{
+
 }
 },setSharpness:function($1){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 if($1>=-400&&$1<=400){
 this.sharpness=$1
 this.sprite.setSharpness($1)
 }else{
 
 }
+}else{
+
 }
 },getSharpness:function(){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 return this.sharpness
+}else{
+
 }
 },setThickness:function($1){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 if($1>=-200&&$1<=200){
 this.thickness=$1
 this.sprite.setThickness($1)
 }else{
 
 }
+}else{
+
 }
 },getThickness:function(){
-if(this.sprite.capabilities.advancedfonts){
+if(this.capabilities.advancedfonts){
 return this.thickness
+}else{
+
 }
 },setScroll:function($1){
 this.sprite.setScroll($1)
@@ -5920,6 +6125,8 @@
 DeclareEvent(prototype,"onpattern")
 DeclareEvent(prototype,"onscroll")
 DeclareEvent(prototype,"onmaxscroll")
+DeclareEvent(prototype,"onhscroll")
+DeclareEvent(prototype,"onmaxhscroll")
 defaultattrs.pixellock=true
 setters.text="setText"
 setters.resize="setResize"
@@ -5931,14 +6138,6 @@
 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"
@@ -5961,19 +6160,29 @@
 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")
+this._onfocusDel=new LzDelegate(this,"_gotFocusEvent",this,"onfocus")
+this._onblurDel=new LzDelegate(this,"_gotBlurEvent",this,"onblur")
 },__makeSprite:function($1){
-this.sprite=LzInputTextSprite.make(this,$1)
+this.sprite=new LzInputTextSprite(this,$1)
 },_gotFocusEvent:function(){
+this._focused=true
 this.sprite.gotFocus()
 },_gotBlurEvent:function(){
+this._focused=false
 this.sprite.gotBlur()
 },inputtextevent:function($1,$2){
+if($1=="onfocus"&&this._focused){
+return
+}
+if($1=="onblur"&&!this._focused){
+return
+}
 if($1=="onfocus"||$1=="onmousedown"){
+this._focused=true
 if(LzFocus.getFocus()!=this){
 var $3=LzKeys.isKeyDown("tab")
 LzFocus.setFocus(this,$3)
+return
 }
 }else{
 if($1=="onchange"){
@@ -5984,22 +6193,38 @@
 this.ontext.sendEvent($2)
 }
 return
+}else{
+if($1=="onblur"){
+this._focused=false
 }
 }
+}
 if(this[$1].ready){
 this[$1].sendEvent($2)
 }
 },focusable:true,updateData:function(){
 return this.sprite.text
 },setEnabled:function($1){
-this.setAttribute("focusable",$1)
+if(!this.__LZdeleted){
+var $lzsc$587769273=this.setters
+if($lzsc$587769273&&"focusable" in $lzsc$587769273){
+this[$lzsc$587769273["focusable"]]($1)
+}else{
+this["focusable"]=$1
+if("onfocusable" in this){
+if(this["onfocusable"].ready){
+this["onfocusable"].sendEvent($1)
+}
+}
+}
+}
 this.enabled=$1
 this.sprite.setEnabled($1)
 if(this.onenabled.ready){
 this.onenabled.sendEvent($1)
 }
 },setHTML:function($1){
-if(this.sprite.capabilities["htmlinputtext"]){
+if(this.capabilities["htmlinputtext"]){
 this.sprite.setHTML($1)
 }else{
 
@@ -6064,14 +6289,14 @@
 this.proxied=$1.proxied==true
 }
 delete $1.proxied
-this.sprite=LzSprite.make(this,true)
+this.sprite=new LzSprite(this,true)
 this.__canvaswidthratio=null
 this.width=Number($1.width)
 if(isNaN(this.width)){
 if($1.width.charAt($1.width.length-1)=="%"){
 var $3=Number($1.width.substr(0,$1.width.length-1))
 this.__canvaswidthratio=$3/100
-if(this.sprite.capabilities.scalecanvastopercentage!=true){
+if(this.capabilities.scalecanvastopercentage!=true){
 this.__canvaswidthratio=1
 }
 }else{
@@ -6085,7 +6310,7 @@
 if($1.height.charAt($1.height.length-1)=="%"){
 var $3=Number($1.height.substr(0,$1.height.length-1))
 this.__canvasheightratio=$3/100
-if(this.sprite.capabilities.scalecanvastopercentage!=true){
+if(this.capabilities.scalecanvastopercentage!=true){
 this.__canvasheightratio=1
 }
 }else{
@@ -6113,9 +6338,9 @@
 global.canvas=this
 this.parent=this
 this.makeMasked()
-this.__LZmouseupDel=LzDelegate.make(this,"__LZmouseup",LzGlobalMouse,"onmouseup")
-this.__LZmousedownDel=LzDelegate.make(this,"__LZmousedown",LzGlobalMouse,"onmousedown")
-this.__LZmousemoveDel=LzDelegate.make(this,"__LZmousemove",LzGlobalMouse,"onmousemove")
+this.__LZmouseupDel=new LzDelegate(this,"__LZmouseup",LzGlobalMouse,"onmouseup")
+this.__LZmousedownDel=new LzDelegate(this,"__LZmousedown",LzGlobalMouse,"onmousedown")
+this.__LZmousemoveDel=new LzDelegate(this,"__LZmousemove",LzGlobalMouse,"onmousemove")
 LzPlatform.initCanvas(this)
 },__LZmouseup:function(){
 if(this.onmouseup.ready){
@@ -6130,7 +6355,7 @@
 this.onmousedown.sendEvent()
 }
 },__makeSprite:function($1){
-this.sprite=LzSprite.make(this,true,$1)
+this.sprite=new LzSprite(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){
 if($2==null){
 $2=this.lpsversion
@@ -6158,7 +6383,7 @@
 },toString:function(){
 return "This is the canvas"
 },initDone:function(){
-var $1=(new Array)
+var $1=new Array()
 for(var $2=0;$2<this._lzinitialsubviews.length;$2++){
 if("initimmediate" in this._lzinitialsubviews[$2].attrs&&this._lzinitialsubviews[$2].attrs.initimmediate){
 $1.push(this._lzinitialsubviews[$2])
@@ -6181,7 +6406,7 @@
 }
 if(this.initdelay>0){
 LzInstantiator.halt()
-this.initokdel=LzDelegate.make(this,"okToInit")
+this.initokdel=new LzDelegate(this,"okToInit")
 LzTimer.addTimer(this.initokdel,this.initdelay)
 }else{
 this.okToInit()
@@ -6276,7 +6501,7 @@
 }
 }
 })()
-var LzPlatform=(new Object())
+var LzPlatform=new Object()
 LzPlatform.initCanvas=function($1){
 LzPlatform.buildDefaultMenu($1)
 }
@@ -6293,9 +6518,9 @@
 LzBrowser.loadURL($3,"lz_source")
 }
 LzPlatform.buildDefaultMenu=function($1){
-$1.__LZDefaultCanvasMenu=LzContextMenu.make()
-$1.__LZdefaultMenuItem=LzContextMenuItem.make("About OpenLaszlo...",LzDelegate.make(LzPlatform,"__LZdefaultMenuItemHandler"))
-$1.__LZviewSourceMenuItem=LzContextMenuItem.make("View Source",LzDelegate.make(LzPlatform,"__LZviewSourceMenuItemHandler"))
+$1.__LZDefaultCanvasMenu=new LzContextMenu()
+$1.__LZdefaultMenuItem=new LzContextMenuItem("About OpenLaszlo...",new LzDelegate(LzPlatform,"__LZdefaultMenuItemHandler"))
+$1.__LZviewSourceMenuItem=new LzContextMenuItem("View Source",new LzDelegate(LzPlatform,"__LZviewSourceMenuItemHandler"))
 $1.__LZDefaultCanvasMenu.hideBuiltInItems()
 $1.__LZDefaultCanvasMenu.addItem($1.__LZdefaultMenuItem)
 if($1.proxied){
@@ -6327,7 +6552,7 @@
 this.target=this.immediateparent
 }
 if(!this.updateDel){
-this.updateDel=LzDelegate.make(this,"update")
+this.updateDel=new LzDelegate(this,"update")
 }
 },init:function(){
 if(!this.target){
@@ -6367,7 +6592,7 @@
 return false
 }
 if(this.onstart.ready){
-this.onstart.sendEvent((new Date()).getTime())
+this.onstart.sendEvent(new Date().getTime())
 }
 this.isactive=true
 this.crepeat=this.repeat
@@ -6419,10 +6644,10 @@
 $1=!this.paused
 }
 if(this.paused&&!$1){
-this.__LZaddToStartTime((new Date()).getTime()-this.__LZpauseTime)
+this.__LZaddToStartTime(new Date().getTime()-this.__LZpauseTime)
 }else{
 if(!this.paused&&$1){
-this.__LZpauseTime=(new Date()).getTime()
+this.__LZpauseTime=new Date().getTime()
 }
 }
 this.paused=$1
@@ -6454,7 +6679,7 @@
 this.onfinish.sendEvent(this)
 }
 if(this.onstop.ready){
-this.onstop.sendEvent((new Date()).getTime())
+this.onstop.sendEvent(new Date().getTime())
 }
 },checkRepeat:function(){
 if(this.crepeat==null||this.crepeat==1){
@@ -6464,7 +6689,7 @@
 if(this.crepeat>0){
 this.crepeat--
 if(this.onrepeat.ready){
-this.onrepeat.sendEvent((new Date()).getTime())
+this.onrepeat.sendEvent(new Date().getTime())
 }
 }
 this.resetAnimator()
@@ -6552,8 +6777,24 @@
 },prepareStart:function(){
 this.crepeat=this.repeat
 if(this.from!=null){
-this.target.setAttribute(this.attribute,Number(this.from))
+var $lzsc$1148294117=this.target
+var $lzsc$1454881064=this.attribute
+var $lzsc$261822958=Number(this.from)
+if(!$lzsc$1148294117.__LZdeleted){
+var $lzsc$662786229=$lzsc$1148294117.setters
+if($lzsc$662786229&&$lzsc$1454881064 in $lzsc$662786229){
+$lzsc$1148294117[$lzsc$662786229[$lzsc$1454881064]]($lzsc$261822958)
+}else{
+$lzsc$1148294117[$lzsc$1454881064]=$lzsc$261822958
+var $lzsc$599999365="on"+$lzsc$1454881064
+if($lzsc$599999365 in $lzsc$1148294117){
+if($lzsc$1148294117[$lzsc$599999365].ready){
+$lzsc$1148294117[$lzsc$599999365].sendEvent($lzsc$261822958)
 }
+}
+}
+}
+}
 if(this.relative){
 this.to=this.origto
 }else{
@@ -6566,7 +6807,23 @@
 this.doBegin=true
 },resetAnimator:function(){
 if(this.from!=null){
-this.target.setAttribute(this.attribute,this.from)
+var $lzsc$1077223612=this.target
+var $lzsc$2146838337=this.attribute
+var $lzsc$57260329=this.from
+if(!$lzsc$1077223612.__LZdeleted){
+var $lzsc$1397644495=$lzsc$1077223612.setters
+if($lzsc$1397644495&&$lzsc$2146838337 in $lzsc$1397644495){
+$lzsc$1077223612[$lzsc$1397644495[$lzsc$2146838337]]($lzsc$57260329)
+}else{
+$lzsc$1077223612[$lzsc$2146838337]=$lzsc$57260329
+var $lzsc$2039105122="on"+$lzsc$2146838337
+if($lzsc$2039105122 in $lzsc$1077223612){
+if($lzsc$1077223612[$lzsc$2039105122].ready){
+$lzsc$1077223612[$lzsc$2039105122].sendEvent($lzsc$57260329)
+}
+}
+}
+}
 var $1=this.from-this.target.getExpectedAttribute(this.attribute)
 this.target.addToExpectedAttribute(this.attribute,$1)
 }
@@ -6609,7 +6866,23 @@
 this.target[$1].c-=1
 if(this.target[$1].c<=0){
 this.target[$1].c=0
-this.target.setAttribute(this.attribute,this.target[$1].v)
+var $lzsc$1153693535=this.target
+var $lzsc$869977507=this.attribute
+var $lzsc$1245252838=this.target[$1].v
+if(!$lzsc$1153693535.__LZdeleted){
+var $lzsc$469238521=$lzsc$1153693535.setters
+if($lzsc$469238521&&$lzsc$869977507 in $lzsc$469238521){
+$lzsc$1153693535[$lzsc$469238521[$lzsc$869977507]]($lzsc$1245252838)
+}else{
+$lzsc$1153693535[$lzsc$869977507]=$lzsc$1245252838
+var $lzsc$431615111="on"+$lzsc$869977507
+if($lzsc$431615111 in $lzsc$1153693535){
+if($lzsc$1153693535[$lzsc$431615111].ready){
+$lzsc$1153693535[$lzsc$431615111].sendEvent($lzsc$1245252838)
+}
+}
+}
+}
 this.target[$1].v=null
 }
 this.__LZhalt()
@@ -6648,8 +6921,24 @@
 },setValue:function($1){
 var $2=$1-this.currentValue
 if(this.target.setAttribute){
-this.target.setAttribute(this.attribute,this.target[this.attribute]+$2)
+var $lzsc$1695335672=this.target
+var $lzsc$493979173=this.attribute
+var $lzsc$813556745=this.target[this.attribute]+$2
+if(!$lzsc$1695335672.__LZdeleted){
+var $lzsc$2009618289=$lzsc$1695335672.setters
+if($lzsc$2009618289&&$lzsc$493979173 in $lzsc$2009618289){
+$lzsc$1695335672[$lzsc$2009618289[$lzsc$493979173]]($lzsc$813556745)
+}else{
+$lzsc$1695335672[$lzsc$493979173]=$lzsc$813556745
+var $lzsc$2107882225="on"+$lzsc$493979173
+if($lzsc$2107882225 in $lzsc$1695335672){
+if($lzsc$1695335672[$lzsc$2107882225].ready){
+$lzsc$1695335672[$lzsc$2107882225].sendEvent($lzsc$813556745)
 }
+}
+}
+}
+}
 this.currentValue=$1
 },toString:function(){
 return "Animator for "+this.target+" attribute:"+this.attribute+" to:"+this.to
@@ -6663,23 +6952,23 @@
 })()
 var LzLayout=Class.make("LzLayout",LzNode,{locked:2,subviews:null,updateDelegate:null,delegates:null,construct:function($1,$2){
 (arguments.callee.superclass?arguments.callee.superclass.prototype["construct"]:this.nextMethod(arguments.callee,"construct")).apply(this,arguments)
-this.subviews=(new Array)
+this.subviews=new Array()
 if(this.immediateparent.layouts==null){
 this.immediateparent.layouts=[this]
 }else{
 this.immediateparent.layouts.push(this)
 }
-this.updateDelegate=LzDelegate.make(this,"update")
+this.updateDelegate=new LzDelegate(this,"update")
 this.delegates=[this.updateDelegate]
 if(this.immediateparent.isinited){
 this.__parentInit()
 }else{
-this.initDelegate=LzDelegate.make(this,"__parentInit",this.immediateparent,"oninit")
+this.initDelegate=new LzDelegate(this,"__parentInit",this.immediateparent,"oninit")
 this.delegates.push(this.initDelegate)
 }
 },constructWithArgs:function($1){
-this.delegates.push(LzDelegate.make(this,"gotNewSubview",this.immediateparent,"onaddsubview"))
-this.delegates.push(LzDelegate.make(this,"removeSubview",this.immediateparent,"onremovesubview"))
+this.delegates.push(new LzDelegate(this,"gotNewSubview",this.immediateparent,"onaddsubview"))
+this.delegates.push(new LzDelegate(this,"removeSubview",this.immediateparent,"onremovesubview"))
 var $2=this.immediateparent.subviews.length
 for(var $3=0;$3<$2;$3++){
 this.gotNewSubview(this.immediateparent.subviews[$3])
@@ -6736,7 +7025,7 @@
 if(this.isinited){
 this.unlock()
 }else{
-LzDelegate.make(this,"unlock",this,"oninit")
+new LzDelegate(this,"unlock",this,"oninit")
 }
 }
 },releaseLayout:function(){
@@ -6828,8 +7117,8 @@
 (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)
-this.selectedHash=(new Object)
+this.selected=new Array()
+this.selectedHash=new Object()
 this.lastRange=null
 },select:function($1){
 if(this.isSelected($1)&&(this.toggle||this.isMultiSelect($1))){
@@ -6870,8 +7159,8 @@
 while($1=this.selected.pop()){
 $1[this.sel](false)
 }
-this.selected=(new Array)
-this.selectedHash=(new Object)
+this.selected=new Array()
+this.selectedHash=new Object()
 this.lastRange=null
 },getSelection:function(){
 return this.selected
@@ -6970,7 +7259,7 @@
 },getSelection:function(){
 var $1=[]
 for(var $2=0;$2<this.selected.length;$2++){
-$1.push(LzDatapointer.make(null,{pointer:this.selected[$2]}))
+$1.push(new LzDatapointer(null,{pointer:this.selected[$2]}))
 }
 return $1
 },clearSelection:function(){
@@ -7056,7 +7345,7 @@
 if(this.isinited){
 this.apply()
 }else{
-LzDelegate.make(this,"apply",this,"oninit")
+new LzDelegate(this,"apply",this,"oninit")
 }
 }else{
 if(this.isinited){
@@ -7372,7 +7661,7 @@
 },hasChildNodes:function(){
 return this.childNodes.length>0
 },cloneNode:function($1){
-var $2=LzDataElement.make(this.nodeName)
+var $2=new LzDataElement(this.nodeName)
 $2.setAttrs(this.attributes)
 if($1){
 for(var $3=0;$3<this.childNodes.length;$3++){
@@ -7558,7 +7847,7 @@
 $1.setters.ownerDocument="setOwnerDocument"
 }
 },valueToElement:function($1){
-var $2=LzDataElement.make("element",{},LzDataElementTrait.__LZv2E($1))
+var $2=new LzDataElement("element",{},LzDataElementTrait.__LZv2E($1))
 return $2
 },__LZv2E:function($1){
 var $2=typeof $1
@@ -7576,7 +7865,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)
+$3[$5]=new LzDataElement($4,null,$6)
 }
 }else{
 $2="struct"
@@ -7585,14 +7874,14 @@
 if($7.indexOf("__LZ")==0){
 continue
 }
-$3[$5++]=LzDataElement.make($7,null,this.__LZv2E($1[$7]))
+$3[$5++]=new LzDataElement($7,null,this.__LZv2E($1[$7]))
 }
 }
 }
 }
 }else{
 if($1!=null){
-$3[0]=LzDataText.make($1)
+$3[0]=new LzDataText($1)
 }
 }
 if($3.length==0){
@@ -7625,7 +7914,7 @@
 })()
 var LzMiniNode=Class.make("LzMiniNode",null,{setAttribute:LzNode.prototype.setAttribute},{initialize:function($1){
 if(!$1.hasOwnProperty("setters")){
-$1["setters"]=LzInheritedHash.make($1["setters"])
+$1["setters"]=new LzInheritedHash($1["setters"])
 }
 }})
 var LzDataElement=Class.make("LzDataElement",[LzDataElementTrait,LzDataNode,LzMiniNode],{initialize:function($1,$2,$3){
@@ -7641,7 +7930,7 @@
 },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)
+$3[$4]=new LzDataElement($2,{},null)
 }
 return $3
 },valueToElement:LzDataElementTrait.valueToElement})
@@ -7657,7 +7946,7 @@
 this.ownerDocument.handleDocumentChange("data",this,1)
 }
 },cloneNode:function(){
-var $1=LzDataText.make(this.data)
+var $1=new LzDataText(this.data)
 return $1
 },serialize:function(){
 return this.__LZXMLescape(this.data)
@@ -7691,7 +7980,7 @@
 }},{tagname:"dataprovider"})
 var LzHTTPDataProvider=Class.make("LzHTTPDataProvider",LzDataProvider,{makeLoader:function($1){
 var $2=$1.proxied
-var $3=LzHTTPLoader.make(this,$2)
+var $3=new LzHTTPLoader(this,$2)
 $1.loader=$3
 $3.loadSuccess=this.loadSuccess
 $3.loadError=this.loadError
@@ -7762,18 +8051,14 @@
 }
 }
 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
+$17=$17+"&"+$13.substring(1)
 }else{
 $17=$17+$13
 }
@@ -7782,7 +8067,7 @@
 $17=$3.makeProxiedURL($17,$1.method,"xmldata",$4)
 }else{
 if(!$1.clientcacheable){
-var $18="__lzbc__="+(new Date()).getTime()
+var $18="__lzbc__="+new Date().getTime()
 if($17.indexOf("?")>=0){
 $17=$17+"&"+$18
 }else{
@@ -7795,7 +8080,7 @@
 $3.send($14)
 },loadSuccess:function($1,$2){
 var $3=$1.dataRequest
-$3.status="success"
+$3.status=LzDataRequest.SUCCESS
 $1.owner.loadResponse($3,$2)
 },loadError:function($1,$2){
 var $3=$1.dataRequest
@@ -7803,13 +8088,13 @@
 $1.owner.loadResponse($3,$2)
 },loadTimeout:function($1,$2){
 var $3=$1.dataRequest
-$3.status="timeout"
+$3.status=LzDataRequest.TIMEOUT
 $1.owner.loadResponse($3,$2)
 },setRequestError:function($1,$2){
 $1.error=$2
-$1.status=$1.ERROR
+$1.status=LzDataRequest.ERROR
 },loadResponse:function($1,$2){
-var $3=LzParam.make()
+var $3=new LzParam()
 var $4=null
 if($2==null){
 this.setRequestError($1,"client could not parse XML from server")
@@ -7844,9 +8129,9 @@
 $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 httpdataprovider=new LzHTTPDataProvider()
 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){
+var LzDataset=Class.make("LzDataset",[LzDataElementTrait,LzDataNode,LzNode],{dataprovider:defaultdataprovider,multirequest:false,dataRequest:null,dataRequestClass:LzHTTPDataRequest,dsloadDel:null,timeout:60000,postbody:null,acceptencodings:false,params:null,nsprefix:false,getresponseheaders:false,querytype:"GET",trimwhitespace:false,nodeType:LzDataNode.DOCUMENT_NODE,cacheable:false,querystring:null,request:false,autorequest:false,headers:null,proxied:null,responseheaders:null,construct:function($1,$2){
 this.queuerequests=false
 this.oncanvas=$1==canvas||$1==null
 if(this._instanceAttrs["name"]==null){
@@ -7886,6 +8171,9 @@
 }
 canvas.datasets[$1]=this
 },destroy:function($1){
+if(this.dsloadDel){
+this.dsloadDel.unregisterAll()
+}
 var $2=this.name
 if(this.oncanvas){
 if(canvas[$2]===this){
@@ -7910,7 +8198,7 @@
 }
 },getParams:function(){
 if(this.params==null){
-LzParam.make(this,{name:"params"})
+new LzParam(this,{name:"params"})
 }
 return this.params
 },getStatusCode:function(){
@@ -7946,7 +8234,7 @@
 },getDataset:function(){
 return this
 },getPointer:function(){
-var $1=LzDatapointer.make(null)
+var $1=new LzDatapointer(null)
 $1.p=this.getContext()
 return $1
 },setQueryString:function($1){
@@ -7955,7 +8243,7 @@
 if($1 instanceof LzParam){
 this.querystring=$1.toString()
 }else{
-var $2=LzParam.make(this)
+var $2=new LzParam(this)
 for(var $3 in $1){
 $2.setValue($3,$1[$3],true)
 }
@@ -7969,7 +8257,7 @@
 this.doRequest()
 }
 },setSrc:function($1){
-var $2=LzURL.make($1)
+var $2=new LzURL($1)
 this.querystring=$2.query
 $2.query=null
 this.src=$2.toString()
@@ -7983,18 +8271,19 @@
 this.proxied=$1
 }
 },setRequest:function($1){
+this.request=$1
 if(!$1){
 return
 }
 if(!this.isinited){
-this.reqOnInitDel=LzDelegate.make(this,"doRequest",this,"oninit")
+this.reqOnInitDel=new LzDelegate(this,"doRequest",this,"oninit")
 }
 },getLoadTime:function(){
 
 },setQueryParam:function($1,$2){
 this.querystring=null
 if(!this.params){
-LzParam.make(this,{name:"params"})
+new LzParam(this,{name:"params"})
 }
 this.params.setValue($1,$2)
 if(this.autorequest){
@@ -8003,7 +8292,7 @@
 },setQueryParams:function($1){
 this.querystring=null
 if(!this.params){
-this.params=LzParam.make(this,{name:"params"})
+this.params=new LzParam(this,{name:"params"})
 }
 if($1){
 this.params.addObject($1)
@@ -8026,7 +8315,7 @@
 return $1
 },doRequest:function(){
 if(this.multirequest||this.dataRequest==null){
-this.dataRequest=this.dataRequestClass.make(this)
+this.dataRequest=new (this.dataRequestClass)(this)
 }
 var $1=this.dataRequest
 $1.src=this.src
@@ -8051,9 +8340,16 @@
 $1.clientcacheable=this.clientcacheable
 $1.trimwhitespace=this.trimwhitespace
 $1.nsprefix=this.nsprefix
-this.dsloadDel=LzDelegate.make(this,"handleDataResponse",$1,"onstatus")
+if(this.dsloadDel==null){
+this.dsloadDel=new LzDelegate(this,"handleDataResponse",$1,"onstatus")
+}else{
+this.dsloadDel.register($1,"onstatus")
+}
 this.dataprovider.doRequest($1)
 },handleDataResponse:function($1){
+if(this.dsloadDel!=null){
+this.dsloadDel.unregisterFrom($1.onstatus)
+}
 if($1.status==LzDataRequest.SUCCESS){
 this.setData($1.xmldata,$1.responseheaders)
 }else{
@@ -8067,7 +8363,6 @@
 }
 },setAutorequest:function($1){
 this.autorequest=$1
-this.setRequest($1)
 },getErrorString:function(){
 return this.errorstring
 },getRequestHeaderParams:function(){
@@ -8088,7 +8383,7 @@
 return this.responseheaders
 },setHeader:function($1,$2){
 if(!this.headers){
-this.headers=LzParam.make(this)
+this.headers=new LzParam(this)
 }
 this.headers.setValue($1,$2)
 },setInitialData:function($1){
@@ -8109,7 +8404,6 @@
 setters.autorequest="setAutorequest"
 setters.request="setRequest"
 setters.initialdata="setInitialData"
-prototype.request=doRequest
 }
 }
 })()
@@ -8119,7 +8413,7 @@
 $5=this._p[this._p.length-1]
 this._p.length=this._p.length-1
 }else{
-$5=LzDataset.make(null,{name:"LzHttpDatasetPool"+this._uid,type:"http",acceptencodings:$4?$4:false})
+$5=new LzDataset(null,{name:"LzHttpDatasetPool"+this._uid,type:"http",acceptencodings:$4?$4:false})
 this._uid++
 }
 if($1!=null){
@@ -8145,7 +8439,7 @@
 }
 this._p[this._p.length]=$1
 }},null)
-var LzHttpDatasetPool=__LzHttpDatasetPoolClass.make()
+var LzHttpDatasetPool=new __LzHttpDatasetPoolClass()
 var LzDatapointer=Class.make("LzDatapointer",LzNode,{p:null,data:null,context:null,__LZtracking:null,__LZtrackDel:null,rerunxpath:false,childOrSelf:function($1){
 var $2=this.p
 do{
@@ -8168,11 +8462,11 @@
 if($2[0].nodeType){
 $3=[]
 for(var $4=0;$4<$2.length;$4++){
-$3[$4]=LzDatapointer.make(null,{p:$2[$4]})
+$3[$4]=new LzDatapointer(null,{p:$2[$4]})
 }
 }else{
 if($2.nodeType){
-$3=LzDatapointer.make(null,{p:$2})
+$3=new LzDatapointer(null,{p:$2})
 }else{
 $3=$2
 }
@@ -8295,7 +8589,7 @@
 },__LZsetupDotDot:function($1){
 if(this.__LZlastdotdot!=$1.ownerDocument){
 if(!this.__LZdotdotCheckDel){
-this.__LZdotdotCheckDel=LzDelegate.make(this,"__LZcheckDotDot")
+this.__LZdotdotCheckDel=new LzDelegate(this,"__LZcheckDotDot")
 }else{
 this.__LZdotdotCheckDel.unregisterAll()
 }
@@ -8405,7 +8699,7 @@
 $2.context=this.getLocalDataContext($3)
 }
 }else{
-var $2=LzParsedPath.make($1,this)
+var $2=new LzParsedPath($1,this)
 this.ppcache[$1]=$2
 }
 return $2
@@ -8558,7 +8852,7 @@
 this.onrerunxpath.sendEvent($1)
 }
 },dupePointer:function(){
-var $1=LzDatapointer.make()
+var $1=new LzDatapointer()
 $1.setFromPointer(this)
 return $1
 },__LZdoSelect:function($1,$2){
@@ -8651,7 +8945,7 @@
 }
 }
 if(!$2){
-this.p.appendChild(LzDataText.make($1))
+this.p.appendChild(new LzDataText($1))
 }
 },getNodeCount:function(){
 if(!this.p){
@@ -8662,9 +8956,9 @@
 if(!this.p){
 return
 }
-var $4=LzDataElement.make($1,$3)
+var $4=new LzDataElement($1,$3)
 if($2!=null){
-$4.appendChild(LzDataText.make($2))
+$4.appendChild(new LzDataText($2))
 }
 this.p.appendChild($4)
 return $4
@@ -8693,7 +8987,7 @@
 }
 var $2=$1.p.cloneNode(true)
 this.p.appendChild($2)
-return LzDatapointer.make(null,{pointer:$2})
+return new LzDatapointer(null,{pointer:$2})
 },setFromPointer:function($1){
 this.setPointer($1.p)
 },__LZprocessOperator:function($1,$2,$3){
@@ -8720,15 +9014,15 @@
 }
 return $5
 },makeRootNode:function(){
-return LzDataElement.make("root")
+return new LzDataElement("root")
 },finishRootNode:function($1){
 return $1.childNodes[0]
 },makeElementNode:function($1,$2,$3){
-var $4=LzDataElement.make($2,$1)
+var $4=new LzDataElement($2,$1)
 $3.appendChild($4)
 return $4
 },makeTextNode:function($1,$2){
-var $3=LzDataText.make($1)
+var $3=new LzDataText($1)
 $2.appendChild($3)
 return $3
 },serialize:function(){
@@ -8754,15 +9048,15 @@
 if(this.__LZoldDataDel){
 this.__LZoldDataDel.unregisterAll()
 }else{
-this.__LZoldDataDel=LzDelegate.make(this,"__LZHandleDocChange")
+this.__LZoldDataDel=new LzDelegate(this,"__LZHandleDocChange")
 }
 this.__LZoldDataDel.register(this.context,"onDocumentChange")
 }
 var $2=this.xpath
 if($2){
 if(this.errorDel==null){
-this.errorDel=LzDelegate.make(this,"gotError")
-this.timeoutDel=LzDelegate.make(this,"gotTimeout")
+this.errorDel=new LzDelegate(this,"gotError")
+this.timeoutDel=new LzDelegate(this,"gotTimeout")
 }
 this.errorDel.register($1,"onerror")
 this.timeoutDel.register($1,"ontimeout")
@@ -8848,7 +9142,7 @@
 var $5=$2||this.xpath
 if($5){
 if(!$4){
-this.__LZtrackDel=$4=LzDelegate.make(this,"__LZcheckChange")
+this.__LZtrackDel=$4=new LzDelegate(this,"__LZcheckChange")
 }
 this.__LZtracking=$3=[$1]
 $4.register($1,"onDocumentChange")
@@ -8911,7 +9205,7 @@
 this.setValue($2,$1[$2])
 }
 },clone:function($1){
-var $1=LzParam.make()
+var $1=new LzParam()
 for(var $2 in this.d){
 $1.d[$2]=this.d[$2].concat()
 }
@@ -9047,7 +9341,7 @@
 }else{
 var $8=LzParsedPath.trim($5[0])
 if($8=="new"){
-this.context=AnonDatasetGenerator.make(this)
+this.context=new AnonDatasetGenerator(this)
 }else{
 this.context=canvas.datasets[$8]
 }
@@ -9200,7 +9494,7 @@
 var AnonDatasetGenerator=Class.make("AnonDatasetGenerator",null,{initialize:function($1){
 this.pp=$1
 },getContext:function(){
-var $1=LzDataset.make()
+var $1=new LzDataset()
 var $2=$1.getPointer()
 if(this.pp.selectors!=null){
 for(var $3=0;$3<this.pp.selectors.length;$3++){
@@ -9256,7 +9550,7 @@
 
 }
 this.storednodes=$1
-var $3=$2.make(this,this._instanceAttrs)
+var $3=new $2(this,this._instanceAttrs)
 delete this.storednodes
 return $3
 },setNodes:function($1){
@@ -9425,7 +9719,7 @@
 }
 }
 if(!$5){
-this.__LZtrackDel=$5=LzDelegate.make(this,"__LZcheckChange")
+this.__LZtrackDel=$5=new LzDelegate(this,"__LZcheckChange")
 }
 $4.push($1)
 $5.register($1,"onDocumentChange")
@@ -9525,7 +9819,7 @@
 this.parsedPath=$1.parsedPath
 this.cloneClass=$3.constructor
 this.cloneParent=$3.parent
-this.cloneAttrs=LzInheritedHash.make($3._instanceAttrs)
+this.cloneAttrs=new LzInheritedHash($3._instanceAttrs)
 this.cloneAttrs.datapath=LzNode._ignoreAttribute
 this.cloneAttrs.$datapath={name:"datapath"}
 this.cloneAttrs.$datapath.attrs={datacontrolsvisibility:$1.datacontrolsvisibility,__LZmanager:this}
@@ -9533,7 +9827,7 @@
 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=new LzInheritedHash(this.cloneAttrs.$refs)
 this.cloneAttrs.$refs.datapath=LzNode._ignoreAttribute
 var $7=$3._instanceAttrs.$refs.datapath
 this._t=$7.dependencies
@@ -9738,7 +10032,7 @@
 if(this.clonePool.length){
 var $2=this.reattachClone(this.clonePool.pop())
 }else{
-var $2=this.cloneClass.make(this.cloneParent,this.cloneAttrs,this.cloneChildren,$1==null?this.asyncnew:!$1)
+var $2=new (this.cloneClass)(this.cloneParent,this.cloneAttrs,this.cloneChildren,$1==null?this.asyncnew:!$1)
 }
 if(this.visible==false){
 $2.setVisible(false)
@@ -9877,7 +10171,7 @@
 },getLoaderForDataset:function($1,$2){
 var $3=$1.getOption("dsloader")
 if(!$3){
-$3=LzHTTPLoader.make(this,$2,$1)
+$3=new LzHTTPLoader(this,$2,$1)
 $1.setOption("dsloader",$3)
 $3.setQueueing($1.queuerequests)
 $3.loadSuccess=this.loadSuccess
@@ -9980,7 +10274,7 @@
 $17=$3.makeProxiedURL($17,this.reqtype,"xmldata",$4)
 }else{
 if(!$1.clientcacheable){
-var $18="__lzbc__="+(new Date()).getTime()
+var $18="__lzbc__="+new Date().getTime()
 if($17.indexOf("?")>=0){
 $17=$17+"&"+$18
 }else{
@@ -9993,7 +10287,7 @@
 },setQueryType:function($1){
 this.reqtype=$1
 },processRawData:function($1,$2){
-var $3=LzParam.make($1)
+var $3=new LzParam($1)
 var $4=null
 if($2==null){
 $1.gotError("client could not parse XML from server")
@@ -10040,8 +10334,24 @@
 return
 }
 if($3||this.node[this.setAttr]!=this.data||this.parsedPath.operator=="attributes"){
-this.node.setAttribute(this.setAttr,this.data==null?null:this.data)
+var $lzsc$1067643688=this.node
+var $lzsc$100750628=this.setAttr
+var $lzsc$1819922585=this.data==null?null:this.data
+if(!$lzsc$1067643688.__LZdeleted){
+var $lzsc$998361254=$lzsc$1067643688.setters
+if($lzsc$998361254&&$lzsc$100750628 in $lzsc$998361254){
+$lzsc$1067643688[$lzsc$998361254[$lzsc$100750628]]($lzsc$1819922585)
+}else{
+$lzsc$1067643688[$lzsc$100750628]=$lzsc$1819922585
+var $lzsc$1932693211="on"+$lzsc$100750628
+if($lzsc$1932693211 in $lzsc$1067643688){
+if($lzsc$1067643688[$lzsc$1932693211].ready){
+$lzsc$1067643688[$lzsc$1932693211].sendEvent($lzsc$1819922585)
 }
+}
+}
+}
+}
 },unregisterAll:function(){
 var $1=this.pathparent.__LZdepChildren
 if($1!=null){
@@ -10096,7 +10406,7 @@
 this.mask=$1.immediateparent.immediateparent.mask
 var $3={ignorelayout:true}
 if(this.cloneAttrs.options!=null){
-$3=LzInheritedHash.make(this.cloneAttrs.options)
+$3=new LzInheritedHash(this.cloneAttrs.options)
 }
 var $4=this.clones[0]
 $4.setOption("ignorelayout",true)
@@ -10119,15 +10429,30 @@
 $2.spacing=0
 }
 this.totalsize=this.viewsize+$2.spacing
-$7.setAttribute(this.axis,this.totalsize)
+var $lzsc$322730748=this.axis
+var $lzsc$903130331=this.totalsize
+if(!$7.__LZdeleted){
+var $lzsc$379804808=$7.setters
+if($lzsc$379804808&&$lzsc$322730748 in $lzsc$379804808){
+$7[$lzsc$379804808[$lzsc$322730748]]($lzsc$903130331)
+}else{
+$7[$lzsc$322730748]=$lzsc$903130331
+var $lzsc$170920561="on"+$lzsc$322730748
+if($lzsc$170920561 in $7){
+if($7[$lzsc$170920561].ready){
+$7[$lzsc$170920561].sendEvent($lzsc$903130331)
+}
+}
+}
+}
 this.__LZdataoffset=0
-this.updateDel=LzDelegate.make(this,"__LZadjustVisibleClones")
+this.updateDel=new LzDelegate(this,"__LZadjustVisibleClones")
 this.updateDel.register(this.cloneimmediateparent,"on"+this.axis)
 this.updateDel.register(this.mask,"on"+this.sizeAxis)
 },viewsize:0,totalsize:0,__LZsetCloneAttrs:function(){
 var $1={ignorelayout:true}
 if(this.cloneAttrs.options!=null){
-$1=LzInheritedHash.make(this.cloneAttrs.options)
+$1=new LzInheritedHash(this.cloneAttrs.options)
 }
 this.cloneAttrs.options=$1
 },__LZHandleNoNodes:function(){
@@ -10139,7 +10464,23 @@
 }
 if($3!=null){
 if(this.__LZoldnodelen!=this.nodes.length){
-this.cloneimmediateparent.setAttribute(this.sizeAxis,this.nodes.length*this.totalsize-this.spacing)
+var $lzsc$2075491228=this.cloneimmediateparent
+var $lzsc$609963284=this.sizeAxis
+var $lzsc$86082898=this.nodes.length*this.totalsize-this.spacing
+if(!$lzsc$2075491228.__LZdeleted){
+var $lzsc$945491145=$lzsc$2075491228.setters
+if($lzsc$945491145&&$lzsc$609963284 in $lzsc$945491145){
+$lzsc$2075491228[$lzsc$945491145[$lzsc$609963284]]($lzsc$86082898)
+}else{
+$lzsc$2075491228[$lzsc$609963284]=$lzsc$86082898
+var $lzsc$1551607618="on"+$lzsc$609963284
+if($lzsc$1551607618 in $lzsc$2075491228){
+if($lzsc$2075491228[$lzsc$1551607618].ready){
+$lzsc$2075491228[$lzsc$1551607618].sendEvent($lzsc$86082898)
+}
+}
+}
+}
 this.__LZoldnodelen=this.nodes.length
 }
 }
@@ -10191,7 +10532,22 @@
 }
 if($12){
 this.clones[$11]=$12
-$12.setAttribute(this.axis,($11+$4)*this.totalsize)
+var $lzsc$297598493=this.axis
+var $lzsc$1687376900=($11+$4)*this.totalsize
+if(!$12.__LZdeleted){
+var $lzsc$1022426788=$12.setters
+if($lzsc$1022426788&&$lzsc$297598493 in $lzsc$1022426788){
+$12[$lzsc$1022426788[$lzsc$297598493]]($lzsc$1687376900)
+}else{
+$12[$lzsc$297598493]=$lzsc$1687376900
+var $lzsc$130671817="on"+$lzsc$297598493
+if($lzsc$130671817 in $12){
+if($12[$lzsc$130671817].ready){
+$12[$lzsc$130671817].sendEvent($lzsc$1687376900)
+}
+}
+}
+}
 $12.clonenumber=$4+$11
 if(this.nodes){
 $12.datapath.setClonePointer(this.nodes[$4+$11])
@@ -10344,16 +10700,59 @@
 this.clones[$14]=$23
 }
 this.clones[$14]=$23
-$23.setAttribute(this.axis,$24)
+var $lzsc$199565265=this.axis
+if(!$23.__LZdeleted){
+var $lzsc$1566756327=$23.setters
+if($lzsc$1566756327&&$lzsc$199565265 in $lzsc$1566756327){
+$23[$lzsc$1566756327[$lzsc$199565265]]($24)
+}else{
+$23[$lzsc$199565265]=$24
+var $lzsc$827405854="on"+$lzsc$199565265
+if($lzsc$827405854 in $23){
+if($23[$lzsc$827405854].ready){
+$23[$lzsc$827405854].sendEvent($24)
+}
+}
+}
+}
 var $16=$15[this.datasizevar]
 var $17=$16==null?this.viewsize:$16
 if($23[this.sizeAxis]!=$17){
-$23.setAttribute(this.sizeAxis,$17,true)
+var $lzsc$1751397930=this.sizeAxis
+if(!($23.__LZdeleted||true&&$23[$lzsc$1751397930]==$17)){
+var $lzsc$308004129=$23.setters
+if($lzsc$308004129&&$lzsc$1751397930 in $lzsc$308004129){
+$23[$lzsc$308004129[$lzsc$1751397930]]($17)
+}else{
+$23[$lzsc$1751397930]=$17
+var $lzsc$1846090120="on"+$lzsc$1751397930
+if($lzsc$1846090120 in $23){
+if($23[$lzsc$1846090120].ready){
+$23[$lzsc$1846090120].sendEvent($17)
 }
+}
+}
+}
+}
 $24+=$17+this.spacing
 }
 this.__LZdataoffset=$6
-this.cloneimmediateparent.setAttribute(this.sizeAxis,$10)
+var $lzsc$1237939842=this.cloneimmediateparent
+var $lzsc$1724241033=this.sizeAxis
+if(!$lzsc$1237939842.__LZdeleted){
+var $lzsc$621047276=$lzsc$1237939842.setters
+if($lzsc$621047276&&$lzsc$1724241033 in $lzsc$621047276){
+$lzsc$1237939842[$lzsc$621047276[$lzsc$1724241033]]($10)
+}else{
+$lzsc$1237939842[$lzsc$1724241033]=$10
+var $lzsc$1510559529="on"+$lzsc$1724241033
+if($lzsc$1510559529 in $lzsc$1237939842){
+if($lzsc$1237939842[$lzsc$1510559529].ready){
+$lzsc$1237939842[$lzsc$1510559529].sendEvent($10)
+}
+}
+}
+}
 this.__LZresizeupdating=false
 },__LZHandleCloneResize:function($1,$2){
 var $3=$1.datapath.p[this.datasizevar]||this.viewsize
@@ -10375,7 +10774,7 @@
 }
 })()
 var LzInstantiatorClass=Class.make("LzInstantiatorClass",null,{checkQDel:null,initialize:function(){
-this.checkQDel=LzDelegate.make(this,"checkQ")
+this.checkQDel=new LzDelegate(this,"checkQ")
 },halted:false,isimmediate:false,isdatareplicating:false,istrickling:false,isUpdating:false,safe:true,timeout:500,makeQ:[],trickleQ:[],tricklingQ:[],syncNew:true,trickletime:10,setSafeInstantiation:function($1){
 this.safe=$1
 if(this.instanceQ.length){
@@ -10446,9 +10845,9 @@
 }
 }
 },makeSomeViews:function($1,$2){
-var $3=(new Date()).getTime()
+var $3=new Date().getTime()
 var $4=0
-while((new Date()).getTime()-$3<$2&&$1.length){
+while(new Date().getTime()-$3<$2&&$1.length){
 var $5=$1.length
 var $6=$1[$5-1]
 var $7=$1[$5-2]
@@ -10457,7 +10856,7 @@
 $1.length-=2
 continue
 }
-while((new Date()).getTime()-$3<$2){
+while(new Date().getTime()-$3<$2){
 if($5!=$1.length){
 break
 }
@@ -10536,8 +10935,8 @@
 this.trickletime=$3
 return !this.isUpdating
 }},null)
-var LzInstantiator=LzInstantiatorClass.make()
-var LzGlobalMouse=(new Object)
+var LzInstantiator=new LzInstantiatorClass()
+var LzGlobalMouse=new Object()
 DeclareEvent(LzGlobalMouse,"onmousemove")
 DeclareEvent(LzGlobalMouse,"onmouseup")
 DeclareEvent(LzGlobalMouse,"onmousedown")
@@ -10550,13 +10949,13 @@
 LzGlobalMouse[$1].sendEvent($2)
 }
 }
-var LzModeManager=(new Object())
+var LzModeManager=new Object()
 DeclareEvent(LzModeManager,"onmode")
 LzModeManager.onmode=null
 LzModeManager.__LZlastclick=null
 LzModeManager.willCall=false
 LzModeManager.eventsLocked=false
-LzModeManager.modeArray=(new Array())
+LzModeManager.modeArray=new Array()
 LzModeManager.toString=function(){
 return "mode manager"
 }
@@ -10587,7 +10986,7 @@
 }
 }
 LzModeManager.releaseAll=function(){
-this.modeArray=(new Array())
+this.modeArray=new Array()
 if(this.onmode.ready){
 this.onmode.sendEvent(null)
 }
@@ -10657,7 +11056,7 @@
 return this.modeArray[this.modeArray.length-1]||null
 }
 LzMouseKernel.setCallback(LzModeManager,"rawMouseEvent")
-var LzCursor=(new Object)
+var LzCursor=new Object()
 LzCursor.showHandCursor=LzMouseKernel.showHandCursor
 LzCursor.setCursorGlobal=LzMouseKernel.setCursorGlobal
 LzCursor.lock=LzMouseKernel.lock
@@ -10741,7 +11140,7 @@
 this.file=$1
 }
 LzURL.prototype.dupe=function(){
-var $1=LzURL.make()
+var $1=new LzURL()
 $1.protocol=this.protocol
 $1.host=this.host
 $1.port=this.port
@@ -10812,7 +11211,7 @@
 return LzInputTextSprite.prototype.__focusedSprite.owner
 }
 }
-var LzBrowser=(new Object)
+var LzBrowser=new Object()
 LzBrowser.postToLps=true
 LzBrowser.loadURL=function($1,$2,$3){
 if($2!=null){
@@ -10833,7 +11232,7 @@
 LzBrowser.getLoadURL=function(){
 var $1=Lz.__propcache.url
 if(!$1){
-$1=(new String(window.location))
+$1=new String(window.location)
 }
 var $2=$1.indexOf(":")
 var $3=$1.indexOf("/")
@@ -10845,7 +11244,7 @@
 $1=$1.substring(0,$2+1)+"/"+$1.substring($2+1)
 return $1
 }else{
-var $4=LzURL.make((new String(window.location)))
+var $4=new LzURL(new String(window.location))
 $1=$1.substring(0,$2+1)+"/"+$4.path+$1.substring($2+1)
 return $1
 }
@@ -10854,7 +11253,7 @@
 if($3==0){
 return $1
 }else{
-var $5=(new String(window.location))
+var $5=new String(window.location)
 var $6=$5.lastIndexOf("/")
 $5=$5.substring(0,$6+1)
 return $5+$1
@@ -10881,7 +11280,7 @@
 }
 LzBrowser.getLoadURLAsLzURL=function(){
 if(!this.parsedloadurl){
-this.parsedloadurl=LzURL.make(this.getLoadURL())
+this.parsedloadurl=new LzURL(this.getLoadURL())
 }
 return this.parsedloadurl.dupe()
 }
@@ -11030,10 +11429,10 @@
 LzKeys.keyCodes['"']=222
 LzKeys.keyCodes["'"]=222
 LzKeys.keyCodes["IME"]=229
-var LzHistory=(new Object)
+var LzHistory=new Object()
 LzHistory.isReady=true
 LzHistory.setHistory=function($1){
-Lz._setHash($1)
+Lz.history.set($1)
 this.__lzloading=true
 }
 LzHistory.getPersist=function($1){
@@ -11062,8 +11461,24 @@
 var $2=this.__lzhistq[$1]
 for(var $3 in $2){
 var $1=$2[$3]
-global[$1.c].setAttribute($1.n,$1.v)
+var $lzsc$332963310=global[$1.c]
+var $lzsc$2043861255=$1.n
+var $lzsc$209002626=$1.v
+if(!$lzsc$332963310.__LZdeleted){
+var $lzsc$1348594797=$lzsc$332963310.setters
+if($lzsc$1348594797&&$lzsc$2043861255 in $lzsc$1348594797){
+$lzsc$332963310[$lzsc$1348594797[$lzsc$2043861255]]($lzsc$209002626)
+}else{
+$lzsc$332963310[$lzsc$2043861255]=$lzsc$209002626
+var $lzsc$1154308536="on"+$lzsc$2043861255
+if($lzsc$1154308536 in $lzsc$332963310){
+if($lzsc$332963310[$lzsc$1154308536].ready){
+$lzsc$332963310[$lzsc$1154308536].sendEvent($lzsc$209002626)
 }
+}
+}
+}
+}
 if(this.__loadcacheused){
 var $4=this.__lzhistq[this.offset]
 if($4==null){
@@ -11176,7 +11591,7 @@
 }
 var LzCSSStyle={}
 LzCSSStyle.getComputedStyle=function($1){
-var $2=LzCSSStyleDeclaration.make()
+var $2=new LzCSSStyleDeclaration()
 $2.setNode($1)
 return $2
 }
@@ -11195,7 +11610,7 @@
 }
 var $6=this.__LZRuleCache[$4]
 if(!$6){
-$6=(new Array())
+$6=new Array()
 var $7
 for(var $8=this._rules.length-1;$8>=0;$8--){
 $7=this._rules[$8]
@@ -11446,7 +11861,7 @@
 LzCSSStyle._sel_compound=4
 LzCSSStyle._sel_attribute=5
 LzCSSStyle._sel_tagAndAttr=6
-LzCSSStyle._rules=(new Array())
+LzCSSStyle._rules=new Array()
 LzCSSStyle._nameRules={}
 LzCSSStyle._rulenum=0
 LzCSSStyle._addRule=function($1){
@@ -11581,10 +11996,10 @@
 }
 return null
 }
-var LzTrackClass=Class.make("LzTrackClass",null,{__LZreg:(new Object),__LZactivegroups:null,__LZtrackDel:null,__LZoptimizeforaxis:"x",__LZmouseupDel:null,initialize:function(){
+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")
+this.__LZtrackDel=new LzDelegate(this,"__LZtrack")
+this.__LZmouseupDel=new LzDelegate(this,"__LZmouseup",LzGlobalMouse,"onmouseup")
 },register:function($1,$2){
 if($1==null||$2==null){
 return
@@ -11595,7 +12010,7 @@
 }
 this.__LZreg[$2].push($1)
 if(!this.__LZdestroydel){
-this.__LZdestroydel=LzDelegate.make(this,"__LZdestroyitem")
+this.__LZdestroydel=new LzDelegate(this,"__LZdestroyitem")
 }
 this.__LZdestroydel.register($1,"ondestroy")
 },unregister:function($1,$2){
@@ -11725,17 +12140,22 @@
 for(var $1 in this.__LZactivegroups){
 var $2=this.__LZactivegroups[$1]
 if($2&&$2.__LZlasthit.onmousetrackup&&$2.__LZlasthit.onmousetrackup.ready){
+if(this["__LZlastmouseup"]==$2.__LZlasthit){
+this.__LZlastmouseup=null
+}else{
 $2.__LZlasthit.onmousetrackup.sendEvent(this.__LZlasthit)
+this.__LZlastmouseup=$2.__LZlasthit
 }
 }
+}
 }},null)
-var LzTrack=LzTrackClass.make()
-var LzFocus=(new Object())
+var LzTrack=new LzTrackClass()
+var LzFocus=new Object()
 DeclareEvent(LzFocus,"onfocus")
 LzFocus.lastfocus=null
 LzFocus.csel=null
-LzFocus.upDel=LzDelegate.make(LzFocus,"gotKeyUp",LzKeys,"onkeyup")
-LzFocus.downDel=LzDelegate.make(LzFocus,"gotKeyDown",LzKeys,"onkeydown")
+LzFocus.upDel=new LzDelegate(LzFocus,"gotKeyUp",LzKeys,"onkeyup")
+LzFocus.downDel=new LzDelegate(LzFocus,"gotKeyDown",LzKeys,"onkeydown")
 LzFocus.focuswithkey=null
 LzFocus.__LZskipblur=false
 LzFocus.__LZsfnextfocus=-1
@@ -11905,7 +12325,7 @@
 return $4[$5]
 }
 var LzIdleClass=Class.make("LzIdleClass",null,{coi:[],removeCOI:null,initialize:function(){
-this.removeCOI=LzDelegate.make(this,"removeCallIdleDelegates")
+this.removeCOI=new LzDelegate(this,"removeCallIdleDelegates")
 },callOnIdle:function($1){
 this.coi.push($1)
 if(!("regNext" in this&&this.regNext)){
@@ -11914,7 +12334,7 @@
 }
 },removeCallIdleDelegates:function($1){
 var $2=this.coi
-this.coi=(new Array)
+this.coi=new Array()
 for(var $3=0;$3<$2.length;$3++){
 $2[$3].execute($1)
 }
@@ -11931,7 +12351,7 @@
 }
 }
 })()
-var LzIdle=LzIdleClass.make()
+var LzIdle=new LzIdleClass()
 function __idleupdate(){
 var $1=LzIdle.onidle
 if($1.ready){
@@ -11939,11 +12359,11 @@
 }
 }
 LzIdleKernel.addCallback(this,"__idleupdate")
-var LzTimerClass=Class.make("LzTimerClass",null,{timerList:(new Object),addTimer:function($1,$2){
+var LzTimerClass=Class.make("LzTimerClass",null,{timerList:new Object(),addTimer:function($1,$2){
 var p={"delegate":$1}
 var $3=function(){
 LzTimer.removeTimerWithID(p.delegate,p.id)
-p.delegate.execute((new Date()).getTime())
+p.delegate.execute(new Date().getTime())
 }
 var $4=setInterval($3,$2)
 p.id=$4
@@ -12002,10 +12422,10 @@
 this.removeTimer($1)
 return this.addTimer($1,$2)
 }},null)
-var LzTimer=LzTimerClass.make()
+var LzTimer=new LzTimerClass()
 function LzInstantiateView($1,$2){
 if($1.name=="trait"){
-LzTrait.make($1)
+new LzTrait($1)
 return
 }
 if(typeof $2=="undefined"){
@@ -12014,8 +12434,9 @@
 canvas.initiatorAddNode($1,$2)
 }
 function lzAddLocalData($1,$2,$3){
-return LzDataset.make(canvas,{name:$1,initialdata:$2,trimwhitespace:$3})
+return new LzDataset(canvas,{name:$1,initialdata:$2,trimwhitespace:$3})
 }
+//END LFC
 var $backtrace=false
 var $dhtml=true
 var $as3=false
@@ -12029,7 +12450,7 @@
 var $runtime="dhtml"
 var $debug=false
 var $j2me=false
-canvas=LzCanvas.make({__LZproxied:"true",bgcolor:9737389,debugApp:function(){
+canvas=new LzCanvas({__LZproxied:"true",bgcolor:9737389,debugApp:function(){
 with(this){
 cb_debug.setValue(true)
 canvas.reloadApp()
@@ -12042,7 +12463,7 @@
 }else{
 var $2=app_lps_root+"/lps/admin/solo-deploy.jsp?appurl="+$1
 }
-LzBrowser.loadURL($2)
+this.loadURL($2)
 }
 },displayObjectByID:function($1){
 with(this){
@@ -12054,13 +12475,17 @@
 app_fullpath=$1
 this.reloadApp()
 }
-},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){
+},height:70,loadURL:function($1){
 with(this){
+LzBrowser.loadURL($1,"_top")
+}
+},lpsbuild:"6429 /Users/maxcarlson/openlaszlo/wafflecone",lpsbuilddate:"2007-09-11T11:31:35-0700",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_backtrace.value
 var $5=cb_remotedebug.value
-var $6=LzParam.make(this)
+var $6=new LzParam(this)
 var $7=LzParam.prototype.parseQueryString(app_query)
 $7["debug"]=$3
 $7["lzbacktrace"]=$4
@@ -12098,7 +12523,7 @@
 $8[$9]=true
 }
 var $11=app_fullpath+"?"+$6.serialize()
-LzBrowser.loadURL($11)
+this.loadURL($11)
 }
 },remoteEval:function($1){
 with(this){
@@ -12117,20 +12542,16 @@
 console.writeRaw($3)
 }
 },viewDev:function(){
-with(this){
 var $1="http://www.laszlosystems.com/developers"
-LzBrowser.loadURL($1)
-}
+this.loadURL($1)
 },viewDocs:function(){
 with(this){
 var $1=app_lps_root+"/docs/index.html"
-LzBrowser.loadURL($1)
+this.loadURL($1)
 }
 },viewForums:function(){
-with(this){
 var $1="http://www.laszlosystems.com/developers/community/forums/"
-LzBrowser.loadURL($1)
-}
+this.loadURL($1)
 },viewSource:function(){
 with(this){
 app_lzt="source"
@@ -12226,13 +12647,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_$base$2Fbasefocusview$2Elzx_250_62_reference",function($1){
+LzInstantiateView({name:"class",attrs:{parent:"view",initobj:{attrs:{$delegates:["onstop","stopanim",null,"onfocus","$m2_$base$2Fbasefocusview$2Elzx_260_62_reference",function($1){
 with(this){
 return LzFocus
 }
 }],$events:["ontarget","onactive"],$m1_$base$2Fbasefocusview$2Elzx_152_51_reference:function(){
 
-},$m2_$base$2Fbasefocusview$2Elzx_250_62_reference:function($1){
+},$m2_$base$2Fbasefocusview$2Elzx_260_62_reference:function($1){
 with(this){
 this.setActive(LzFocus.focuswithkey)
 if($1){
@@ -12292,7 +12713,7 @@
 this.animate("opacity",1,500)
 }
 if(!this._onstopdel){
-this._onstopdel=LzDelegate.make(this,"stopanim")
+this._onstopdel=new LzDelegate(this,"stopanim")
 }
 this._onstopdel.register($7,"onstop")
 }
@@ -12389,10 +12810,20 @@
 with(this){
 this.target=$1
 if(!this._xydelegate){
-this._xydelegate=LzDelegate.make(this,"followXY")
+this._xydelegate=new LzDelegate(this,"followXY")
 }else{
 this._xydelegate.unregisterAll()
 }
+if(!this._widthdel){
+this._widthdel=new LzDelegate(this,"followWidth")
+}else{
+this._widthdel.unregisterAll()
+}
+if(!this._heightdel){
+this._heightdel=new LzDelegate(this,"followHeight")
+}else{
+this._heightdel.unregisterAll()
+}
 if(this.target==null){
 return
 }
@@ -12404,12 +12835,8 @@
 $2=$2.immediateparent
 $3++
 }
-if(!this._widthdel){
-this._widthdel=LzDelegate.make(this,"followWidth",canvas,"onwidth")
-}
-if(!this._heightdel){
-this._heightdel=LzDelegate.make(this,"followHeight",canvas,"onheight")
-}
+this._widthdel.register($1,"onwidth")
+this._heightdel.register($1,"onheight")
 followXY()
 followWidth()
 followHeight()
@@ -12420,7 +12847,7 @@
 if(this._animatorcounter<1){
 this._dofadeout=true
 if(!this._delayfadeoutDL){
-this._delayfadeoutDL=LzDelegate.make(this,"fadeout")
+this._delayfadeoutDL=new LzDelegate(this,"fadeout")
 }
 LzTimer.addTimer(this._delayfadeoutDL,1000)
 this.setTarget(_nexttarget)
@@ -12597,7 +13024,7 @@
 }
 if($2){
 if(!this.upkeydel){
-this.upkeydel=LzDelegate.make(this,"dispatchKeyTimer")
+this.upkeydel=new LzDelegate(this,"dispatchKeyTimer")
 }
 this._lastkeydown=$1
 LzTimer.addTimer(this.upkeydel,50)
@@ -12659,7 +13086,7 @@
 },focusclass:"focusoverlay",getDefaultStyle:function(){
 with(this){
 if(this.defaultstyle==null){
-this.defaultstyle=global.style.make(canvas,{isdefault:true})
+this.defaultstyle=new (global.style)(canvas,{isdefault:true})
 }
 return this.defaultstyle
 }
@@ -12670,7 +13097,7 @@
 $1=canvas.focusclass
 }
 if($1!=null){
-canvas.__focus=global[$1].make(canvas)
+canvas.__focus=new (global[$1])(canvas)
 canvas.__focus.reset()
 };(arguments.callee.superclass?arguments.callee.superclass.prototype["init"]:this.nextMethod(arguments.callee,"init")).call(this)
 }
@@ -12833,7 +13260,7 @@
 $2[$3]=$1[$3]
 }
 $2.__proto__=this
-LzDelegate.make($2,"_forwardstylechanged",this,"onstylechanged")
+new LzDelegate($2,"_forwardstylechanged",this,"onstylechanged")
 return $2
 }
 },"extends":"node",isdefault:false,isstyle:true,setCanvasColor:function($1){
@@ -12856,7 +13283,7 @@
 }
 }},name:"style"}}},1)
 LzInstantiateView({name:"script",attrs:{script:function(){
-_componentmanager.service=_componentmanager.make(canvas,null,null,true)
+_componentmanager.service=new _componentmanager(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:["onfocusable","onisdefault","onstyle","on_enabled"],$refs:{_enabled:(function(){
@@ -12942,7 +13369,7 @@
 },_setstyle:function($1){
 with(this){
 if(!this._styledel){
-this._styledel=LzDelegate.make(this,"_usestyle")
+this._styledel=new LzDelegate(this,"_usestyle")
 }else{
 _styledel.unregisterAll()
 }
@@ -12998,7 +13425,7 @@
 with(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")
+this._mousedownDel=new LzDelegate(this,"_doMousedown",this,"onmousedown")
 if(this.styleable){
 _usestyle()
 }
@@ -13025,7 +13452,7 @@
 this._style=$1
 if($1==null){
 if(!this._otherstyledel){
-this._otherstyledel=LzDelegate.make(this,"_setstyle")
+this._otherstyledel=new LzDelegate(this,"_setstyle")
 }else{
 this._otherstyledel.unregisterAll()
 }
@@ -13046,6 +13473,7 @@
 }
 },setTint:function($1,$2,$3){
 with(this){
+if($1.capabilities.colortransform){
 if($2!=""&&$2!=null){
 if($3==null){
 $3=0
@@ -13063,6 +13491,7 @@
 $1.setColorTransform({ra:$5,ga:$6,ba:$7,rb:$3,gb:$3,bb:$3})
 }
 }
+}
 },styleable:true,text:"",toString:function(){
 var $1=""
 var $2=""
@@ -14031,7 +14460,7 @@
 $2=$1.p
 }
 if(!immediateparent.subviews[0].cloneManager){
-return immediateparent.subviews[0]==$2?0:-1
+return immediateparent.subviews[0]==$1?0:-1
 }
 var $3=immediateparent.subviews[0].cloneManager.nodes
 var $4=-1
@@ -14045,7 +14474,7 @@
 }
 },getItemByData:function($1){
 with(this){
-return getItemByIndex(this.getItemIndexByData($1))
+return $1?getItemByIndex(this.getItemIndexByData($1)):null
 }
 },getItemByIndex:function($1){
 with(this){
@@ -14063,6 +14492,7 @@
 }
 },getItemIndexByData:function($1){
 with(this){
+if($1){
 var $2=immediateparent.subviews
 if($2[0].cloneManager){
 var $3=$2[0].cloneManager["nodes"]
@@ -14078,6 +14508,7 @@
 return 0
 }
 }
+}
 return null
 }
 },getNextSubview:function($1,$2){
@@ -14255,7 +14686,7 @@
 if(this.itemclassname==""){
 
 }else{
-global[this.itemclassname].make(this,{text:$1,value:$2})
+new (global[this.itemclassname])(this,{text:$1,value:$2})
 }
 }
 },applyData:function($1){
@@ -14336,9 +14767,9 @@
 }
 }
 if(this.dataoption=="lazy"||this.dataoption=="resize"){
-this._selector=datalistselector.make(this,{multiselect:this.multiselect,toggle:toggleselected})
+this._selector=new datalistselector(this,{multiselect:this.multiselect,toggle:toggleselected})
 }else{
-this._selector=listselector.make(this,{multiselect:this.multiselect,toggle:toggleselected})
+this._selector=new listselector(this,{multiselect:this.multiselect,toggle:toggleselected})
 }
 if(this._initialselection!=null){
 this.select(this._initialselection)
@@ -14492,12 +14923,12 @@
 $2.pooling=true
 }
 }
-LzDatapath.make(this,$2)
+new LzDatapath(this,$2)
 }
 }
 },setSelectOnEvent:function($1){
 with(this){
-this._selectDL=LzDelegate.make(this,"doClick",this,$1)
+this._selectDL=new LzDelegate(this,"doClick",this,$1)
 }
 },setSelected:function($1){
 this.selected=$1
@@ -14579,12 +15010,7 @@
 $2=this.getItem($1)
 }
 this.value=$1
-if($2){
-this.select($2)
 }else{
-this.clearSelection()
-}
-}else{
 this.value=$1
 }
 if(this.onvalue){
@@ -14592,14 +15018,17 @@
 }
 },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_$lz$2Fradio$2Elzx_159_33_reference",null],$m14_$lz$2Fradio$2Elzx_159_33_reference:function(){
-with(this){
-if(!this.selected){
-parent.select(this)
+var $2=null
+if($1!=null){
+$2=this.getItem($1)
 }
+if($2){
+this.select($2)
+}else{
+this.clearSelection()
 }
-},$refs:{text_y:(function(){
+},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:{$refs:{text_y:(function(){
 var $lzsc$f=function(){
 this.setAttribute("text_y",this.rb.height/2-this._title.height/2)
 }
@@ -14678,7 +15107,7 @@
 LzInstantiateView({name:"script",attrs:{script:function(){
 _root.escapeXML=void 0
 escapeXML=function($1){
-return XML.make().createTextNode($1).toString()
+return new XML().createTextNode($1).toString()
 }
 }}},1)
 lzAddLocalData("appdata","<data />",false)
@@ -14745,21 +15174,21 @@
 }
 }
 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: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(){
+})()},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:410,x:125},children:[{attrs:{bgcolor:9737389,height:30,width:408,x:1,y:1},name:"view"}],name:"view"},{attrs:{$delegates:["onvalue","$m15_$dev$2Dconsole$2Elzx_164_66_reference",function(){
 with(this){
 return cb_backtrace
 }
-},"onvalue","$m17_$dev$2Dconsole$2Elzx_165_62_reference",function(){
+},"onvalue","$m16_$dev$2Dconsole$2Elzx_169_62_reference",function(){
 with(this){
 return cb_debug
 }
-}],$m16_$dev$2Dconsole$2Elzx_160_66_reference:function(){
+}],$m15_$dev$2Dconsole$2Elzx_164_66_reference:function(){
 with(this){
 if(cb_backtrace.value){
 cb_debug.setAttribute("value",true)
 }
 }
-},$m17_$dev$2Dconsole$2Elzx_165_62_reference:function(){
+},$m16_$dev$2Dconsole$2Elzx_169_62_reference:function(){
 with(this){
 if(cb_debug.value==false){
 cb_backtrace.setAttribute("value",false)
@@ -14825,11 +15254,11 @@
 }
 }
 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(){
+})()},id:"cb_backtrace",text:"Backtrace",x:250,y:8.25},id:"cb_backtrace",name:"checkbox"},{attrs:{$delegates:["onclick","$m14",null],$m14:function(){
 with(this){
 canvas.gotoApp()
 }
-},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(){
+},clickable:true,text:"Compile",x:334,y:4},name:"button"}],name:"view"},{attrs:{width:22,x:450},name:"view"},{attrs:{$delegates:["onclick","$m17",null],$m17:function(){
 with(this){
 canvas.viewSource()
 }
@@ -14857,23 +15286,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","$m19",null],$m19: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","$m18",null],$m18:function(){
 with(this){
 canvas.viewWrapper()
 }
-},clickable:true,text:"Server",x:65},name:"button"},{attrs:{$delegates:["onclick","$m20",null],$m20:function(){
+},clickable:true,text:"Server",x:65},name:"button"},{attrs:{$delegates:["onclick","$m19",null],$m19: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","$m21",null],$m21:function(){
+},clickable:true,text:"SOLO",x:134},name:"button"},{attrs:{align:"right",fgcolor:1381787,options:{ignorelayout:true},y:3},children:[{attrs:{$delegates:["onclick","$m20",null],$m20: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","$m22",null],$m22:function(){
+},clickable:true,font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<u>Documentation</u>"},name:"text"},{attrs:{$delegates:["onclick","$m21",null],$m21: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","$m23",null],$m23:function(){
+},clickable:true,font:"Verdana,Vera,sans-serif",fontsize:11,fontstyle:"plain",text:"<u>Developer Network</u>",x:92},name:"text"},{attrs:{$delegates:["onclick","$m22",null],$m22:function(){
 with(this){
 canvas.viewForums()
 }

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

Modified: openlaszlo/branches/legals/lps/components/base/basefocusview.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/base/basefocusview.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/components/base/basefocusview.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -187,7 +187,20 @@
             } else {
                 this._xydelegate.unregisterAll();
             }
-            if ( this.target == null ) return;
+            
+            if ( !this._widthdel ) {
+                this._widthdel = new LzDelegate(this, "followWidth");
+            } else {
+                this._widthdel.unregisterAll();
+            }
+            
+            if ( !this._heightdel ) {
+                this._heightdel = new LzDelegate(this, "followHeight");
+            } else {
+                this._heightdel.unregisterAll();
+            }
+            
+            if (this.target == null) return;
 
             // make sure that this focusoverlay  is aware
             // when the target or any of its parents move.
@@ -200,12 +213,9 @@
                 i++;
             }
 
-             if ( !this._widthdel ) {
-                 this._widthdel = new LzDelegate(this, "followWidth", canvas,'onwidth');
-             }
-             if ( !this._heightdel ) {
-                 this._heightdel = new LzDelegate(this, "followHeight", canvas,'onheight');
-             }
+             this._widthdel.register(newtarget, 'onwidth');
+             this._heightdel.register(newtarget, 'onheight');
+
              followXY();
              followWidth();
              followHeight();

Modified: openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontface.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontface.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/components/incubator/rich-text/formatfontface.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -47,6 +47,7 @@
                 create an object representing just the change in format.
                 Give that object to the editor. --> 
             <method event="onselect"><![CDATA[
+                this.setChanged(true); // fix bug LPP-4556, Rich text: Can't change font back to Verdana
                 //------------------------------------------------------------
                 // make sure that we call into editor if this combobox has
                 // changed, i.e., it contains an initial value. -pk

Modified: openlaszlo/branches/legals/lps/components/lz/datepicker.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/lz/datepicker.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/components/lz/datepicker.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -284,13 +284,13 @@
             </handler>
         </view>
 
-        <windowpanel name="main" 
+        <windowpanel name="main" visible="true"
                      bgcolor="0x565656"
                      closeable="false"
                      datapath="."
              allowdrag = "${parent.allowdrag}">
- 
 
+
             <view name="toolbar_view" 
                   x="6"
                   y="7"

Modified: openlaszlo/branches/legals/lps/components/utils/library.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/utils/library.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/components/utils/library.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -1,6 +1,7 @@
 <library>
   <include href="layouts/library.lzx"/>
   <include href="states/library.lzx"/>
+  <include href="replicator/library.lzx"/>
 </library>
 <!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
 * Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *

Modified: openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/components/utils/replicator/lazyreplicator.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -4,7 +4,7 @@
     <!-- A replicator which creates as many clones as are necessary to fill in
     a masked region, similar to the lazy replication option in OpenLaszlo. Also
     similar to OL''s lazy replication, the lazyreplicator must have a clipped
-    view as a parent. -->
+    view as a parent.  Be sure to use a dataselectionmanager instead of a selectionmanager for lazyreplicators.-->
     <interface name="lazyreplicator" extends="replicator">
 
         <!--- The size of the replicated clone in the replication axis -->
@@ -33,8 +33,23 @@
     //  @keywords private
     function construct (p,a) {
         super.construct( p, a );
+
+        // TODO [hqm 2007 09] Lock the parent layout so it can't mess
+        // up our placement of clones.  The implicit lazy
+        // repl. manager only wraps this inside of _adjustVisibleClones
+        // but I want to be sure any parent container layout is really
+        // turned off before any views get instantiated, and stays off
+        // all the time, it can only cause trouble.
+        // 
+        var p = this.container;
+        for (var l in p.layouts) {
+            p.layouts[l].lock();
+        }
+
+
         this.__emptyArray = [];
         this.clonedel = new LzDelegate( this, '__adjustVisibleClones');
+
     }
 
     //  @keywords private
@@ -49,6 +64,7 @@
 
     //  @keywords private
     function __adjustVisibleClones () {
+
         if ( ! this.nodes ) {
             while ( this.clones.length ) this.poolClone( this.clones.pop() );
             return;
@@ -56,7 +72,6 @@
 
         if ( !this.replicatedsize ) this._setSize();
 
-
         var sizeAxis = this._sizes[ this.axis ];
         if ( this.nodes.length != null ){
             this._lastNodesLength = this.nodes.length;
@@ -144,8 +159,8 @@
 
             if ( cl ){
                 this.clones[ i ] = cl;
-                cl.setAttribute( this.axis ,
-                                 ( i + newstart ) * this.replicatedsize );
+                var val = ( i + newstart ) * this.replicatedsize ;
+                cl.setAttribute( this.axis , val);
                 this.unbind( cl );
                 this.bind( cl, newstart + i );
             } else {
@@ -173,6 +188,44 @@
 
     }
 
+    //     @keywords private
+    function createChildren (c) {
+        this.replicated = c.pop();
+        
+        // TODO [hqm 2007 09] I need to set ignorelayout option before
+        // the clone gets instantiated, otherwise it might get placed
+        // by the parent layout during construction, which we don't
+        // want to happen.
+        var attrs;
+        if ('attrs' in this.replicated) {
+             attrs = this.replicated.attrs;
+        } else {
+            attrs = {};
+            this.replicated.attrs = attrs;
+        }
+
+        if ('options' in attrs) {
+            attrs.options.ignorelayout = true;
+        } else {
+            attrs.options = {ignorelayout: true};
+        }
+
+        //Debug.write( 'replicated', replicated );
+        if ( c.length ) {
+          Debug.warn("%s: only a single child view is replicated", this);
+          this.container.createChildren( c );
+        } else {
+          this.__LZinstantiationDone();
+        }
+    }
+
+    //  @keywords private overrides replicator.getClone()
+    function getClone () {
+        var cl = super.getClone();
+        cl.setOption( 'ignorelayout', true );
+        return cl;
+    }
+
     //  @keywords private
     function _setSize () {
         var c = this.getClone();
@@ -192,6 +245,38 @@
         this.ensureInView( n );
         return this.clones[ n-this.clonesoffset];
     }
+
+    //  @keywords private (override)
+    function getCloneForNode ( datanode , dontmake ){
+        var cl = super.getCloneForNode( datanode ) ||
+                null;
+        if ( !cl && !dontmake ){
+            //even though we're going to return this to the pool immediately,
+            //use the class API to get a clone
+            cl = this.getClone();
+            this.setData( cl, datanode );
+            this.update( cl, datanode );
+            if (v.datapath['sel'] != datanode['sel']) {
+                v.datapath['sel'] = datanode['sel'] || false;
+                v.setSelected(v.datapath['sel']);
+            }
+            if (cl['applyData']) cl.applyData( datanode );
+            this.poolClone( cl );
+        }
+
+        //cl.setOption( 'ignorelayout', true );
+        return cl;
+
+    }
+
+    function destroy ( ) {
+        var p = this.container;
+        for (var l in p.layouts) {
+            p.layouts[l].unlock();
+        }
+        super.destroy.apply(this, arguments);
+    }
+
 }
 
     ]]>

Modified: openlaszlo/branches/legals/lps/components/utils/replicator/library.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/utils/replicator/library.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/components/utils/replicator/library.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -1,6 +1,9 @@
-<!-- Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved. -->
+<!-- Copyright 2007 Laszlo Systems, Inc.  All Rights Reserved. -->
+<!---
+      @topic Components
+      @subtopic Replicators
+  -->
 <library>
     <include href="replicator.lzx"/>
     <include href="lazyreplicator.lzx"/>
-    <include href="replicatorselectionmanager.lzx"/>
 </library>

Modified: openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx
===================================================================
--- openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/components/utils/replicator/replicator.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -47,7 +47,7 @@
     <!--- Compute nodes from this dataset -->
     <attribute name="dataset" />
     <!--- Compute nodes from this xpath query against the specified dataset -->
-    <attribute name="xpath" />
+    <attribute name="xpath" type="string"/>
 
     <!--- Insert a node in existing list of elements.
         @param Number idx: index to insert element
@@ -136,14 +136,22 @@
     function init() {
       super.init.apply(this, arguments);
       if (this.dataset && this.xpath) {
-        this.setNodes(this.dataset.getPointer().xpathQuery(this.xpath))
+        this._pointer = this.dataset.getPointer();
+        this._ondatadel = new LzDelegate(this, '_updateChildren', this._pointer.p, 'onDocumentChange')
+        this._updateChildren();
       }
     }
 
+    // @keywords private
+    function _updateChildren(c) {
+        // TODO: use changepackage to do something smarter here
+        this.setNodes(this._pointer.xpathQuery(this.xpath))
+    }
 
     //     @keywords private
     function createChildren (c) {
         this.replicated = c.pop();
+        
         //Debug.write( 'replicated', replicated );
         if ( c.length ) {
           Debug.warn("%s: only a single child view is replicated", this);
@@ -191,6 +199,16 @@
         v.setAttribute( "clonenumber" , n );
         this.setData( v , n );
         this.update( v , n );
+        // Cooperate with dataselectionmanager, but take care
+        if ('setSelected' in v) {
+          var datanode = this.nodes[n];
+          var datapath = v.datapath;
+          var isSelected = (datanode && datanode['sel']) || false;
+          var wasSelected = (datapath && datapath['sel']) || false;
+          if (isSelected != wasSelected) {
+            v.setSelected(datapath['sel'] = isSelected);
+          }
+        }
         if ( this._cloneprops[ n ] ) {
             var p = this._cloneprops[ n ];
             for ( var k in p ){
@@ -246,8 +264,11 @@
 
     //  @keywords private
     function _makeClone () {
+
         var v = this.container.makeChild( this.replicated );
         v.setAttribute( "clonenumber", null );
+        // emulate datapath behavior
+        v.setAttribute( "cloneManager", this );
         return v;
     }
 
@@ -305,6 +326,17 @@
         return this.clones[ n ];
     }
 
+    //  Gets the clone for the given datanode
+    //          @param LzDataNode datanode: The datanode of the clone to get
+    function getCloneForNode (datanode) {
+        var l = this.clones.length; 
+        for ( var i = 0; i < l; i++ ){
+            if ( this.clones[ i ].datapath.p == datanode ){
+                return this.clones[ i ];
+            }
+        }
+    }
+
     //  Ensures that the clone at the given offset is visible under
     //         the mask
     //         @param Number n: The offset of the clone to scroll in view

Deleted: openlaszlo/branches/legals/lps/components/utils/replicator/replicatorselectionmanager.lzx

Modified: openlaszlo/branches/legals/lps/includes/source/embed-library.lzs
===================================================================
--- openlaszlo/branches/legals/lps/includes/source/embed-library.lzs	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/includes/source/embed-library.lzs	2007-09-14 21:45:55 UTC (rev 6483)
@@ -9,6 +9,7 @@
 #include "embednew.js"
 #include "iframemanager.js"
 #include "LzMousewheelKernel.js"
+#include "lzhistory.js"
 // Copyright 2007 Laszlo Systems, Inc.  All Rights Reserved.  Use is
 // subject to license terms.
 

Modified: openlaszlo/branches/legals/lps/includes/source/embednew.js
===================================================================
--- openlaszlo/branches/legals/lps/includes/source/embednew.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/includes/source/embednew.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -217,8 +217,8 @@
 
     ,__dhtmlLoadLibrary: function (url) {
         var o = document.createElement('script');
-        o.setAttribute('type', 'text/javascript');
-        o.setAttribute('src', url);
+        this.__setAttr(o, 'type', 'text/javascript');
+        this.__setAttr(o, 'src', url);
         document.getElementsByTagName("head")[0].appendChild(o);
         //alert(o);
         return o;
@@ -287,6 +287,12 @@
         return d;
     }
 
+    ,/** @access private */
+    __setAttr: function(s, n, v) {
+#pragma "passThrough=true"
+        s.setAttribute(n, v);
+    }
+
     ,/**
      * Check that the browser is a supported browser
      *
@@ -333,17 +339,7 @@
     _setCanvasAttributeSWF: function (name, value, hist) {
         if (dojo.flash.ready) {
             if (hist) {
-                if (name instanceof Array) {
-                    var o = '';
-                    for (var i = 0; i < name.length; i = i + 2) {
-                        o += escape(name[i]) + '=' + escape(name[i + 1]) +'';
-                        if (i < name.length - 2) o += ',';
-                    }
-                } else {
-                    var o = escape(name) + '=' + escape(value) +'';
-                }
-                window.top.location.hash = '_lz' + o;
-                //window.frames['_lzhist'].location = newurl;
+                Lz.history._store(name, value);
             } else {
                 dojo.flash.comm.setCanvasAttribute(name, value + '');
             }
@@ -366,17 +362,7 @@
      */
     _setCanvasAttributeDHTML: function (name, value, hist) {
         if (hist) {
-            if (name instanceof Array) {
-                var o = '';
-                for (var i = 0; i < name.length; i = i + 2) {
-                    o += escape(name[i]) + '=' + escape(name[i + 1]) +'';
-                    if (i < name.length - 2) o += ',';
-                }
-            } else {
-                var o = escape(name) + '=' + escape(value) +'';
-            }
-            window.top.location.hash = '_lz' + o;
-            //window.frames['_lzhist'].location = newurl;
+            Lz.history._store(name, value);
         } else if (canvas) {
             canvas.setAttribute(name, value);
         }
@@ -568,60 +554,7 @@
             dojo.flash.addLoadedListener(this._lastjs);
         }
     }
-
     ,/** @access private */
-    _historyEvent: function (value) {
-        if (dojo.flash.ready) {
-            //alert(value);
-            dojo.flash.comm.receiveHistory(value + '');
-            return true;
-        } else {
-            //alert('dojo.flash is not ready: _historyEvent' + value);
-        }
-    }
-
-    ,/** @access private */
-    _checklocationhash: function() {
-        var h = window.top.location.hash;
-        // Make sure initial history event is sent even if the hash is empty
-        if (h == '') h = '#0';
-        if (h != this.__lasthash && h.length > 1) {
-            if (h.indexOf('_lz') != -1) {
-                this.__lasthash = h;
-                h = h.substring(4);
-                var a = h.split(',');
-                for (var j = 0; j < a.length; j++) {
-                    var v = a[j];
-                    var i = v.indexOf('=');
-                    var name = unescape(v.substring(0, i));
-                    var val = unescape(v.substring(i + 1));
-                    this.setCanvasAttribute(name, val);
-                    if (Lz.__dhtmlhistoryready) canvas.setAttribute(name, val);
-                }
-            } else {
-                //history id
-                var ev = h.substring(1);
-                if (Lz._historyEvent(ev)) {
-                    // if successful, don't send again 
-                    Lz.__lasthash = h;
-                }
-                if (Lz.__dhtmlhistoryready) {
-                    LzHistory.receiveHistory(ev + '');
-                    Lz.__lasthash = h;
-                }
-            }
-        }
-    }
-    ,/** @access private */
-    _callHistoryEvent: function(ev, h) {
-        //alert(ev + ', ' + h);
-        
-    }
-    ,/** @access private */
-    _setHash: function(s) {
-        window.top.location.hash = s;
-    }
-    ,/** @access private */
     _getAppendDiv: function(id, appenddivid) {
         var divid = appenddivid ? appenddivid : id + 'Container';
         var root = document.getElementById(divid);
@@ -631,10 +564,14 @@
         }
         return root;
     }
+    /* TODO max: look at this and see if there is a merge conflict,
+      from wafflecone. [bshine 2007.09.14] */
     ,/** @access private */
     _checkHistory: function() {
         window.setInterval('Lz._checklocationhash()', 300)
     }
+    /* TODO max: look at this and see if there is a merge conflict,
+      from wafflecone. [bshine 2007.09.14] */    
     ,/** @access private */
     _sendMouseWheel: function(d) {
         if (d != null) this.callMethod("LzKeys.__mousewheelEvent(" + d + ")"); 

Modified: openlaszlo/branches/legals/lps/includes/source/iframemanager.js
===================================================================
--- openlaszlo/branches/legals/lps/includes/source/iframemanager.js	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/lps/includes/source/iframemanager.js	2007-09-14 21:45:55 UTC (rev 6483)
@@ -13,13 +13,13 @@
 
         var id = '__lz' + Lz.iframemanager.__highestz++;
         Lz.iframemanager.__frames[id] = i;
-        i.setAttribute('id', id);
+        Lz.__setAttr(i, 'id', id);
 
         if (name == null) name = '';
-        if (name != "") i.setAttribute('name', name);
+        if (name != "") Lz.__setAttr(i, 'name', name);
 
         i.__gotload = Lz.iframemanager.__gotload;
-        i.setAttribute('onload', 'Lz.iframemanager.__gotload("' + id + '")');
+        Lz.__setAttr(i, 'onload', 'Lz.iframemanager.__gotload("' + id + '")');
         if (appendto == null || appendto == "undefined") {
             appendto = document.body;
         }
@@ -29,8 +29,8 @@
         if (document.getElementById && !(document.all) ) {
             iframe.style.border = '0';
         } else if (document.all) {
-            iframe.setAttribute('frameborder', '0');
-            iframe.setAttribute('allowtransparency', 'true');
+            Lz.__setAttr(iframe, 'frameborder', '0');
+            Lz.__setAttr(iframe, 'allowtransparency', 'true');
         }
         iframe.style.position = 'absolute';
         return id;
@@ -42,7 +42,7 @@
         //console.log('setSrc', id, s)
         var iframe = Lz.iframemanager.getFrame(id);
         if (! iframe) return;
-        iframe.setAttribute('src', s);
+        Lz.__setAttr(iframe, 'src', s);
         return true;
     }
     ,setPosition: function(id, x, y, width, height, visible) { 

Copied: openlaszlo/branches/legals/lps/includes/source/lzhistory.js (from rev 6429, openlaszlo/branches/wafflecone/lps/includes/source/lzhistory.js)

Modified: openlaszlo/branches/legals/quick-index.xslt
===================================================================
--- openlaszlo/branches/legals/quick-index.xslt	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/quick-index.xslt	2007-09-14 21:45:55 UTC (rev 6483)
@@ -69,6 +69,9 @@
                                <xsl:value-of select="@runtime"/>
                            </xsl:if>
                        </xsl:when>
+                       <xsl:when test="@action = 'popupexternal'">
+                           <xsl:value-of select="@src"/>
+                       </xsl:when>                       
                        <xsl:otherwise>
                             <xsl:text>.</xsl:text>
                             <xsl:value-of select="@src"/>

Deleted: openlaszlo/branches/legals/test/components/incubator/richtexteditarea-driver.lzx

Modified: openlaszlo/branches/legals/test/data/selectionmanager.lzx
===================================================================
--- openlaszlo/branches/legals/test/data/selectionmanager.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/data/selectionmanager.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -1,19 +1,25 @@
-<canvas width="200" height="200">
+<canvas width="500" height="300">
   <dataset name="mydata" type="http" src="http:../resources/xml/800_forms.xml" request="true"/>
 
+  <text x="10" width="${canvas.width-20}" multiline="true">
+        Click on an item in the list, it should appear yellow to indicate that the
+        dataselectionmanager is working.  Selecting another item should de-select the first.
+        Scrolling should retain selection.
+  </text>
+
   <class name="selectme" onclick="immediateparent.selector.select(this)"
          height="17" width="100" bgcolor="white">
     <text datapath="text()"/>
-    <method name="setselected" args="isselected">
+    <method name="setSelected" args="isselected">
       if (isselected) setAttribute('bgcolor', yellow);
       else setAttribute('bgcolor', white);
     </method>
   </class>
 
-  <view height="70" clip="true">
+  <view y="50" height="70" clip="true">
     <view>
       <dataselectionmanager name="selector"/>
-      <selectme>
+      <selectme id="v">
         <datapath xpath="mydata:/resultset/row/reporter/" replication="lazy"/>
       </selectme>
       <simplelayout/>
@@ -21,4 +27,7 @@
     <scrollbar/>
   </view>
 </canvas>
-
+<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
+* Copyright 2001-2007 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Use is subject to license terms.                                            *
+* X_LZ_COPYRIGHT_END ****************************************************** -->

Modified: openlaszlo/branches/legals/test/explicit-replicators/lazy-replicator.lzx
===================================================================
--- openlaszlo/branches/legals/test/explicit-replicators/lazy-replicator.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/explicit-replicators/lazy-replicator.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -18,7 +18,7 @@
         <view name="container">
             <lazyreplicator name="lzreplicator"
                             dataset="mydata"
-                            xpath="'/product/@color'" >
+                            xpath="/product/@color" >
                 <text width="200" bgcolor="#cccccc" onclick="Debug.inspect(this)"/>
             </lazyreplicator>
         </view>

Modified: openlaszlo/branches/legals/test/explicit-replicators/replicator.lzx
===================================================================
--- openlaszlo/branches/legals/test/explicit-replicators/replicator.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/explicit-replicators/replicator.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -8,12 +8,23 @@
     <product name="pumpkin" color="orange"/>
   </dataset>
 
+    <simplelayout/>
+
+  <button text="add new item">
+    <handler name="onclick">
+      mydata.appendChild(new LzDataElement("product", { name: "NEW ITEM", color: 'purple'}));
+    </handler>
+  </button>
+
   <view name="bar">
     <simplelayout axis="y" spacing="2" />
     <replicator name="foo"
                 dataset="mydata"
-                xpath="'/product/'">
+                xpath="/product/">
       <view bgcolor="red" height="23">
+        <handler name="onclick">
+          this.data.parentNode.removeChild(this.data);
+        </handler> 
         <simplelayout axis="x" />
         <text datapath="@name"
               width="75"

Copied: openlaszlo/branches/legals/test/explicit-replicators/selection.lzx (from rev 6429, openlaszlo/branches/wafflecone/test/explicit-replicators/selection.lzx)

Modified: openlaszlo/branches/legals/test/explicit-replicators/test-replicator.lzx
===================================================================
--- openlaszlo/branches/legals/test/explicit-replicators/test-replicator.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/explicit-replicators/test-replicator.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -41,8 +41,8 @@
   <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'">
+      <dataselectionmanager name="selman" id="dsel"/>
+      <lazyreplicator id="elr" dataset="testdata" xpath="fibs/fib">
         <text width="100">
           <attribute name="selected" value="false"/>
           <attribute name="bgcolor"
@@ -56,6 +56,10 @@
             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>
       </lazyreplicator>
       <!-- FIXME: [2007-08-10 ptw] (LPP-4484) -->
@@ -66,7 +70,7 @@
   <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" />
+      <dataselectionmanager name="selman" id="dsel2"/>
       <text width="100" id="ilr">
         <datapath xpath="testdata:/fibs/fib" replication="lazy" />
         <attribute name="selected" value="false"/>
@@ -92,9 +96,9 @@
   <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" />
+      <selectionmanager name="selman" />
       <simplelayout axis="y" spacing="0" />
-      <replicator id="esr" dataset="testdata" xpath="'/fibs/fib'">
+      <replicator id="esr" dataset="testdata" xpath="/fibs/fib">
         <text width="100">
           <attribute name="selected" value="false"/>
           <attribute name="bgcolor"

Deleted: openlaszlo/branches/legals/test/history/simple-states.lzx

Modified: openlaszlo/branches/legals/test/lfc/data/datanode.lzx
===================================================================
--- openlaszlo/branches/legals/test/lfc/data/datanode.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/lfc/data/datanode.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -85,8 +85,8 @@
             zdat.appendChild( new LzDataElement( 'aa' , {r :22, p: '\n\r\t'} ) );
             var arr = zdat.getElementsByTagName ( 'aa' ) ;
 
-            assertEquals( arr[ 0 ].serialize() , "<aa><first/>second</aa>" );
-            assertEquals( arr[ 1 ].serialize() , '<aa r="22" p="&#xA;&#xD;&#x9;"/>' );
+            assertEquals(  "<aa><first/>second</aa>" , arr[ 0 ].serialize());
+            assertEquals(  '<aa r="22" p="&#xa;&#xd;&#x9;"/>', arr[ 1 ].serialize());
 
             //zdat.setAttrNS (namespaceURI, qualifiedName, ;
             //zdat.getAttrNS ( "local" , "foo") ;

Modified: openlaszlo/branches/legals/test/lztest/lztest-stableborderlayout.lzx
===================================================================
--- openlaszlo/branches/legals/test/lztest/lztest-stableborderlayout.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/lztest/lztest-stableborderlayout.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -25,12 +25,13 @@
     <method name="toggleAxis">
       sl1.setAttribute ('axis', (sl1.axis == "x") ? "y" : "x");
 <!-- The update call should be inside the object -->
+      sl1.reset();
       sl1.update();
     </method>
     <stableborderlayout id="sl1" axis="x">
-      <method event="onaxis" args="axis">
+      <handler name="onaxis" args="axis">
         n_onaxis++;
-      </method>
+      </handler>
     </stableborderlayout>
     <view name="v1" bgcolor="blue" height="30" width="50"/>
     <view name="v2" bgcolor="red" height="30" width="50"/>

Modified: openlaszlo/branches/legals/test/lztest/lztest-text.lzx
===================================================================
--- openlaszlo/branches/legals/test/lztest/lztest-text.lzx	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/lztest/lztest-text.lzx	2007-09-14 21:45:55 UTC (rev 6483)
@@ -120,9 +120,6 @@
   LzTestManager.assertEquals (true, text1.resize, "text1.resize failure");
   LzTestManager.assertEquals (10, text1.maxlength, "text1.maxlength failure");
 
-  // "label" overrides "text" setting, if any
-  LzTestManager.assertEquals ("label", text1.getAttribute('text'), "text1.text failure");
-  LzTestManager.assertEquals ("label", text1.getText(), "text1.getText failure");
   // Change the length of the string
   text1.setText('12345678901234567890');
   LzTestManager.assertEquals ("1234567890", text1.getText(), "LPP-2208: text1 maxlength not working");  
@@ -156,9 +153,12 @@
     LzTestManager.assertEquals (view2.t1.getTextWidth(), view2.t2.getTextWidth(), "getTextWidth do not match");
 
     // Make sure spacing is consistent
-    if (wlast != view2.t2.getTextWidth()) {
-      if (xspacing == 0)
+    /* Update, JC: getTextWidth() also measures the space before the first character, which wasn't accounted for
+    in the test. */
+    if (i != 0 && wlast != view2.t2.getTextWidth()) { // Wait until there's more than one character
+      if (i == 1){
         xspacing = view2.t2.getTextWidth() - wlast;
+      }
       LzTestManager.assertEquals (xspacing, (view2.t2.getTextWidth()-wlast), "xspacing error at character " + i);
     }
 
@@ -229,7 +229,15 @@
   LzTestManager.assertEquals ('123', text3.getText(),  "text3.getText() failure");  
   text3.clearText();
   LzTestManager.assertEquals ('', text3.getText(),  "text3.getText() failure (2)");  
-  LzTestManager.assertEquals (text3.sprite.PAD_TEXTWIDTH, text3.getTextWidth(),  "text3.getTextWidth() failure (2)");  
+  /* This doesn't pad the text if there's no text to pad, so we need to set the text and then
+  find the size of the pre-padding. */
+  var prew = 0;
+  text3.setText('*');
+  var t3w1 = text3.getTextWidth();
+  text3.setText('**');
+  var t3w2 = text3.getTextWidth() - t3w1;
+  text3.setText('');
+  LzTestManager.assertEquals (text3.sprite.PAD_TEXTWIDTH, t3w1 - t3w2,  "text3.getTextWidth() failure (2)");  
   LzTestManager.assertEquals (0, text3.getTextHeight(),  "text3.getTextHeight() failure (2)");  
 
   // setText () (special characters)
@@ -354,7 +362,7 @@
   LzTestManager.assertEquals (w, view6.t1.getTextWidth(),  "view6.t1.getTextWidth() underline failure");
   LzTestManager.assertEquals (h, view6.t1.getTextHeight(),  "view6.t1.getTextHeight() underline failure");
   LzTestManager.assertEquals (w, view6.t2.getTextWidth(),  "view6.t2.getTextWidth() underline failure");
-  LzTestManager.assertEquals (h, view6.t2.getTextHeight(),  "view6.t2.getTextHeight() underline failure");
+  LzTestManager.assertEquals (h, view6.t2.getTextHeight(),  "LPP-4651: view6.t2.getTextHeight() underline failure");
 
   var s5 = 'open<p>Laszlo</p>';
   view6.t1.setText(s5);
@@ -377,7 +385,7 @@
   LzTestManager.assertEquals (w, view6.t1.getTextWidth(),  "view6.t1.getTextWidth() <br> failure");
   LzTestManager.assertEquals (h, view6.t1.getTextHeight(),  "view6.t1.getTextHeight() <br> failure");
   LzTestManager.assertEquals (w, view6.t2.getTextWidth(),  "LPP-2214: view6.t2.getTextWidth() <br> failure");
-  LzTestManager.assertEquals (h*3, view6.t2.getTextHeight(),  "view6.t2.getTextHeight() <br> failure");
+  LzTestManager.assertEquals (h*3, view6.t2.getTextHeight(),  "LPP-4651: view6.t2.getTextHeight() <br> failure");
 
   var s7 = 'open<img src="10x10.gif"/>Laszlo';
   view6.t1.setText(s7);

Modified: openlaszlo/branches/legals/test/lzunit/testpaths.txt
===================================================================
--- openlaszlo/branches/legals/test/lzunit/testpaths.txt	2007-09-14 21:42:06 UTC (rev 6482)
+++ openlaszlo/branches/legals/test/lzunit/testpaths.txt	2007-09-14 21:45:55 UTC (rev 6483)
@@ -10,7 +10,7 @@
 test/lfc/lzunit-dataset.lzx
 test/lfc/lzunit-node-xpath.lzx
 test/lfc/lzunit-timer.lzx
-test/lfc/lzunit-lzutils.lzx
+# test/lfc/lzunit-lzutils.lzx [BROKEN see LPP-4732 dectohex fails unit test lzunit-lzutils]
 test/components/base/lzunit-basecomponent.lzx
 test/components/base/lzunit-baseform.lzx
 test/components/base/lzunit-baseslider.lzx



More information about the Laszlo-checkins mailing list