You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by sm...@apache.org on 2007/09/24 21:09:58 UTC

svn commit: r578911 [3/3] - in /portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/javascript/jetspeed/desktop: core.js core.src.js

Modified: portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/javascript/jetspeed/desktop/core.src.js
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/javascript/jetspeed/desktop/core.src.js?rev=578911&r1=578910&r2=578911&view=diff
==============================================================================
--- portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/javascript/jetspeed/desktop/core.src.js (original)
+++ portals/jetspeed-2/branches/JETSPEED-2.1.3/src/webapp/javascript/jetspeed/desktop/core.src.js Mon Sep 24 12:09:58 2007
@@ -25,30 +25,28 @@
  *             for javascript compression and aggregation is implemented
  */
 
-dojo.provide("jetspeed.desktop.core");
+dojo.provide( "jetspeed.desktop.core" );
 
-dojo.require("dojo.lang.*");
-dojo.require("dojo.event.*");
-dojo.require("dojo.io.*");
-dojo.require("dojo.uri.Uri");
-dojo.require("dojo.widget.*");
-dojo.require("dojo.collections.ArrayList");
-dojo.require("dojo.collections.Set");
-dojo.require("jetspeed.common");
+dojo.require( "dojo.lang.*" );
+dojo.require( "dojo.event.*" );
+dojo.require( "dojo.io.*" );
+dojo.require( "dojo.uri.Uri" );
+dojo.require( "dojo.widget.*" );
+dojo.require( "jetspeed.common" );
 
 
-// ... jetspeed base objects
+// jetspeed base objects
+
 if ( ! window.jetspeed )
-    jetspeed = {} ;
+    jetspeed = {};
 if ( ! jetspeed.om )
-    jetspeed.om = {} ;
-if ( ! jetspeed.ui )
-    jetspeed.ui = {} ;
-if ( ! jetspeed.ui.widget )
-    jetspeed.ui.widget = {} ;
+    jetspeed.om = {};
+if ( ! jetspeed.debug )
+    jetspeed.debug = {};
+
 
+// jetspeed.id
 
-// ... jetspeed.id
 jetspeed.id =
 {
     PAGE: "jetspeedPage",
@@ -56,57 +54,55 @@
     DESKTOP: "jetspeedDesktop",
     COLUMNS: "jetspeedColumns",
     PAGE_CONTROLS: "jetspeedPageControls",
-
-    TASKBAR: "jetspeedTaskbar",
-    SELECTOR: "jetspeedSelector",
     
-    PORTLET_STYLE_CLASS: "portlet",
-    PORTLET_WINDOW_STYLE_CLASS: "dojoFloatingPane",
-    PORTLET_WINDOW_GHOST_STYLE_CLASS: "ghostPane",
-    PORTLET_WINDOW_ID_PREFIX: "portletWindow_",
-
-    PORTLET_PROP_WIDGET_ID: "widgetId",
-    PORTLET_PROP_CONTENT_RETRIEVER: "contentRetriever",
-    PORTLET_PROP_DESKTOP_EXTENDED: "jsdesktop",
-    PORTLET_PROP_WINDOW_POSITION_STATIC: "windowPositionStatic",
-    PORTLET_PROP_WINDOW_HEIGHT_TO_FIT: "windowHeightToFit",
-    PORTLET_PROP_WINDOW_DECORATION: "windowDecoration",
-    PORTLET_PROP_WINDOW_TITLE: "title",
-    PORTLET_PROP_WINDOW_ICON: "windowIcon",
-    PORTLET_PROP_WIDTH: "width",
-    PORTLET_PROP_HEIGHT: "height",
-    PORTLET_PROP_LEFT: "left",
-    PORTLET_PROP_TOP: "top",
-    PORTLET_PROP_COLUMN: "column",
-    PORTLET_PROP_ROW: "row",
-    PORTLET_PROP_EXCLUDE_PCONTENT: "excludePContent",
-    PORTLET_PROP_WINDOW_STATE: "windowState",
-
-    PORTLET_PROP_DESKTOP_EXTENDED_STATICPOS: "staticpos",
-    PORTLET_PROP_DESKTOP_EXTENDED_FITHEIGHT: "fitheight",
-    PORTLET_PROP_DESKTOP_EXTENDED_PROP_SEPARATOR: "=",
-    PORTLET_PROP_DESKTOP_EXTENDED_PAIR_SEPARATOR: ";",
+    P_CLASS: "portlet",
+    PWIN_CLASS: "portletWindow",
+    PWIN_GHOST_CLASS: "ghostPane",
+    PW_ID_PREFIX: "pw_",
+
+    // ... pp - portlet props
+    PP_WIDGET_ID: "widgetId",
+    PP_CONTENT_RETRIEVER: "contentRetriever",
+    PP_DESKTOP_EXTENDED: "jsdesktop",
+    PP_WINDOW_POSITION_STATIC: "windowPositionStatic",
+    PP_WINDOW_HEIGHT_TO_FIT: "windowHeightToFit",
+    PP_WINDOW_DECORATION: "windowDecoration",
+    PP_WINDOW_TITLE: "title",
+    PP_WINDOW_ICON: "windowIcon",
+    PP_WIDTH: "width",
+    PP_HEIGHT: "height",
+    PP_LEFT: "left",
+    PP_TOP: "top",
+    PP_COLUMN: "column",
+    PP_ROW: "row",
+    PP_EXCLUDE_PCONTENT: "excludePContent",
+    PP_WINDOW_STATE: "windowState",
+
+    PP_STATICPOS: "staticpos",
+    PP_FITHEIGHT: "fitheight",
+    PP_PROP_SEPARATOR: "=",
+    PP_PAIR_SEPARATOR: ";",
 
     // these constants for action names are defined because they have special meaning to desktop (ie. this is not a list of all supported actions)
-    ACTION_NAME_MENU: "menu",
-    ACTION_NAME_MINIMIZE: "minimized",
-    ACTION_NAME_MAXIMIZE: "maximized",
-    ACTION_NAME_RESTORE: "normal",
-    ACTION_NAME_PRINT: "print",
-    ACTION_NAME_EDIT: "edit",
-    ACTION_NAME_VIEW: "view",
-    ACTION_NAME_HELP: "help",
-    ACTION_NAME_ADDPORTLET: "addportlet",
-    ACTION_NAME_REMOVEPORTLET: "removeportlet",
-
-    ACTION_NAME_DESKTOP_TILE: "tile",
-    ACTION_NAME_DESKTOP_UNTILE: "untile",
-    ACTION_NAME_DESKTOP_HEIGHT_EXPAND: "heightexpand",
-    ACTION_NAME_DESKTOP_HEIGHT_NORMAL: "heightnormal",
-
-    ACTION_NAME_LOAD_RENDER: "loadportletrender",
-    ACTION_NAME_LOAD_ACTION: "loadportletaction",
-    ACTION_NAME_LOAD_UPDATE: "loadportletupdate",
+    ACT_MENU: "menu",
+    ACT_MINIMIZE: "minimized",
+    ACT_MAXIMIZE: "maximized",
+    ACT_RESTORE: "normal",
+    ACT_PRINT: "print",
+    ACT_EDIT: "edit",
+    ACT_VIEW: "view",
+    ACT_HELP: "help",
+    ACT_ADDPORTLET: "addportlet",
+    ACT_REMOVEPORTLET: "removeportlet",
+
+    ACT_DESKTOP_TILE: "tile",
+    ACT_DESKTOP_UNTILE: "untile",
+    ACT_DESKTOP_HEIGHT_EXPAND: "heightexpand",
+    ACT_DESKTOP_HEIGHT_NORMAL: "heightnormal",
+
+    ACT_LOAD_RENDER: "loadportletrender",
+    ACT_LOAD_ACTION: "loadportletaction",
+    ACT_LOAD_UPDATE: "loadportletupdate",
 
     PORTLET_ACTION_TYPE_MODE: "mode",
     PORTLET_ACTION_TYPE_STATE: "state",
@@ -117,10 +113,12 @@
     PG_ED_PARAM: "editPage",
     PORTAL_ORIGINATE_PARAMETER: "portal",
 
-    DEBUG_WINDOW_TAG: "js-dojo-debug"
+    DEBUG_WINDOW_TAG: "js-db"
 };
 
-// ... jetspeed desktop preferences - defaults
+
+// jetspeed desktop preferences - defaults
+
 jetspeed.prefs = 
 {
     windowTiling: true,                 // false indicates no-columns, free-floating windows
@@ -156,12 +154,11 @@
     portletSelectorWindowIcon: "text-x-script.png",
     portletSelectorBounds: { x: 20, y: 20, width: 400, height: 600 },
 
-    windowActionButtonOrder: [ jetspeed.id.ACTION_NAME_MENU, "edit", "view", "help", jetspeed.id.ACTION_NAME_MINIMIZE, jetspeed.id.ACTION_NAME_RESTORE, jetspeed.id.ACTION_NAME_MAXIMIZE ],
-    windowActionNotPortlet: [ jetspeed.id.ACTION_NAME_MENU, jetspeed.id.ACTION_NAME_MINIMIZE, jetspeed.id.ACTION_NAME_RESTORE, jetspeed.id.ACTION_NAME_MAXIMIZE ],
+    
     windowActionButtonMax: 5,
     windowActionButtonHide: false,
     windowActionButtonTooltip: true,
-    windowActionMenuOrder: [ jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_EXPAND, jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_NORMAL, jetspeed.id.ACTION_NAME_DESKTOP_TILE, jetspeed.id.ACTION_NAME_DESKTOP_UNTILE ],
+    //windowActionButtonOrder, windowActionNotPortlet, windowActionMenuOrder - see jetspeed.initializeDesktop
     
     windowIconEnabled: true,
     windowIconPath: "/images/portlets/small/",
@@ -183,121 +180,112 @@
     }
 };
 
-// ... jetspeed debug options
-jetspeed.debug =
-{
-    pageLoad: false,
-    retrievePsml: false,
-    setPortletContent: false,
-    doRenderDoAction: false,
-    postParseAnnotateHtml: false,
-    postParseAnnotateHtmlDisableAnchors: false,
-    confirmOnSubmit: false,
-    createWindow: false,
-    initializeWindowState: false,
-    submitChangedWindowState: false,
-    ajaxPageNav: false,
-
-    windowDecorationRandom: false,
-
-    debugContainerId: ( djConfig.debugContainerId ? djConfig.debugContainerId : dojo.hostenv.defaultDebugContainerId )
-};
-jetspeed.debugInPortletWindow = true;                             // dojo debug in portlet window (dojo isDebug must be true)
-//jetspeed.debugPortletEntityIdFilter = [ "dp-7", "dp-3" ];       // load listed portlets only
-//jetspeed.debugPortletEntityIdFilter = [];                       // disable all portlets
-//jetspeed.debugContentDumpIds = [ ".*" ];                        // dump all responses
-//jetspeed.debugContentDumpIds = [ "getmenus", "getmenu-.*" ];    // dump getmenus response and all getmenu responses
-//jetspeed.debugContentDumpIds = [ "page-.*" ];                   // dump page psml response
-//jetspeed.debugContentDumpIds = [ "js-cp-selector.2" ];          // dump portlet selector content
-//jetspeed.debugContentDumpIds = [ "moveabs-layout" ];            // dump move layout response
-//jetspeed.debugContentDumpIds = [ "js-cp-selector.*" ];          // dump portlet selector
-// ... load page /portlets
+
+// load page /portlets
+
 jetspeed.page = null ;
 jetspeed.initializeDesktop = function()
 {
-    jetspeed.url.pathInitialize();
-    jetspeed.browser_IE = dojo.render.html.ie;
-    jetspeed.browser_IEpre7 = ( dojo.render.html.ie50 || dojo.render.html.ie55 || dojo.render.html.ie60 );
-    if ( djConfig.jetspeed != null )
+    var jsObj = jetspeed;
+    var jsId = jsObj.id;
+    var jsPrefs = jsObj.prefs;
+    var jsDebug = jsObj.debug;
+    var djObj = dojo;
+
+    jsObj.getBody();   // sets jetspeed.docBody
+
+    jsObj.ui.initCssObj();
+    
+    jsPrefs.windowActionButtonOrder = [ jsId.ACT_MENU, "edit", "view", "help", jsId.ACT_MINIMIZE, jsId.ACT_RESTORE, jsId.ACT_MAXIMIZE ];
+    jsPrefs.windowActionNotPortlet = [ jsId.ACT_MENU, jsId.ACT_MINIMIZE, jsId.ACT_RESTORE, jsId.ACT_MAXIMIZE ];
+    jsPrefs.windowActionMenuOrder = [ jsId.ACT_DESKTOP_HEIGHT_EXPAND, jsId.ACT_DESKTOP_HEIGHT_NORMAL, jsId.ACT_DESKTOP_TILE, jsId.ACT_DESKTOP_UNTILE ];
+
+    jsObj.url.pathInitialize();
+
+    var djConfJetspeed = djConfig.jetspeed;
+    if ( djConfJetspeed != null )
     {
-        for ( var prefKey in djConfig.jetspeed )
+        for ( var prefKey in djConfJetspeed )
         {
-            var prefOverrideVal = djConfig.jetspeed[ prefKey ];
+            var prefOverrideVal = djConfJetspeed[ prefKey ];
             if ( prefOverrideVal != null )
             {
-                if ( jetspeed.debug[ prefKey ] != null )
-                    jetspeed.debug[ prefKey ] = prefOverrideVal;
+                if ( jsDebug[ prefKey ] != null )
+                    jsDebug[ prefKey ] = prefOverrideVal;
                 else
-                    jetspeed.prefs[ prefKey ] = prefOverrideVal;
+                    jsPrefs[ prefKey ] = prefOverrideVal;
             }
         }
-        if ( jetspeed.prefs.windowWidth == null || isNaN( jetspeed.prefs.windowWidth ) )
-            jetspeed.prefs.windowWidth = "280";
-        if ( jetspeed.prefs.windowHeight == null || isNaN( jetspeed.prefs.windowHeight ) )
-            jetspeed.prefs.windowHeight = "200";
+        if ( jsPrefs.windowWidth == null || isNaN( jsPrefs.windowWidth ) )
+            jsPrefs.windowWidth = "280";
+        if ( jsPrefs.windowHeight == null || isNaN( jsPrefs.windowHeight ) )
+            jsPrefs.windowHeight = "200";
         
         var windowActionDesktop = {};
-        windowActionDesktop[ jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_EXPAND ] = true;
-        windowActionDesktop[ jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_NORMAL ] = true;
-        windowActionDesktop[ jetspeed.id.ACTION_NAME_DESKTOP_TILE ] = true;
-        windowActionDesktop[ jetspeed.id.ACTION_NAME_DESKTOP_UNTILE ] = true;
-        jetspeed.prefs.windowActionDesktop = windowActionDesktop;
+        windowActionDesktop[ jsId.ACT_DESKTOP_HEIGHT_EXPAND ] = true;
+        windowActionDesktop[ jsId.ACT_DESKTOP_HEIGHT_NORMAL ] = true;
+        windowActionDesktop[ jsId.ACT_DESKTOP_TILE ] = true;
+        windowActionDesktop[ jsId.ACT_DESKTOP_UNTILE ] = true;
+        jsPrefs.windowActionDesktop = windowActionDesktop;
     }
-    dojo.html.insertCssFile( jetspeed.ui.getDefaultFloatingPaneTemplateCss(), document, true );
+    var defaultPortletWindowCSSUrl = new djObj.uri.Uri( jetspeed.url.basePortalDesktopUrl() + "/javascript/jetspeed/widget/PortletWindow.css" );
+    djObj.html.insertCssFile( defaultPortletWindowCSSUrl, document, true );
 
-    if ( jetspeed.prefs.portletDecorationsAllowed == null || jetspeed.prefs.portletDecorationsAllowed.length == 0 )
+    if ( jsPrefs.portletDecorationsAllowed == null || jsPrefs.portletDecorationsAllowed.length == 0 )
     {
-        if ( jetspeed.prefs.windowDecoration != null )
-            jetspeed.prefs.portletDecorationsAllowed = [ jetspeed.prefs.windowDecoration ];
+        if ( jsPrefs.windowDecoration != null )
+            jsPrefs.portletDecorationsAllowed = [ jsPrefs.windowDecoration ];
     }
-    else if ( jetspeed.prefs.windowDecoration == null )
+    else if ( jsPrefs.windowDecoration == null )
     {
-        jetspeed.prefs.windowDecoration = jetspeed.prefs.portletDecorationsAllowed[0];
+        jsPrefs.windowDecoration = jsPrefs.portletDecorationsAllowed[0];
     }
-    if ( jetspeed.prefs.windowDecoration == null || jetspeed.prefs.portletDecorationsAllowed == null )
+    if ( jsPrefs.windowDecoration == null || jsPrefs.portletDecorationsAllowed == null )
     {
-        dojo.raise( "Cannot load page because there are no defined jetspeed portlet decorations" );
+        djObj.raise( "No portlet decorations" );
         return;
     }
 
-    if ( jetspeed.prefs.windowActionNoImage != null )
+    if ( jsPrefs.windowActionNoImage != null )
     {
         var noImageMap = {};
-        for ( var i = 0 ; i < jetspeed.prefs.windowActionNoImage.length; i++ )
+        for ( var i = 0 ; i < jsPrefs.windowActionNoImage.length; i++ )
         {
-            noImageMap[ jetspeed.prefs.windowActionNoImage[ i ] ] = true;
+            noImageMap[ jsPrefs.windowActionNoImage[ i ] ] = true;
         }
-        jetspeed.prefs.windowActionNoImage = noImageMap;
+        jsPrefs.windowActionNoImage = noImageMap;
     }
 
-    var docUrlObj = jetspeed.url.parse( window.location.href );
-    var printModeOnly = jetspeed.url.getQueryParameter( docUrlObj, "jsprintmode" ) == "true";
+    var docUrlObj = jsObj.url.parse( window.location.href );
+    var printModeOnly = jsObj.url.getQueryParameter( docUrlObj, "jsprintmode" ) == "true";
     if ( printModeOnly )
     {
         printModeOnly = {};
-        printModeOnly.action = jetspeed.url.getQueryParameter( docUrlObj, "jsaction" );
-        printModeOnly.entity = jetspeed.url.getQueryParameter( docUrlObj, "jsentity" );
-        printModeOnly.layout = jetspeed.url.getQueryParameter( docUrlObj, "jslayoutid" );
-        jetspeed.prefs.printModeOnly = printModeOnly;
-        jetspeed.prefs.windowTiling = true;
-        jetspeed.prefs.windowHeightExpand = true;
+        printModeOnly.action = jsObj.url.getQueryParameter( docUrlObj, "jsaction" );
+        printModeOnly.entity = jsObj.url.getQueryParameter( docUrlObj, "jsentity" );
+        printModeOnly.layout = jsObj.url.getQueryParameter( docUrlObj, "jslayoutid" );
+        jsPrefs.printModeOnly = printModeOnly;
+        jsPrefs.windowTiling = true;
+        jsPrefs.windowHeightExpand = true;
+        jsPrefs.ajaxPageNavigation = false;
     }
 
-    jetspeed.prefs.portletDecorationsConfig = {};
-    for ( var i = 0 ; i < jetspeed.prefs.portletDecorationsAllowed.length ; i++ )
+    jsPrefs.portletDecorationsConfig = {};
+    for ( var i = 0 ; i < jsPrefs.portletDecorationsAllowed.length ; i++ )
     {
-        jetspeed.loadPortletDecorationConfig( jetspeed.prefs.portletDecorationsAllowed[ i ] );
+        jsObj.loadPortletDecorationConfig( jsPrefs.portletDecorationsAllowed[ i ] );
     }
 
-    if ( jetspeed.prefs.printModeOnly == null )
+    if ( jsObj.UAie6 )
     {
-        jetspeed.debugWindowLoad();
+        jsPrefs.ajaxPageNavigation = false;    // not advisable in IE6 or older
     }
-    else
+
+    if ( printModeOnly )
     {
-        for ( var portletDecorationName in jetspeed.prefs.portletDecorationsConfig )
+        for ( var portletDecorationName in jsPrefs.portletDecorationsConfig )
         {
-            var pdConfig = jetspeed.prefs.portletDecorationsConfig[ portletDecorationName ];
+            var pdConfig = jsPrefs.portletDecorationsConfig[ portletDecorationName ];
             if ( pdConfig != null )
             {
                 pdConfig.windowActionButtonOrder = null;
@@ -307,40 +295,92 @@
             }
         }
     }
-    jetspeed.url.loadingIndicatorShow();
-    jetspeed.loadPage();
-};
-jetspeed.loadPage = function()
-{
-    jetspeed.page = new jetspeed.om.Page();
-    jetspeed.page.retrievePsml();
+    jsObj.url.loadingIndicatorShow();
+
+    jsObj.page = new jsObj.om.Page();
+
+    if ( ! printModeOnly && djConfig.isDebug )
+    {
+        if ( jsObj.debugWindowLoad )
+            jsObj.debugWindowLoad();
+
+        if ( jsObj.debug.profile && djObj.profile )
+            djObj.profile.start( "initializeDesktop" );
+        else
+            jsObj.debug.profile = false;
+    }
+    else
+    {
+        jsObj.debug.profile = false;
+    }
+
+    jsObj.page.retrievePsml();
 };
 jetspeed.updatePage = function( navToPageUrl, backOrForwardPressed )
 {
-    var currentPage = jetspeed.page;
-    if ( ! navToPageUrl || ! currentPage || jetspeed.pageNavigateSuppress ) return;
+    var jsObj = jetspeed;
+    
+    var dbProfile = false;
+    if ( djConfig.isDebug && jsObj.debug.profile )
+    {
+        dbProfile = true;
+        dojo.profile.start( "updatePage" );
+    }
+
+    var currentPage = jsObj.page;
+    if ( ! navToPageUrl || ! currentPage || jsObj.pageNavigateSuppress ) return;
     if ( currentPage.equalsPageUrl( navToPageUrl ) )
         return ;
     navToPageUrl = currentPage.makePageUrl( navToPageUrl );
     if ( navToPageUrl != null )
     {
-        jetspeed.updatePageBegin();
+        jsObj.updatePageBegin();
         var currentLayoutDecorator = currentPage.layoutDecorator;
         var currentEditMode = currentPage.editMode;
+        if ( dbProfile )
+            dojo.profile.start( "destroyPage" );
         currentPage.destroy();
-        var newJSPage = new jetspeed.om.Page( currentLayoutDecorator, navToPageUrl, (! djConfig.preventBackButtonFix && ! backOrForwardPressed), currentEditMode );
-        jetspeed.page = newJSPage;
-        newJSPage.retrievePsml( new jetspeed.om.PageContentListenerCreateWidget( true ) );
+        if ( dbProfile )
+            dojo.profile.end( "destroyPage" );
+        
+        var retainedWindows = currentPage.portlet_windows;        
+        var retainedWindowCount = currentPage.portlet_window_count;
+
+        var newJSPage = new jsObj.om.Page( currentLayoutDecorator, navToPageUrl, (! djConfig.preventBackButtonFix && ! backOrForwardPressed), currentEditMode, currentPage.tooltipMgr, currentPage.iframeCoverByWinId );
+        jsObj.page = newJSPage;
+
+        var pWin;
+        if ( retainedWindowCount > 0 )
+        {
+            for ( var windowId in retainedWindows )
+            {
+                pWin = retainedWindows[ windowId ];
+                pWin.bringToTop( null, true );
+            }
+        }
+    
+        newJSPage.retrievePsml( new jsObj.om.PageCLCreateWidget( true ) );
+        
+        if ( retainedWindowCount > 0 )
+        {
+            for ( var windowId in retainedWindows )
+            {
+                pWin = retainedWindows[ windowId ];
+                newJSPage.putPWin( pWin );
+            }
+        }
+
         window.focus();   // to prevent IE from sending alt-arrow to tab container
     }
 };
 
 jetspeed.updatePageBegin = function()
 {
-    if ( dojo.render.html.ie60 )
+    var jsObj = jetspeed;
+    if ( jsObj.UAie6 )
     {
-        document.body.attachEvent( "onclick", jetspeed.ie6StopMouseEvts );
-        document.body.setCapture();
+        jsObj.docBody.attachEvent( "onclick", jsObj.ie6StopMouseEvts );
+        jsObj.docBody.setCapture();
     }
 }
 jetspeed.ie6StopMouseEvts = function( e )
@@ -353,15 +393,18 @@
 }
 jetspeed.updatePageEnd = function()
 {
-    if ( dojo.render.html.ie60 )
+    var jsObj = jetspeed;
+    if ( jsObj.UAie6 )
     {
-        document.body.releaseCapture();
-        document.body.detachEvent( "onclick", jetspeed.ie6StopMouseEvts );
-        document.body.releaseCapture();
+        jsObj.docBody.releaseCapture();
+        jsObj.docBody.detachEvent( "onclick", jsObj.ie6StopMouseEvts );
+        jsObj.docBody.releaseCapture();
     }
 }
 
-// ... jetspeed.doRender
+
+// jetspeed.doRender
+
 jetspeed.doRender = function( bindArgs, portletEntityId )
 {
     if ( ! bindArgs )
@@ -381,53 +424,9 @@
     }
 };
 
-// ... jetspeed.doRenderAll
-jetspeed.doRenderAll = function( url, windowArray, isPageLoad, isUpdatePage )
-{
-    var debugMsg = jetspeed.debug.doRenderDoAction;
-    var debugPageLoad = jetspeed.debug.pageLoad && isPageLoad;
-    if ( ! windowArray || windowArray == null )
-        windowArray = jetspeed.page.getPortletArray();
-    var renderMsg = "";
-    var suppressGetActions = true;
-    var jsPageUrl = null ;
-    if ( isPageLoad )
-    {
-        jsPageUrl = jetspeed.url.parse( jetspeed.page.getPageUrl() );
-    }
-    for ( var i = 0; i < windowArray.length; i++ )
-    {
-        var renderObj = windowArray[i];
-        if ( (debugMsg || debugPageLoad) )
-        {
-            if ( i > 0 ) renderMsg = renderMsg + ", ";
-            var widgetId = null;
-            if ( renderObj.getProperty != null )
-                widgetId = renderObj.getProperty( jetspeed.id.PORTLET_PROP_WIDGET_ID );
-            if ( ! widgetId )
-                widgetId = renderObj.widgetId;
-            if ( ! widgetId )
-                widgetId = renderObj.toString();
-            if ( renderObj.entityId )
-            {
-                renderMsg = renderMsg + renderObj.entityId + "(" + widgetId + ")";
-                if ( debugPageLoad && renderObj.getProperty( jetspeed.id.PORTLET_PROP_WINDOW_TITLE ) )
-                    renderMsg = renderMsg + " " + renderObj.getProperty( jetspeed.id.PORTLET_PROP_WINDOW_TITLE );
-            }
-            else
-            {
-                renderMsg = renderMsg + widgetId;
-            }
-        }
-        renderObj.retrieveContent( null, { url: url, jsPageUrl: jsPageUrl }, suppressGetActions );
-    }
-    if ( debugMsg )
-        dojo.debug( "doRenderAll [" + renderMsg + "] url: " + url );
-    else if ( debugPageLoad )   // this.getPsmlUrl() ;
-        dojo.debug( "doRenderAll page-url: " + jetspeed.page.getPsmlUrl() + " portlets: [" + renderMsg + "]" + ( url ? ( " url: " + url ) : "" ) );
-};
 
-// ... jetspeed.doAction
+// jetspeed.doAction
+
 jetspeed.doAction = function( bindArgs, portletEntityId )
 {
     if ( ! bindArgs )
@@ -448,10 +447,179 @@
             else
                 dojo.debug( "doAction [" + portletEntityId + "] url: " + bindArgs.url + " form: " + jetspeed.debugDumpForm( bindArgs.formNode ) );
         }
-        targetPortlet.retrieveContent( new jetspeed.om.PortletActionContentListener( targetPortlet, bindArgs ), bindArgs );
+        targetPortlet.retrieveContent( new jetspeed.om.PortletActionCL( targetPortlet, bindArgs ), bindArgs );
     }
 };
 
+
+// jetspeed.PortletRenderer
+
+jetspeed.PortletRenderer = function( createWindows, isPageLoad, isPageUpdate, renderUrl, suppressGetActions )
+{
+    var jsObj = jetspeed;
+    var jsPage = jsObj.page;
+    this._jsObj = jsObj;
+
+    this.createWindows = createWindows;
+    this.isPageLoad = isPageLoad;
+    this.isPageUpdate = isPageUpdate;
+    this.pageLoadUrl = null;
+    if ( isPageLoad )
+        this.pageLoadUrl = jsObj.url.parse( jsPage.getPageUrl() );
+    this.renderUrl = renderUrl;
+    this.suppressGetActions = suppressGetActions;
+
+    this._colLen = jsPage.columns.length;
+    this._colIndex = 0;
+    this._portletIndex = 0;
+
+    this.psByCol = jsPage.portletsByPageColumn;
+
+    this.debugPageLoad = jsObj.debug.pageLoad && isPageLoad;
+    this.debugMsg = null;
+    if ( jsObj.debug.doRenderDoAction || this.debugPageLoad )
+        this.debugMsg = "";
+};
+dojo.lang.extend( jetspeed.PortletRenderer,
+{
+    renderAll: function()
+    {
+        do
+        {
+            this._renderCurrent();
+        } while ( this._evalNext() )
+
+        this._finished();
+    },
+    renderAllTimeDistribute: function()
+    {
+        this._renderCurrent();
+        if ( this._evalNext() )
+        {
+            dojo.lang.setTimeout( this, this.renderAllTimeDistribute, 10 );
+        }
+        else
+        {
+            this._finished();
+        }
+    },
+    _finished: function()
+    {
+        var jsObj = this._jsObj;
+
+        var debugMsg = this.debugMsg;
+        if ( debugMsg != null )
+        {
+            if ( this.debugPageLoad )
+                dojo.debug( "portlet-renderer page-url: " + jsObj.page.getPsmlUrl() + " portlets: [" + renderMsg + "]" + ( url ? ( " url: " + url ) : "" ) );
+            else
+                dojo.debug( "portlet-renderer [" + renderMsg + "] url: " + url );
+        }
+        
+        if ( this.isPageLoad )
+        {
+            jsObj.page.loadPostRender( this.isPageUpdate );
+        }
+    },
+    _renderCurrent: function()
+    {
+        var jsObj = this._jsObj;
+        
+        var colLen = this._colLen;
+        var colIndex = this._colIndex;
+        var portletIndex = this._portletIndex;
+        
+        if ( colIndex <= colLen )
+        {
+            var portletArray;
+            if ( colIndex < colLen )
+                portletArray = this.psByCol[ colIndex.toString() ];
+            else
+            {
+                portletArray = this.psByCol[ "z" ];
+                colIndex = null;
+            }
+            var portletLen = (portletArray != null ? portletArray.length : 0);
+            if ( portletLen > 0 )
+            {
+                var pAryElmt = portletArray[portletIndex];
+                if ( pAryElmt )
+                {
+                    var renderObj = pAryElmt.portlet;
+                    if ( this.createWindows )
+                        jsObj.ui.createPortletWindow( renderObj, colIndex, jsObj );
+                    
+                    var debugMsg = this.debugMsg;
+                    if ( debugMsg != null )
+                    {
+                        if ( debugMsg.length > 0 )
+                            debugMsg = debugMsg + ", ";
+                        var widgetId = null;
+                        if ( renderObj.getProperty != null )
+                            widgetId = renderObj.getProperty( jsObj.id.PP_WIDGET_ID );
+                        if ( ! widgetId )
+                            widgetId = renderObj.widgetId;
+                        if ( ! widgetId )
+                            widgetId = renderObj.toString();
+                        if ( renderObj.entityId )
+                        {
+                            debugMsg = debugMsg + renderObj.entityId + "(" + widgetId + ")";
+                            if ( this._dbPgLd && renderObj.getProperty( jsObj.id.PP_WINDOW_TITLE ) )
+                                debugMsg = debugMsg + " " + renderObj.getProperty( jsObj.id.PP_WINDOW_TITLE );
+                        }
+                        else
+                        {
+                            debugMsg = debugMsg + widgetId;
+                        }
+                    }
+
+                    renderObj.retrieveContent( null, { url: this.renderUrl, jsPageUrl: this.pageLoadUrl }, this.suppressGetActions );
+                }
+            }
+        }
+    },
+    _evalNext: function()
+    {
+        var nextFound = false;
+        var colLen = this._colLen;
+        var colIndex = this._colIndex;
+        var portletIndex = this._portletIndex;
+
+        var curColIndex = colIndex;
+        var portletArray;
+
+        // check if there's any portlet window in the next columns.
+        for ( ++colIndex; colIndex <= colLen; colIndex++ )
+        {
+            portletArray = this.psByCol[ colIndex == colLen ? "z" : colIndex.toString() ];
+            if ( portletIndex < (portletArray != null ? portletArray.length : 0) )
+            {
+                nextFound = true;
+                this._colIndex = colIndex;
+                break;
+            }
+        }
+        
+        // check if there's any portlet window in the previous columns.
+        if ( ! nextFound )
+        {
+            ++portletIndex;
+            for ( colIndex = 0; colIndex <= curColIndex; colIndex++ )
+            {
+                portletArray = this.psByCol[ colIndex == colLen ? "z" : colIndex.toString() ];
+                if ( portletIndex < (portletArray != null ? portletArray.length : 0) )
+                {
+                    nextFound = true;
+                    this._colIndex = colIndex;
+                    this._portletIndex = portletIndex;
+                    break;
+                }
+            }
+        }
+        return nextFound;
+    }
+});
+
 jetspeed.portleturl =
 {
     DESKTOP_ACTION_PREFIX_URL: null,
@@ -461,7 +629,7 @@
     PORTLET_REQUEST_RENDER: "render",
     JETSPEED_DO_NOTHING_ACTION: "javascript:jetspeed.doNothingNav()",
 
-    parseContentUrlForDesktopActionRender: function( /* String */ contentUrl )
+    parseContentUrl: function( /* String */ contentUrl )   // parseContentUrlForDesktopActionRender
     {
         if ( this.DESKTOP_ACTION_PREFIX_URL == null )
             this.DESKTOP_ACTION_PREFIX_URL = jetspeed.url.basePortalUrl() + jetspeed.url.path.ACTION ;
@@ -484,13 +652,13 @@
             //dojo.debug( "portlet-url op=" + op  + " entity=" + entityId + " url=" + contentUrl );  
         }
         
-        if ( ! jetspeed.url.validateUrlStartsWithHttp( justTheUrl ) )
+        if ( ! jetspeed.url.urlStartsWithHttp( justTheUrl ) )
             justTheUrl = null;
 
         return { url: justTheUrl, operation: op, portletEntityId: entityId };
     },
 
-    generateJSPseudoUrlActionRender: function( parsedPseudoUrl, makeDummy )
+    genPseudoUrl: function( parsedPseudoUrl, makeDummy )   // generateJSPseudoUrlActionRender
     {   // NOTE: no form can be passed in one of these
         if ( ! parsedPseudoUrl || ! parsedPseudoUrl.url || ! parsedPseudoUrl.portletEntityId ) return null;
         var hrefJScolon = null;
@@ -534,31 +702,26 @@
         
         dojo.html.insertCssFile( portletDecorationConfig.cssPathCommon, null, true );
         dojo.html.insertCssFile( portletDecorationConfig.cssPathDesktop, null, true );
-
-        if ( jetspeed.prefs.printModeOnly == null )
-            portletDecorationConfig.templatePath = pdBaseUrl + "/templates/PortletWindow.html";
-        else
-            portletDecorationConfig.templatePath = pdBaseUrl + "/templates/PortletWindowPrintMode.html";
     }
     return portletDecorationConfig;
 };
 jetspeed.loadPortletDecorationConfig = function( portletDecorationName )
-{
-    // setup default portlet decoration config
+{   // setup default portlet decoration config
+    var jsPrefs = jetspeed.prefs;
     var pdConfig = {};
-    jetspeed.prefs.portletDecorationsConfig[ portletDecorationName ] = pdConfig;
-    pdConfig.windowActionButtonOrder = jetspeed.prefs.windowActionButtonOrder;
-    pdConfig.windowActionNotPortlet = jetspeed.prefs.windowActionNotPortlet;
-    pdConfig.windowActionButtonMax = jetspeed.prefs.windowActionButtonMax;
-    pdConfig.windowActionButtonHide = jetspeed.prefs.windowActionButtonHide;
-    pdConfig.windowActionButtonTooltip = jetspeed.prefs.windowActionButtonTooltip;
-    pdConfig.windowActionMenuOrder = jetspeed.prefs.windowActionMenuOrder;
-    pdConfig.windowActionNoImage = jetspeed.prefs.windowActionNoImage;
-    pdConfig.windowIconEnabled = jetspeed.prefs.windowIconEnabled;
-    pdConfig.windowIconPath = jetspeed.prefs.windowIconPath;
+    jsPrefs.portletDecorationsConfig[ portletDecorationName ] = pdConfig;
+    pdConfig.windowActionButtonOrder = jsPrefs.windowActionButtonOrder;
+    pdConfig.windowActionNotPortlet = jsPrefs.windowActionNotPortlet;
+    pdConfig.windowActionButtonMax = jsPrefs.windowActionButtonMax;
+    pdConfig.windowActionButtonHide = jsPrefs.windowActionButtonHide;
+    pdConfig.windowActionButtonTooltip = jsPrefs.windowActionButtonTooltip;
+    pdConfig.windowActionMenuOrder = jsPrefs.windowActionMenuOrder;
+    pdConfig.windowActionNoImage = jsPrefs.windowActionNoImage;
+    pdConfig.windowIconEnabled = jsPrefs.windowIconEnabled;
+    pdConfig.windowIconPath = jsPrefs.windowIconPath;
 
     // load portlet decoration config
-    var portletDecorationConfigUri = jetspeed.prefs.getPortletDecorationBaseUrl( portletDecorationName ) + "/" + portletDecorationName + ".js";
+    var portletDecorationConfigUri = jsPrefs.getPortletDecorationBaseUrl( portletDecorationName ) + "/" + portletDecorationName + ".js";
     dojo.hostenv.loadUri( portletDecorationConfigUri, function(hash) {
 				for ( var j in hash )
                 {
@@ -593,91 +756,31 @@
 			});
 };
 
-// jetspeed.purifyIdentifier
-jetspeed.purifyIdentifier = function( src, replaceCh, camel )
-{
-    if ( src == null ) return src;
-    var limit = src.length;
-    if ( limit == 0 ) return src;
-    if ( replaceCh == null )
-        replaceCh = "_";
-    var regEx = new RegExp( "[^a-z_0-9A-Z]", "g" );
-    var chCode = src.charCodeAt( 0 );
-    var buff = null;
-    if ( ( chCode >= 65 && chCode <= 90 ) || chCode == 95 || ( chCode >= 97 && chCode <= 122 ) )
-        buff = src.charAt( 0 );
-    else
-        buff = replaceCh;
-    var hiCamel = false, loCamel = false;
-    if ( camel != null )
-    {
-        camel = camel.toLowerCase();
-        hiCamel = ( camel == "hi" ? true : false );
-        loCamel = ( camel == "lo" ? true : false );
-    }
-    if ( limit > 1 )
-    {
-        if ( hiCamel || loCamel )
-        {
-            upNext = false;
-            for ( var i = 1 ; i < limit ; i++ )
-            {
-                chCode = src.charCodeAt( i );
-                if ( ( chCode >= 65 && chCode <= 90 ) || chCode == 95 || ( chCode >= 97 && chCode <= 122 ) || ( chCode >= 48 && chCode <= 57 ) )
-                {
-                    if ( upNext && ( chCode >= 97 && chCode <= 122 ) )
-                        buff += String.fromCharCode( chCode - 32 );
-                    else
-                        buff += src.charAt( i );
-                    upNext = false;
-                }
-                else
-                {
-                    upNext = true;
-                    buff += replaceCh;
-                }
-            }
-        }
-        else
-        {
-            buff += src.substring( 1 ).replace( regEx, replaceCh );
-        }
-    }
-    if ( hiCamel )
-    {
-        chCode = buff.charCodeAt( 0 );
-        if ( chCode >= 97 && chCode <= 122 )
-            buff = String.fromCharCode( chCode - 32 ) + buff.substring( 1 );
-    }   
-    return buff;
-};
-
-// ... jetspeed.notifyRetrieveAllMenusFinished
 jetspeed.notifyRetrieveAllMenusFinished = function()
 {   // dojo.event.connect to this or add to your page content, one of the functions that it invokes ( doMenuBuildAll() or doMenuBuild() )
-    jetspeed.pageNavigateSuppress = true;
+    var jsObj = jetspeed;
+    jsObj.pageNavigateSuppress = true;
 
     if ( dojo.lang.isFunction( window.doMenuBuildAll ) )
     {   
         window.doMenuBuildAll();
     }
     
-    var menuNames = jetspeed.page.getMenuNames();
+    var menuNames = jsObj.page.getMenuNames();
     for ( var i = 0 ; i < menuNames.length; i++ )
     {
         var menuNm = menuNames[i];
-        var menuWidget = dojo.widget.byId( jetspeed.id.MENU_WIDGET_ID_PREFIX + menuNm );
+        var menuWidget = dojo.widget.byId( jsObj.id.MENU_WIDGET_ID_PREFIX + menuNm );
         if ( menuWidget )
         {
-            menuWidget.createJetspeedMenu( jetspeed.page.getMenu( menuNm ) );
+            menuWidget.createJetspeedMenu( jsObj.page.getMenu( menuNm ) );
         }
     }
     
-    jetspeed.url.loadingIndicatorHide();
-    jetspeed.pageNavigateSuppress = false;
+    jsObj.url.loadingIndicatorHide();
+    jsObj.pageNavigateSuppress = false;
 };
 
-// ... jetspeed.notifyRetrieveMenuFinished
 jetspeed.notifyRetrieveMenuFinished = function( /* jetspeed.om.Menu */ menuObj )
 {   // dojo.event.connect to this or add to your page content the function that it invokes ( doMenuBuild() )
     if ( dojo.lang.isFunction( window.doMenuBuild ) )
@@ -695,7 +798,7 @@
         var tabWidgetId = tabWidget;
         tabWidget = dojo.widget.byId( tabWidgetId );
         if ( ! tabWidget )
-            dojo.raise( "menuNavClick could not find tab widget for " + tabWidgetId );
+            dojo.raise( "Tab widget not found: " + tabWidgetId );
     }
     if ( tabWidget )
     {
@@ -703,10 +806,10 @@
         if ( ! jetspeedMenuName && tabWidget.extraArgs )
             jetspeedMenuName = tabWidget.extraArgs.jetspeedmenuname;
         if ( ! jetspeedMenuName )
-            dojo.raise( "menuNavClick tab widget [" + tabWidget.widgetId + "] does not define jetspeedMenuName" );
+            dojo.raise( "Tab widget is invalid: " + tabWidget.widgetId );
         var menuObj = jetspeed.page.getMenu( jetspeedMenuName );
         if ( ! menuObj )
-            dojo.raise( "menuNavClick Menu lookup for tab widget [" + tabWidget.widgetId + "] failed: " + jetspeedMenuName );
+            dojo.raise( "Tab widget " + tabWidget.widgetId + " no menu: " + jetspeedMenuName );
         var menuOpt = menuObj.getOptionByIndex( selectedTab );
         
         jetspeed.menuNavClick( menuOpt );
@@ -734,68 +837,6 @@
         window.location.href = navUrl;  // BOZO:NOW: popups
 };
 
-jetspeed.loadPortletSelector = function()
-{
-    var windowParams = {};
-    windowParams[ jetspeed.id.PORTLET_PROP_WINDOW_POSITION_STATIC ] = false;
-    windowParams[ jetspeed.id.PORTLET_PROP_WINDOW_HEIGHT_TO_FIT ] = false;
-    windowParams[ jetspeed.id.PORTLET_PROP_WINDOW_DECORATION ] = jetspeed.page.getPortletDecorationDefault();
-    windowParams[ jetspeed.id.PORTLET_PROP_WINDOW_TITLE ] = jetspeed.prefs.portletSelectorWindowTitle;
-    windowParams[ jetspeed.id.PORTLET_PROP_WINDOW_ICON ] = jetspeed.prefs.portletSelectorWindowIcon;
-    windowParams[ jetspeed.id.PORTLET_PROP_WIDGET_ID ] = jetspeed.id.PORTLET_WINDOW_ID_PREFIX + jetspeed.id.SELECTOR;
-    windowParams[ jetspeed.id.PORTLET_PROP_WIDTH ] = jetspeed.prefs.portletSelectorBounds.width;
-    windowParams[ jetspeed.id.PORTLET_PROP_HEIGHT ] = jetspeed.prefs.portletSelectorBounds.height;
-    windowParams[ jetspeed.id.PORTLET_PROP_LEFT ] = jetspeed.prefs.portletSelectorBounds.x;
-    windowParams[ jetspeed.id.PORTLET_PROP_TOP ] = jetspeed.prefs.portletSelectorBounds.y;
-    windowParams[ jetspeed.id.PORTLET_PROP_EXCLUDE_PCONTENT ] = true;
-    windowParams[ jetspeed.id.PORTLET_PROP_CONTENT_RETRIEVER ] = new jetspeed.om.PortletSelectorContentRetriever();
-    var pwWidgetParams = jetspeed.widget.PortletWindow.prototype.staticDefineAsAltInitParameters( null, windowParams );
-    jetspeed.ui.createPortletWindow( pwWidgetParams );
-    pwWidgetParams.retrieveContent( null, null );
-    jetspeed.getPortletDefinitions();
-};
-
-jetspeed.getPortletDefinitions = function()
-{
-    var contentListener = new jetspeed.om.PortletSelectorAjaxApiContentListener();
-    var queryString = "?action=getportlets";
-    var getPortletsUrl = jetspeed.url.basePortalUrl() + jetspeed.url.path.AJAX_API + queryString ;
-    var mimetype = "text/xml";
-    var ajaxApiContext = new jetspeed.om.Id( "getportlets", { } );
-    jetspeed.url.retrieveContent( { url: getPortletsUrl, mimetype: mimetype }, contentListener, ajaxApiContext, jetspeed.debugContentDumpIds );
-};
-
-jetspeed.searchForPortletDefinitions = function(filter, catPortlets)
-{
-    var contentListener = new jetspeed.om.PortletSelectorSearchContentListener(catPortlets);
-    var queryString = "?action=getportlets&filter=" + filter;
-    var getPortletsUrl = jetspeed.url.basePortalUrl() + jetspeed.url.path.AJAX_API + queryString ;
-    var mimetype = "text/xml";
-    var ajaxApiContext = new jetspeed.om.Id( "getportlets", { } );
-    jetspeed.url.retrieveContent( { url: getPortletsUrl, mimetype: mimetype }, contentListener, ajaxApiContext, jetspeed.debugContentDumpIds );
-};
-
-jetspeed.getFolders = function(data, handler)
-{
-    var contentListener = new jetspeed.om.FoldersListContentListener(handler);
-    var queryString = "?action=getfolders&data=" + data;
-    var getPortletsUrl = jetspeed.url.basePortalUrl() + jetspeed.url.path.AJAX_API + queryString ;
-    var mimetype = "text/xml";
-	//alert('getPortletsUrl ' + getPortletsUrl);
-    var ajaxApiContext = new jetspeed.om.Id( "getfolders", { } );
-    jetspeed.url.retrieveContent( { url: getPortletsUrl, mimetype: mimetype }, contentListener, ajaxApiContext, jetspeed.debugContentDumpIds );
-};
-
-jetspeed.portletDefinitionsforSelector = function(filter,category,pagenumber,portletPerPages,catPortlets)
-{
-    var contentListener = new jetspeed.om.PortletSelectorSearchContentListener(catPortlets);
-    var queryString = "?action=selectorPortlets&category=" + category + "&portletPerPages=" + portletPerPages + "&pageNumber=" + pagenumber + "&filter=" + filter;
-    var getPortletsUrl = jetspeed.url.basePortalUrl() + jetspeed.url.path.AJAX_API + queryString ;
-    var mimetype = "text/xml";
-    //alert('getPortletsUrl '  + getPortletsUrl);
-	var ajaxApiContext = new jetspeed.om.Id( "selectorPortlets", { } );
-    jetspeed.url.retrieveContent( { url: getPortletsUrl, mimetype: mimetype }, contentListener, ajaxApiContext, jetspeed.debugContentDumpIds );
-};
 jetspeed.getActionsForPortlet = function( /* String */ portletEntityId )
 {
     if ( portletEntityId == null ) return;
@@ -805,7 +846,7 @@
 {
     if ( portletEntityIds == null )
         portletEntityIds = jetspeed.page.getPortletIds();
-    var contentListener = new jetspeed.om.PortletActionsContentListener( portletEntityIds );
+    var contentListener = new jetspeed.om.PortletActionsCL( portletEntityIds );
     var queryString = "?action=getactions";
     for ( var i = 0 ; i < portletEntityIds.length ; i++ )
     {
@@ -820,7 +861,7 @@
 {
     if ( portletEntityId == null ) return;
     if ( contentListener == null )
-        contentListener = new jetspeed.om.PortletChangeActionContentListener( portletEntityId );
+        contentListener = new jetspeed.om.PortletChangeActionCL( portletEntityId );
     var queryString = "?action=window&id=" + ( portletEntityId != null ? portletEntityId : "" );
     if ( changeActionState != null )
         queryString += "&state=" + changeActionState;
@@ -832,66 +873,40 @@
     jetspeed.url.retrieveContent( { url: changeActionUrl, mimetype: mimetype }, contentListener, ajaxApiContext, jetspeed.debugContentDumpIds );
 };
 
-jetspeed.addNewPortletDefinition = function( /* jetspeed.om.PortletDef */ portletDef, windowWidgetId, /* String */ psmlUrl, /* String */ layoutId )
-{
-    var addToCurrentPage = true;
-    if ( psmlUrl != null )
-    {
-        addToCurrentPage = false;
-    }
-    var contentListener = new jetspeed.om.PortletAddAjaxApiCallbackContentListener( portletDef, windowWidgetId, addToCurrentPage );
-    var queryString = "?action=add&id=" + escape( portletDef.getPortletName() );
-    if ( layoutId != null && layoutId.length > 0 )
-    {
-        queryString += "&layoutid=" + escape( layoutId );
-    }
-    var addPortletUrl = null;
-    if ( psmlUrl != null )
-    {
-        addPortletUrl = psmlUrl + queryString;   //  psmlUrl example: http://localhost:8080/jetspeed/ajaxapi/google-maps.psml
-    }
-    else
-    {
-        addPortletUrl = jetspeed.page.getPsmlUrl() + queryString;
-    }
-    var mimetype = "text/xml";
-    var ajaxApiContext = new jetspeed.om.Id( "addportlet", { } );
-    jetspeed.url.retrieveContent( { url: addPortletUrl, mimetype: mimetype }, contentListener, ajaxApiContext, jetspeed.debugContentDumpIds );
-};
-
 jetspeed.editPageInitiate = function()
 {
-    if ( ! jetspeed.page.editMode )
+    var jsObj = jetspeed;
+    if ( ! jsObj.page.editMode )
     {
         var fromDesktop = true;
-        var fromPortal = jetspeed.url.getQueryParameter( window.location.href, jetspeed.id.PORTAL_ORIGINATE_PARAMETER );
+        var fromPortal = jsObj.url.getQueryParameter( window.location.href, jsObj.id.PORTAL_ORIGINATE_PARAMETER );
         if ( fromPortal != null && fromPortal == "true" )
             fromDesktop = false;
-        jetspeed.page.editMode = true;
-        var pageEditorWidget = dojo.widget.byId( jetspeed.id.PG_ED_WID );
-        if ( dojo.render.html.ie60 )
-            jetspeed.page.displayAllPortlets( true );
+        jsObj.page.editMode = true;
+        var pageEditorWidget = dojo.widget.byId( jsObj.id.PG_ED_WID );
+        if ( jsObj.UAie6 )
+            jsObj.page.displayAllPWins( true );
         if ( pageEditorWidget == null )
         {
             try
             {
-                jetspeed.url.loadingIndicatorShow( "loadpageeditor" );
-                pageEditorWidget = dojo.widget.createWidget( "jetspeed:PageEditor", { widgetId: jetspeed.id.PG_ED_WID, editorInitiatedFromDesktop: fromDesktop } );
-                var allColumnsContainer = document.getElementById( jetspeed.id.COLUMNS );
+                jsObj.url.loadingIndicatorShow( "loadpageeditor" );
+                pageEditorWidget = dojo.widget.createWidget( "jetspeed:PageEditor", { widgetId: jsObj.id.PG_ED_WID, editorInitiatedFromDesktop: fromDesktop } );
+                var allColumnsContainer = document.getElementById( jsObj.id.COLUMNS );
                 allColumnsContainer.insertBefore( pageEditorWidget.domNode, allColumnsContainer.firstChild );
             }
             catch (e)
             {
-                jetspeed.url.loadingIndicatorHide();
-                if ( dojo.render.html.ie60 )
-                    jetspeed.page.displayAllPortlets();
+                jsObj.url.loadingIndicatorHide();
+                if ( jsObj.UAie6 )
+                    jsObj.page.displayAllPWins();
             }
         }
         else
         {
             pageEditorWidget.editPageShow();
         }
-        jetspeed.page.syncPageControls();
+        jsObj.page.syncPageControls();
     }
 };
 jetspeed.editPageTerminate = function()
@@ -934,7 +949,7 @@
 {
 };
 jetspeed.om.PortletContentRetriever.prototype =
-{   // /* Portlet */ portlet, /* String */ requestUrl, /* PortletContentListener */ portletContentListener
+{   // /* Portlet */ portlet, /* String */ requestUrl, /* PortletCL */ portletCL
     getContent: function( bindArgs, contentListener, domainModelObject, /* String[] */ debugContentDumpIds )
     {
         if ( ! bindArgs )
@@ -943,121 +958,27 @@
     }
 };
 
-// ... jetspeed.om.PortletSelectorContentRetriever
-jetspeed.om.PortletSelectorContentRetriever = function()
-{
-};
-jetspeed.om.PortletSelectorContentRetriever.prototype =
-{
-    getContent: function( bindArgs, contentListener, domainModelObject, /* String[] */ debugContentDumpIds )
-    {
-        if ( ! bindArgs )
-            bindArgs = {};
-        var content = '<div widgetId="' + jetspeed.id.SELECTOR + '" dojoType="PortletDefContainer"></div>';
-        if ( ! contentListener )
-            contentListener = new jetspeed.om.BasicContentListener();
-        contentListener.notifySuccess( content, bindArgs.url, domainModelObject ) ;
-    }
-};
-
-// ... jetspeed.om.PortletSelectorContentListener
-jetspeed.om.PortletSelectorContentListener = function()
-{
-};
-jetspeed.om.PortletSelectorContentListener.prototype =
-{
-    notifySuccess: function( /* String */ portletContent, /* String */ requestUrl, /* Portlet */ portlet )
-    {
-        var windowWidget = this.getPortletWindow();
-        if ( windowWidget )
-        {
-            windowWidget.setPortletContent( portletContent, renderUrl );
-        }
-    },
-    notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, /* Portlet */ portlet )
-    {
-        dojo.raise( "PortletSelectorContentListener notifyFailure url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
-    }
-};
-
-// ... jetspeed.om.PageContentListenerUpdate
-jetspeed.om.PageContentListenerUpdate = function( /* jetspeed.om.Page */ previousPage )
-{
-    this.previousPage = previousPage;
-};
-jetspeed.om.PageContentListenerUpdate.prototype =
-{
-    notifySuccess: function( /* XMLDocument */ data, /* String */ requestUrl, /* Page */ page )
-    {
-        dojo.raise( "PageContentListenerUpdate notifySuccess - BUT NOT SUPPORTED - url=" + requestUrl ) ;
-        //page.getPortletsFromPSML( data );  // the new getFragmentsFromPSML is not compatible with this usage
-        //var updatedPortlets = page.getPortletArray();
-        //for ( var i = 0 ; i < updatedPortlets.length ; i++ )
-        //{
-        //    var prevPortlet = this.previousPage.getPortlet( updatedPortlets[i].entityId );
-        //    if ( prevPortlet == null )
-        //    {
-        //        dojo.debug( "PageContentListenerUpdate  new portlet definition in page: " + updatedPortlets[i].toString() ) ;
-        //    }
-        //}
-    },
-    notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, /* Page */ page )
-    {
-        dojo.raise( "PageContentListenerUpdate notifyFailure url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
-    }
-};
-
-// ... jetspeed.om.PageContentListenerCreateWidget
-jetspeed.om.PageContentListenerCreateWidget = function( isUpdatePage )
+// ... jetspeed.om.PageCLCreateWidget
+jetspeed.om.PageCLCreateWidget = function( isPageUpdate )
 {
-    if ( typeof isUpdatePage == "undefined" )
-        isUpdatePage = false ;
-    this.isUpdatePage = isUpdatePage ;
+    if ( typeof isPageUpdate == "undefined" )
+        isPageUpdate = false ;
+    this.isPageUpdate = isPageUpdate ;
 };
-jetspeed.om.PageContentListenerCreateWidget.prototype =
+jetspeed.om.PageCLCreateWidget.prototype =
 {
     notifySuccess: function( /* XMLDocument */ data, /* String */ requestUrl, /* Page */ page )
     {
-        page.loadFromPSML( data, this.isUpdatePage );
+        page.loadFromPSML( data, this.isPageUpdate );
     },
     notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, /* Page */ page )
     {
-        dojo.raise( "PageContentListenerCreateWidget error url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
-    }
-};
-
-// ... jetspeed.om.Id
-jetspeed.om.Id = function( /* ... */ )  // intended as a simple, general object with an id and a getId() function
-{
-    var idBuff = "";
-    for ( var i = 0; i < arguments.length; i++ )
-    {
-        if( dojo.lang.isString( arguments[i] ) )
-        {
-            if ( idBuff.length > 0 )
-                idBuff += "-";
-            idBuff += arguments[i];
-        }
-        else if ( dojo.lang.isObject( arguments[i] ) )
-        {
-            for ( var slotKey in arguments[i] )
-            {
-                this[ slotKey ] = arguments[i][slotKey];
-            }
-        }
+        dojo.raise( "PageCLCreateWidget error url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
     }
-    this.jetspeed_om_id = idBuff;
 };
-dojo.lang.extend( jetspeed.om.Id,
-{
-    getId: function()
-    {
-        return this.jetspeed_om_id;
-    }
-});
 
 // ... jetspeed.om.Page
-jetspeed.om.Page = function( requiredLayoutDecorator, navToPageUrl, addToHistory, editMode )
+jetspeed.om.Page = function( requiredLayoutDecorator, navToPageUrl, addToHistory, editMode, tooltipMgr, iframeCoverByWinId )
 {
     if ( requiredLayoutDecorator != null && navToPageUrl != null )
     {
@@ -1076,9 +997,26 @@
     this.layouts = {};
     this.columns = [];
     this.portlets = [];
+    this.portlet_count = 0;
+    this.portlet_windows = {};
+    this.portlet_window_count = 0;
+    if ( iframeCoverByWinId != null )
+        this.iframeCoverByWinId = iframeCoverByWinId;
+    else
+        this.iframeCoverByWinId = {};
+    this.portlet_tiled_high_z = 10;
+    this.portlet_untiled_high_z = -1;
     this.menus = [];
+    
+    if ( tooltipMgr != null )
+        this.tooltipMgr = tooltipMgr;
+    else
+    {
+        this.tooltipMgr = dojo.widget.createWidget( "jetspeed:PortalTooltipManager", { isContainer: false, fastMixIn: true } );
+        // setting isContainer=false and fastMixIn=true to avoid recursion hell when connectId is a node (could give each an id instead)
+        jetspeed.docBody.appendChild( this.tooltipMgr.domNode );
+    }
 };
-dojo.inherits( jetspeed.om.Page, jetspeed.om.Id );
 dojo.lang.extend( jetspeed.om.Page,
 {
     psmlPath: null,
@@ -1098,6 +1036,7 @@
     layouts: null,
     columns: null,
     portlets: null,
+    portletsByPageColumn: null,
 
     editMode: false,
     themeDefinitions: null,
@@ -1171,7 +1110,7 @@
     retrievePsml: function( pageContentListener )
     {
         if ( pageContentListener == null )
-            pageContentListener = new jetspeed.om.PageContentListenerCreateWidget();
+            pageContentListener = new jetspeed.om.PageCLCreateWidget();
 
         var psmlUrl = this.getPsmlUrl() ;
         var mimetype = "text/xml";
@@ -1182,15 +1121,22 @@
         jetspeed.url.retrieveContent( { url: psmlUrl, mimetype: mimetype }, pageContentListener, this, jetspeed.debugContentDumpIds );
     },
 
-    loadFromPSML: function( psml, isUpdatePage )
+    loadFromPSML: function( psml, isPageUpdate )
     {
+        var jsObj = jetspeed;
+        var printModeOnly = jsObj.prefs.printModeOnly ;
+        if ( djConfig.isDebug && jsObj.debug.profile && printModeOnly == null )
+        {
+            dojo.profile.start( "loadFromPSML" );
+        }
+
         // parse PSML
         var parsedRootLayoutFragment = this._parsePSML( psml );
         if ( parsedRootLayoutFragment == null ) return;
 
         // create layout model
-        var portletsByPageColumn = {};
-        this.columnsStructure = this._layoutCreateModel( parsedRootLayoutFragment, null, portletsByPageColumn, true );
+        this.portletsByPageColumn = {};
+        this.columnsStructure = this._layoutCreateModel( parsedRootLayoutFragment, null, this.portletsByPageColumn, true );
 
         this.rootFragmentId = parsedRootLayoutFragment.id ;
 
@@ -1198,66 +1144,49 @@
         if ( this.editMode )
         {
             this.editMode = false;
-            if ( jetspeed.prefs.printModeOnly == null )
+            if ( printModeOnly == null )
                 initiateEditMode = true;
         }
 
         // create columns
-        if ( jetspeed.prefs.windowTiling )
+        if ( jsObj.prefs.windowTiling )
+        {
+            this._createColsStart( document.getElementById( jsObj.id.DESKTOP ) );
+        }
+        
+        var portletArray = this.portletsByPageColumn[ "z" ];
+        if ( portletArray )
         {
-            this._createColumnsStart( document.getElementById( jetspeed.id.DESKTOP ) );
+            portletArray.sort( this._loadPortletZIndexCompare );
         }
 
-        // create portlet windows
-        var windowsToRender = new Array();
-        var colLen = this.columns.length;
-        for ( var colIndex = 0 ; colIndex <= this.columns.length ; colIndex++ )  // iterate to one past last column index
+        var renderer = new jetspeed.PortletRenderer( true, true, isPageUpdate, null, true );
+        renderer.renderAllTimeDistribute();
+        //renderer.renderAll();
+    },
+    loadPostRender: function( isPageUpdate )
+    {
+        var jsObj = jetspeed;
+        var printModeOnly = jsObj.prefs.printModeOnly ;
+        if ( printModeOnly == null )
         {
-            var portletArray = null;
-            if ( colIndex == colLen )
+            this._portletsInitWinState( this.portletsByPageColumn[ "z" ] );
+    
+            var initiateEditMode = false;
+            if ( this.editMode )
+                initiateEditMode = true;
+            
+            // detect edit mode force - likely to be temporary
+            var pageEditorInititate = jsObj.url.getQueryParameter( window.location.href, jsObj.id.PG_ED_PARAM );
+            if ( initiateEditMode || ( pageEditorInititate != null && pageEditorInititate == "true" ) || this.actions[ jsObj.id.ACT_VIEW ] != null )
             {
-                portletArray = portletsByPageColumn[ "z" ];
-                if ( portletArray != null )
-                    portletArray.sort( this._loadPortletZIndexCompare );
+                initiateEditMode = false;
+                if ( this.actions != null && ( this.actions[ jsObj.id.ACT_EDIT ] != null || this.actions[ jsObj.id.ACT_VIEW ] != null ) )
+                    initiateEditMode = true;
             }
-            else
-            {
-                portletArray = portletsByPageColumn[ colIndex.toString() ];
-            }
-        
-            if ( portletArray != null )
-            {
-                for ( var i = 0; i < portletArray.length; i++ )
-                {
-                    var portlet = portletArray[i].portlet;
-                    windowsToRender.push( portlet );
-                    portlet.createPortletWindow( colIndex );
-                }
-            }
-        }
-
-        if ( jetspeed.prefs.printModeOnly == null )
-        {
-            // render portlets
-            if ( windowsToRender && windowsToRender.length > 0 )
-            {
-                jetspeed.doRenderAll( null, windowsToRender, true, isUpdatePage );
-            }
-
-            // initialize portlet window state
-            this._portletsInitializeWindowState( portletsByPageColumn[ "z" ] );
-
-            // detect edit mode force - likely to be temporary
-            var pageEditorInititate = jetspeed.url.getQueryParameter( window.location.href, jetspeed.id.PG_ED_PARAM );
-            if ( initiateEditMode || ( pageEditorInititate != null && pageEditorInititate == "true" ) || this.actions[ jetspeed.id.ACTION_NAME_VIEW ] != null )
-            {
-                initiateEditMode = false;
-                if ( this.actions != null && ( this.actions[ jetspeed.id.ACTION_NAME_EDIT ] != null || this.actions[ jetspeed.id.ACTION_NAME_VIEW ] != null ) )
-                    initiateEditMode = true;
-            }
-
+    
             // load menus
-            this.retrieveMenuDeclarations( true, initiateEditMode, isUpdatePage );
+            this.retrieveMenuDeclarations( true, initiateEditMode, isPageUpdate );
     
             // render page buttons
             this.renderPageControls();
@@ -1265,29 +1194,24 @@
         }
         else
         {
-            var portlet = null;
             for ( var portletIndex in this.portlets )
             {
-                portlet = this.portlets[portletIndex];
+                var portlet = this.portlets[portletIndex];
+                if ( portlet != null )
+                    portlet.renderAction( null, printModeOnly.action );
                 break;
             }
-            if ( portlet != null )
-            {
-                portlet.renderAction( null, jetspeed.prefs.printModeOnly.action );
-
-                this._portletsInitializeWindowState( portletsByPageColumn[ "z" ] );
-            }
-            if ( isUpdatePage )
-            {
-                jetspeed.updatePageEnd() ;
-            }
+            if ( isPageUpdate )
+                jsObj.updatePageEnd() ;
         }
     },
+    
     _parsePSML: function( psml )
     {
+        var jsObj = jetspeed;
         var pageElements = psml.getElementsByTagName( "page" );
-        if ( ! pageElements || pageElements.length > 1 )
-            dojo.raise( "unexpected zero or multiple <page> elements in psml" );
+        if ( ! pageElements || pageElements.length > 1 || pageElements[0] == null )
+            dojo.raise( "Expected one <page> in PSML" );
         var pageElement = pageElements[0];
         var children = pageElement.childNodes;
         var simpleValueLNames = new RegExp( "(name|path|profiledPath|title|short-title)" );
@@ -1310,7 +1234,9 @@
             }
             else if ( childLName && childLName.match( simpleValueLNames  ) )
             {
-                this[ jetspeed.purifyIdentifier( childLName, "", "lo" ) ] = ( ( child && child.firstChild ) ? child.firstChild.nodeValue : null );
+                if ( childLName == "short-title" )
+                    childLName = "shortTitle";
+                this[ childLName ] = ( ( child && child.firstChild ) ? child.firstChild.nodeValue : null );
             }
             else if ( childLName == "action" )
             {
@@ -1321,48 +1247,49 @@
 
         if ( rootFragment == null )
         {
-            dojo.raise( "No root fragment in PSML." );
+            dojo.raise( "No root fragment in PSML" );
             return null;
         }
         if ( this.requiredLayoutDecorator != null && this.pageUrlFallback != null )
         {
             if ( this.layoutDecorator != this.requiredLayoutDecorator )
             {
-                if ( jetspeed.debug.ajaxPageNav ) 
+                if ( jsObj.debug.ajaxPageNav ) 
                     dojo.debug( "ajaxPageNavigation _parsePSML different layout decorator (" + this.requiredLayoutDecorator + " != " + this.layoutDecorator + ") - fallback to normal page navigation - " + this.pageUrlFallback );
-                jetspeed.pageNavigate( this.pageUrlFallback, null, true );
+                jsObj.pageNavigate( this.pageUrlFallback, null, true );
                 return null;
             }
             else if ( this.addToHistory )
             {
                 var currentPageUrl = this.getPageUrl();
                 dojo.undo.browser.addToHistory({
-	    	        back: function() { if ( jetspeed.debug.ajaxPageNav ) dojo.debug( "back-nav-button: " + currentPageUrl ); jetspeed.updatePage( currentPageUrl, true ); },
-		            forward: function() { if ( jetspeed.debug.ajaxPageNav ) dojo.debug( "forward-nav-button: " + currentPageUrl ); jetspeed.updatePage( currentPageUrl, true ); },
+	    	        back: function() { if ( jsObj.debug.ajaxPageNav ) dojo.debug( "back-nav-button: " + currentPageUrl ); jsObj.updatePage( currentPageUrl, true ); },
+		            forward: function() { if ( jsObj.debug.ajaxPageNav ) dojo.debug( "forward-nav-button: " + currentPageUrl ); jsObj.updatePage( currentPageUrl, true ); },
 		            changeUrl: escape( this.getPath() )
 		        });
             }
         }
-        else if ( ! djConfig.preventBackButtonFix && jetspeed.prefs.ajaxPageNavigation )
+        else if ( ! djConfig.preventBackButtonFix && jsObj.prefs.ajaxPageNavigation )
         {
             var currentPageUrl = this.getPageUrl();
             dojo.undo.browser.setInitialState({
-                back: function() { if ( jetspeed.debug.ajaxPageNav ) dojo.debug( "back-nav-button initial: " + currentPageUrl ); jetspeed.updatePage( currentPageUrl, true ); },
-                forward: function() { if ( jetspeed.debug.ajaxPageNav ) dojo.debug( "forward-nav-button initial: " + currentPageUrl ); jetspeed.updatePage( currentPageUrl, true ); },
+                back: function() { if ( jsObj.debug.ajaxPageNav ) dojo.debug( "back-nav-button initial: " + currentPageUrl ); jsObj.updatePage( currentPageUrl, true ); },
+                forward: function() { if ( jsObj.debug.ajaxPageNav ) dojo.debug( "forward-nav-button initial: " + currentPageUrl ); jsObj.updatePage( currentPageUrl, true ); },
                 changeUrl: escape( this.getPath() )
             });
         }
 
-        var parsedRootLayoutFragment = this._parsePSMLLayoutFragment( rootFragment, 0 );    // rootFragment must be a layout fragment - /portal requires this as well
+        var parsedRootLayoutFragment = this._parsePSMLFrag( rootFragment, 0 );    // rootFragment must be a layout fragment - /portal requires this as well
         return parsedRootLayoutFragment;
     },
-    _parsePSMLLayoutFragment: function( layoutNode, layoutNodeDocumentOrderIndex )
+    _parsePSMLFrag: function( layoutNode, layoutNodeDocumentOrderIndex )
     {
+        var jsObj = jetspeed;
         var fragChildren = new Array();
         var layoutFragType = ( (layoutNode != null) ? layoutNode.getAttribute( "type" ) : null );
         if ( layoutFragType != "layout" )
         {
-            dojo.raise( "_parsePSMLLayoutFragment called with non-layout fragment: " + layoutNode );
+            dojo.raise( "Expected layout fragment: " + layoutNode );
             return null;
         }
         var layoutActionsDisabled = false;
@@ -1391,7 +1318,7 @@
                 fragType = child.getAttribute( "type" );
                 if ( fragType == "layout" )
                 {
-                    var parsedLayoutChildFragment = this._parsePSMLLayoutFragment( child, i );
+                    var parsedLayoutChildFragment = this._parsePSMLFrag( child, i );
                     if ( parsedLayoutChildFragment != null )
                     {
                         fragChildren.push( parsedLayoutChildFragment ) ;
@@ -1399,29 +1326,29 @@
                 }
                 else
                 {
-                    var portletProps = this._parsePSMLProperties( child, null );
-                    var portletIcon = portletProps[ jetspeed.id.PORTLET_PROP_WINDOW_ICON ];
+                    var portletProps = this._parsePSMLProps( child, null );
+                    var portletIcon = portletProps[ jsObj.id.PP_WINDOW_ICON ];
                     if ( portletIcon == null || portletIcon.length == 0 )
                     {
                         portletIcon = this._parsePSMLIcon( child );
                         if ( portletIcon != null && portletIcon.length > 0 )
                         {
-                            portletProps[ jetspeed.id.PORTLET_PROP_WINDOW_ICON ] = portletIcon;
+                            portletProps[ jsObj.id.PP_WINDOW_ICON ] = portletIcon;
                         }
                     }
-                    fragChildren.push( { id: child.getAttribute( "id" ), type: fragType, name: child.getAttribute( "name" ), properties: portletProps, actions: this._parsePSMLActions( child, null ), currentActionState: this._parsePSMLCurrentActionState( child ), currentActionMode: this._parsePSMLCurrentActionMode( child ), decorator: child.getAttribute( "decorator" ), layoutActionsDisabled: layoutActionsDisabled, documentOrderIndex: i } );
+                    fragChildren.push( { id: child.getAttribute( "id" ), type: fragType, name: child.getAttribute( "name" ), properties: portletProps, actions: this._parsePSMLActions( child, null ), currentActionState: this._parsePSMLActionState( child ), currentActionMode: this._parsePSMLActionMode( child ), decorator: child.getAttribute( "decorator" ), layoutActionsDisabled: layoutActionsDisabled, documentOrderIndex: i } );
                 }
             }
             else if ( childLName == "property" )
             {
-                if ( this._parsePSMLProperty( child, propertiesMap ) == "sizes" )
+                if ( this._parsePSMLProp( child, propertiesMap ) == "sizes" )
                 {
                     if ( sizes != null )
                     {
-                        dojo.raise( "_parsePSMLLayoutFragment called with layout fragment that contains more than one sizes property: " + layoutNode );
+                        dojo.raise( "Layout fragment has multiple sizes definitions: " + layoutNode );
                         return null;
                     }
-                    if ( jetspeed.prefs.printModeOnly != null )
+                    if ( jsObj.prefs.printModeOnly != null )
                     {
                         sizes = [ "100" ];
                         sizesSum = 100;
@@ -1487,7 +1414,7 @@
             actionsMap[ actionName.toLowerCase() ] = { id: actionName, type: actionType, label: actionLabel, url: actionUrl, alt: actionAlt };
         }
     },
-    _parsePSMLCurrentActionState: function( fragmentNode )
+    _parsePSMLActionState: function( fragmentNode )
     {
         var nodes = fragmentNode.getElementsByTagName( "state" );
         if ( nodes != null && nodes.length == 1 && nodes[0].firstChild != null )
@@ -1496,7 +1423,7 @@
         }
         return null;
     },
-    _parsePSMLCurrentActionMode: function( fragmentNode )
+    _parsePSMLActionMode: function( fragmentNode )
     {
         var nodes = fragmentNode.getElementsByTagName( "mode" );
         if ( nodes != null && nodes.length == 1 && nodes[0].firstChild != null )
@@ -1514,18 +1441,18 @@
         }
         return null;
     },
-    _parsePSMLProperties: function( fragmentNode, propertiesMap )
+    _parsePSMLProps: function( fragmentNode, propertiesMap )
     {
         if ( propertiesMap == null )
             propertiesMap = {};
         var props = fragmentNode.getElementsByTagName( "property" );
         for( var propsIdx=0; propsIdx < props.length; propsIdx++ )
         {
-            this._parsePSMLProperty( props[propsIdx], propertiesMap );
+            this._parsePSMLProp( props[propsIdx], propertiesMap );
         }
         return propertiesMap;
     },
-    _parsePSMLProperty: function( propertyNode, propertiesMap )
+    _parsePSMLProp: function( propertyNode, propertiesMap )
     {
         var propName = propertyNode.getAttribute( "name" );
         var propValue = propertyNode.getAttribute( "value" );
@@ -1548,8 +1475,10 @@
 
     _layoutCreateModel: function( layoutFragment, parentColumn, portletsByPageColumn, omitLayoutHeader )
     {  // layoutFragmentParentColumnIndex, parentColumnsInLayout
+        var jsObj = jetspeed;
+        var djObj = dojo;
         var allColumnsStartIndex = this.columns.length;
-        var colModelResult = this._layoutRegisterAndCreateColumnsModel( layoutFragment, parentColumn, omitLayoutHeader );
+        var colModelResult = this._layoutCreateColsModel( layoutFragment, parentColumn, omitLayoutHeader );
         var columnsInLayout = colModelResult.columnsInLayout;
         if ( colModelResult.addedLayoutHeaderColumn )
             allColumnsStartIndex++;
@@ -1578,10 +1507,10 @@
             {
                 var childFrag = layoutFragment.fragments[ i ];
                 var childFragInColIndex = i;
-                if ( childFrag.properties && childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] >= 0 )
+                if ( childFrag.properties && childFrag.properties[ jsObj.id.PP_COLUMN ] >= 0 )
                 {
-                    if ( childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] != null && childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] >= 0 )
-                        childFragInColIndex = childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] ;
+                    if ( childFrag.properties[ jsObj.id.PP_COLUMN ] != null && childFrag.properties[ jsObj.id.PP_COLUMN ] >= 0 )
+                        childFragInColIndex = childFrag.properties[ jsObj.id.PP_COLUMN ] ;
                 }
                 if ( childFragInColIndex >= columnsInLayoutLen )
                 {
@@ -1605,7 +1534,7 @@
                     {
                         clonedLayoutFragmentCount++;
                         var clonedPortletLayout = {};
-                        dojo.lang.mixin( clonedPortletLayout, layoutFragment );
+                        djObj.lang.mixin( clonedPortletLayout, layoutFragment );
                         clonedPortletLayout.fragments = new Array();
                         clonedPortletLayout.layoutFragmentIndexes = new Array();
                         clonedPortletLayout.otherFragmentIndexes = new Array();
@@ -1665,8 +1594,9 @@
         return columnsInLayout;
     },
 
-    _layoutFragmentChildCollapse: function( layoutFragment, targetLayoutFragment )
+    _layoutFragChildCollapse: function( layoutFragment, targetLayoutFragment )
     {
+        var jsObj = jetspeed;
         var hasNestedLayouts = false;
         if ( targetLayoutFragment == null )
             targetLayoutFragment = layoutFragment;
@@ -1681,34 +1611,35 @@
                     for ( var i = 0 ; i < layoutChildFrag.otherFragmentIndexes.length ; i++ )
                     {
                         var pFrag = layoutChildFrag.fragments[ layoutChildFrag.otherFragmentIndexes[i] ];
-                        pFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] = -1;
-                        pFrag.properties[ jetspeed.id.PORTLET_PROP_ROW ] = -1;
+                        pFrag.properties[ jsObj.id.PP_COLUMN ] = -1;
+                        pFrag.properties[ jsObj.id.PP_ROW ] = -1;
                         // BOZO:NOW: ^^ should we set to -1 or delete row & column properties ?
                         pFrag.documentOrderIndex = targetLayoutFragment.fragments.length;
                         targetLayoutFragment.fragments.push( pFrag );
                         targetLayoutFragment.otherFragIndexes.push( targetLayoutFragment.fragments.length ) ;
                     }
                 }
-                this._layoutFragmentChildCollapse( layoutChildFrag, targetLayoutFragment );
+                this._layoutFragChildCollapse( layoutChildFrag, targetLayoutFragment );
             }
         }
         return hasNestedLayouts;
     },
 
-    _layoutRegisterAndCreateColumnsModel: function( layoutFragment, parentColumn, omitLayoutHeader )
+    _layoutCreateColsModel: function( layoutFragment, parentColumn, omitLayoutHeader )
     {
+        var jsObj = jetspeed;
         this.layouts[ layoutFragment.id ] = layoutFragment;
         var addedLayoutHeaderColumn = false;
         var columnsInLayout = new Array();
-        if ( jetspeed.prefs.windowTiling && layoutFragment.columnSizes.length > 0 )
+        if ( jsObj.prefs.windowTiling && layoutFragment.columnSizes.length > 0 )
         {
             var subOneLast = false;
-            if ( jetspeed.browser_IE ) // IE can't deal with 100% here on any nested column - so subtract 0.1% - bug not fixed in IE7
+            if ( jsObj.UAie ) // IE can't deal with 100% here on any nested column - so subtract 0.1% - bug not fixed in IE7
                 subOneLast = true;
             
             if ( parentColumn != null && ! omitLayoutHeader )
             {
-                var layoutHeaderColModelObj = new jetspeed.om.Column( 0, layoutFragment.id, ( subOneLast ? layoutFragment.columnSizesSum-0.1 : layoutFragment.columnSizesSum ), this.columns.length, layoutFragment.layoutActionsDisabled );
+                var layoutHeaderColModelObj = new jsObj.om.Column( 0, layoutFragment.id, ( subOneLast ? layoutFragment.columnSizesSum-0.1 : layoutFragment.columnSizesSum ), this.columns.length, layoutFragment.layoutActionsDisabled );
                 layoutHeaderColModelObj.layoutHeader = true;
                 this.columns.push( layoutHeaderColModelObj );
                 if ( parentColumn.columnChildren == null )
@@ -1723,7 +1654,7 @@
                 var size = layoutFragment.columnSizes[i];
                 if ( subOneLast && i == (layoutFragment.columnSizes.length - 1) )
                     size = size - 0.1;
-                var colModelObj = new jetspeed.om.Column( i, layoutFragment.id, size, this.columns.length, layoutFragment.layoutActionsDisabled );
+                var colModelObj = new jsObj.om.Column( i, layoutFragment.id, size, this.columns.length, layoutFragment.layoutActionsDisabled );
                 this.columns.push( colModelObj );
                 if ( parentColumn != null )
                 {
@@ -1738,6 +1669,7 @@
     },
     _layoutCreatePortletsModel: function( layoutFragment, columnsInLayout, pageColumnStartIndex, portletsByPageColumn )
     {
+        var jsObj = jetspeed;
         if ( layoutFragment.otherFragmentIndexes != null && layoutFragment.otherFragmentIndexes.length > 0 )
         {
             var portletsByColumn = new Array();    // for dispersing portlets when column specification is not valid
@@ -1749,26 +1681,26 @@
             {
                 var pFrag = layoutFragment.fragments[ layoutFragment.otherFragmentIndexes[i] ];
     
-                if ( jetspeed.debugPortletEntityIdFilter )
+                if ( jsObj.debugPortletEntityIdFilter )
                 {
-                    if ( ! dojo.lang.inArray( jetspeed.debugPortletEntityIdFilter, pFrag.id ) )
+                    if ( ! dojo.lang.inArray( jsObj.debugPortletEntityIdFilter, pFrag.id ) )
                         pFrag = null;
                 }
                 
                 if ( pFrag != null )
                 {
                     var portletPageColumnKey = "z";
-                    var portletWindowExtendedProperty = pFrag.properties[ jetspeed.id.PORTLET_PROP_DESKTOP_EXTENDED ];
+                    var portletWindowExtendedProperty = pFrag.properties[ jsObj.id.PP_DESKTOP_EXTENDED ];
                     
-                    var portletWindowPositionStatic = jetspeed.prefs.windowTiling;
-                    var portletWindowHeightToFit = jetspeed.prefs.windowHeightExpand;
-                    if ( portletWindowExtendedProperty != null && jetspeed.prefs.windowTiling && jetspeed.prefs.printModeOnly == null )
+                    var portletWindowPositionStatic = jsObj.prefs.windowTiling;
+                    var portletWindowHeightToFit = jsObj.prefs.windowHeightExpand;
+                    if ( portletWindowExtendedProperty != null && jsObj.prefs.windowTiling && jsObj.prefs.printModeOnly == null )
                     {
-                        var extPropData = portletWindowExtendedProperty.split( jetspeed.id.PORTLET_PROP_DESKTOP_EXTENDED_PAIR_SEPARATOR );
+                        var extPropData = portletWindowExtendedProperty.split( jsObj.id.PP_PAIR_SEPARATOR );
                         var extProp = null, extPropLen = 0, extPropName = null, extPropValue = null, extPropFlag = false;
                         if ( extPropData != null && extPropData.length > 0 )
                         {
-                            var propSeparator = jetspeed.id.PORTLET_PROP_DESKTOP_EXTENDED_PROP_SEPARATOR;
+                            var propSeparator = jsObj.id.PP_PROP_SEPARATOR;
                             for ( var extPropIndex = 0 ; extPropIndex < extPropData.length ; extPropIndex++ )
                             {
                                 extProp = extPropData[extPropIndex];
@@ -1781,25 +1713,25 @@
                                         extPropName = extProp.substring( 0, eqPos );
                                         extPropValue = extProp.substring( eqPos +1 );
                                         extPropFlag = ( ( extPropValue == "true" ) ? true : false );
-                                        if ( extPropName == jetspeed.id.PORTLET_PROP_DESKTOP_EXTENDED_STATICPOS )
+                                        if ( extPropName == jsObj.id.PP_STATICPOS )
                                             portletWindowPositionStatic = extPropFlag;
-                                        else if ( extPropName == jetspeed.id.PORTLET_PROP_DESKTOP_EXTENDED_FITHEIGHT )
+                                        else if ( extPropName == jsObj.id.PP_FITHEIGHT )
                                             portletWindowHeightToFit = extPropFlag;
                                     }
                                 }
                             }
                         }
                     }
-                    else if ( ! jetspeed.prefs.windowTiling )
+                    else if ( ! jsObj.prefs.windowTiling )
                     {
                         portletWindowPositionStatic = false;
                     }
-                    pFrag.properties[ jetspeed.id.PORTLET_PROP_WINDOW_POSITION_STATIC ] = portletWindowPositionStatic;
-                    pFrag.properties[ jetspeed.id.PORTLET_PROP_WINDOW_HEIGHT_TO_FIT ] = portletWindowHeightToFit;
+                    pFrag.properties[ jsObj.id.PP_WINDOW_POSITION_STATIC ] = portletWindowPositionStatic;
+                    pFrag.properties[ jsObj.id.PP_WINDOW_HEIGHT_TO_FIT ] = portletWindowHeightToFit;
                     
-                    if ( portletWindowPositionStatic && jetspeed.prefs.windowTiling )
+                    if ( portletWindowPositionStatic && jsObj.prefs.windowTiling )
                     {
-                        var portletColumnIndex = pFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ];
+                        var portletColumnIndex = pFrag.properties[ jsObj.id.PP_COLUMN ];
                         if ( portletColumnIndex == null || portletColumnIndex == "" || portletColumnIndex < 0 )
                         {
                             var minPortlets = -1; 
@@ -1821,7 +1753,7 @@
                         var portletPageColumnIndex = pageColumnStartIndex + new Number( portletColumnIndex );
                         portletPageColumnKey = portletPageColumnIndex.toString();
                     }
-                    var portlet = new jetspeed.om.Portlet( pFrag.name, pFrag.id, null, pFrag.properties, pFrag.actions, pFrag.currentActionState, pFrag.currentActionMode, pFrag.decorator, pFrag.layoutActionsDisabled );
+                    var portlet = new jsObj.om.Portlet( pFrag.name, pFrag.id, null, pFrag.properties, pFrag.actions, pFrag.currentActionState, pFrag.currentActionMode, pFrag.decorator, pFrag.layoutActionsDisabled );
                     portlet.initialize();
 
                     this.putPortlet( portlet ) ;
@@ -1836,10 +1768,10 @@
         }
     },
 
-    _portletsInitializeWindowState: function( /* Array */ portletsByPageColumnZ )
+    _portletsInitWinState: function( /* Array */ portletsByPageColumnZ )
     {
         var initialColumnRowAllPortlets = {};
-        this.getPortletCurrentColumnRow( null, false, initialColumnRowAllPortlets );
+        this.getPortletCurColRow( null, false, initialColumnRowAllPortlets );
         for ( var portletIndex in this.portlets )
         {
             var portlet = this.portlets[portletIndex];
@@ -1857,9 +1789,9 @@
                 }
             }
             if ( portletInitialColRow != null )
-                portlet._initializeWindowState( portletInitialColRow, false );
+                portlet._initWinState( portletInitialColRow, false );
             else
-                dojo.raise( "page._portletsInitializeWindowState could not find window state init data for portlet: " + portlet.getId() );
+                dojo.raise( "Window state data not found for portlet: " + portlet.getId() );
         }
     },
 
@@ -1879,7 +1811,7 @@
         return ( aZIndex - bZIndex );
     },
 
-    _createColumnsStart: function( allColumnsParent )
+    _createColsStart: function( allColumnsParent )
     {
         if ( ! this.columnsStructure || this.columnsStructure.length == 0 ) return;
         var columnContainerNode = document.createElement( "div" );
@@ -1888,12 +1820,12 @@
         for ( var colIndex = 0 ; colIndex < this.columnsStructure.length ; colIndex++ )
         {
             var colObj = this.columnsStructure[colIndex];
-            this._createColumns( colObj, columnContainerNode ) ;
+            this._createCols( colObj, columnContainerNode ) ;
         }
         allColumnsParent.appendChild( columnContainerNode );
     },
 
-    _createColumns: function( column, columnContainerNode )
+    _createCols: function( column, columnContainerNode )
     {
         column.createColumn() ;
         if ( column.columnChildren != null && column.columnChildren.length > 0 )
@@ -1901,12 +1833,12 @@
             for ( var colIndex = 0 ; colIndex < column.columnChildren.length ; colIndex++ )
             {
                 var colObj = column.columnChildren[ colIndex ];
-                this._createColumns( colObj, column.domNode ) ;
+                this._createCols( colObj, column.domNode ) ;
             }
         }
         columnContainerNode.appendChild( column.domNode );
     },
-    _removeColumns: function( /* DOM Node */ preserveWindowNodesInNode )
+    _removeCols: function( /* DOM Node */ preserveWindowNodesInNode )
     {
         if ( ! this.columns || this.columns.length == 0 ) return;
         for ( var i = 0 ; i < this.columns.length ; i++ )
@@ -1915,7 +1847,7 @@
             {
                 if ( preserveWindowNodesInNode )
                 {
-                    var windowNodesInColumn = jetspeed.ui.getPortletWindowChildren( this.columns[i].domNode, null );
+                    var windowNodesInColumn = jetspeed.ui.getPWinChildren( this.columns[i].domNode, null );
                     dojo.lang.forEach( windowNodesInColumn,
                         function( windowNode ) { preserveWindowNodesInNode.appendChild( windowNode ); } );
                 }
@@ -1929,7 +1861,7 @@
         this.columns = [];
     },
 
-    getPortletCurrentColumnRow: function( /* DOM node */ justForPortletWindowNode, /* boolean */ includeGhosts, /* map */ currentColumnRowAllPortlets )
+    getPortletCurColRow: function( /* DOM node */ justForPortletWindowNode, /* boolean */ includeGhosts, /* map */ currentColumnRowAllPortlets )
     {
         if ( ! this.columns || this.columns.length == 0 ) return null;
         var result = null;
@@ -1953,7 +1885,7 @@
                 currentLayout = this.layouts[ currentLayoutId ];
                 if ( currentLayout == null )
                 {
-                    dojo.raise( "getPortletCurrentColumnRow cannot locate layout id: " + currentLayoutId ) ;
+                    dojo.raise( "Layout not found: " + currentLayoutId ) ;
                     return null;
                 }
                 currentLayoutRowCount = 0;
@@ -1966,10 +1898,10 @@
                 }
                 else
                 {
-                    var parentColObj = this.getColumnFromColumnNode( colObj.domNode.parentNode );
+                    var parentColObj = this.getColFromColNode( colObj.domNode.parentNode );
                     if ( parentColObj == null )
                     {
-                        dojo.raise( "getPortletCurrentColumnRow cannot locate parent column for column: " + colObj ) ;
+                        dojo.raise( "Parent column not found: " + colObj ) ;
                         return null;
                     }
                     colObj = parentColObj;
@@ -1977,11 +1909,13 @@
             }
 
             var colCurrentRow = null;
+            var jsObj = jetspeed;
+            var djObj = dojo;
             for ( var colChildIndex = 0 ; colChildIndex < colChildNodes.length ; colChildIndex++ )
             {
                 var colChild = colChildNodes[colChildIndex];
 
-                if ( dojo.html.hasClass( colChild, jetspeed.id.PORTLET_WINDOW_STYLE_CLASS ) || ( includeGhosts && dojo.html.hasClass( colChild, jetspeed.id.PORTLET_WINDOW_GHOST_STYLE_CLASS ) ) || ( includeLayouts && dojo.html.hasClass( colChild, "desktopColumn" ) ) )
+                if ( djObj.html.hasClass( colChild, jsObj.id.PWIN_CLASS ) || ( includeGhosts && djObj.html.hasClass( colChild, jsObj.id.PWIN_GHOST_CLASS ) ) || ( includeLayouts && djObj.html.hasClass( colChild, "desktopColumn" ) ) )
                 {
                     colCurrentRow = ( colCurrentRow == null ? 0 : colCurrentRow + 1 );
                     if ( (colCurrentRow + 1) > currentLayoutRowCount )
@@ -2001,17 +1935,17 @@
                         }
                         else if ( currentColumnRowAllPortlets != null )
                         {
-                            var portletWindowWidget = this.getPortletWindowFromNode( colChild );
+                            var portletWindowWidget = this.getPWinFromNode( colChild );
                             if ( portletWindowWidget == null )
                             {
-                                dojo.raise( "getPortletCurrentColumnRow cannot locate PortletWindow for node." ) ;
+                                djObj.raise( "PortletWindow not found for node" ) ;
                             }
                             else
                             {
                                 var portlet = portletWindowWidget.portlet;
                                 if ( portlet == null )
                                 {
-                                    dojo.raise( "getPortletCurrentColumnRow PortletWindow.portlet is for widgetId: " + portletWindowWidget.widgetId ) ;
+                                    djObj.raise( "PortletWindow for node has null portlet: " + portletWindowWidget.widgetId ) ;
                                 }
                                 else
                                 {
@@ -2029,12 +1963,13 @@
     },
     _getPortletArrayByZIndex: function()
     {
+        var jsObj = jetspeed;
         var portletArray = this.getPortletArray();
         if ( ! portletArray ) return portletArray;
         var filteredPortletArray = [];
         for ( var i = 0 ; i < portletArray.length; i++ )
         {
-            if ( ! portletArray[i].getProperty( jetspeed.id.PORTLET_PROP_WINDOW_POSITION_STATIC ) )
+            if ( ! portletArray[i].getProperty( jsObj.id.PP_WINDOW_POSITION_STATIC ) )
                 filteredPortletArray.push( portletArray[i] );
         }
         filteredPortletArray.sort( this._portletZIndexCompare );
@@ -2045,9 +1980,9 @@
         var aZIndex = null;
         var bZIndex = null;
         var windowState = null;
-        windowState = portletA.getLastSavedWindowState();
+        windowState = portletA.getSavedWinState();
         aZIndex = windowState.zIndex;
-        windowState = portletB.getLastSavedWindowState();
+        windowState = portletB.getSavedWinState();
         bZIndex = windowState.zIndex;
         if ( aZIndex && ! bZIndex )
             return -1;
@@ -2060,31 +1995,22 @@
 
     getPortletDecorationDefault: function()
     {
+        var jsObj = jetspeed;
         var pd = null;
-        if ( djConfig.isDebug && jetspeed.debug.windowDecorationRandom )
+        if ( djConfig.isDebug && jsObj.debug.windowDecorationRandom )
         {
-            pd = jetspeed.prefs.portletDecorationsAllowed[ Math.floor( Math.random() * jetspeed.prefs.portletDecorationsAllowed.length ) ];
+            pd = jsObj.prefs.portletDecorationsAllowed[ Math.floor( Math.random() * jsObj.prefs.portletDecorationsAllowed.length ) ];
         }
         else
         {
             var defaultpd = this.getPortletDecorator();
-            if ( dojo.lang.indexOf( jetspeed.prefs.portletDecorationsAllowed, defaultpd ) != -1 )
+            if ( dojo.lang.indexOf( jsObj.prefs.portletDecorationsAllowed, defaultpd ) != -1 )

[... 2723 lines stripped ...]


---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org