--- loncom/interface/lonmenu.pm	2003/04/17 14:51:31	1.61
+++ loncom/interface/lonmenu.pm	2003/06/04 22:05:22	1.74
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.61 2003/04/17 14:51:31 www Exp $
+# $Id: lonmenu.pm,v 1.74 2003/06/04 22:05:22 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -143,6 +143,9 @@ $navmaps
 <td bgcolor="$tabbg">
 <a href="/adm/remote?action=launch&url=$escurl" target="_top">
 <font color="$font">Launch Remote Control</font></a></td>
+<td bgcolor="$tabbg">
+<img align="right" src="/adm/lonIcons/minilogo.gif" />
+<b>LON-CAPA</b></td>
 </tr>
 </table>
 <script>
@@ -155,13 +158,24 @@ ENDINLINEMENU
     }
 }
 
+# ===== Early call to LONCAPAreg for long-running pages, preferably used right 
+# ===== before $r->rflush()
+
+sub regflush {
+    return '<script type="text/javascript">'.&loadevents.'</script>';
+}
+
 # ====================================== This gets called in the header section
 
 sub registerurl {
     my $forcereg=shift;
     my $target = shift;
     my $result = '';
-    
+    if ($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html') { return ''; }
+    my $force_title='';
+    if ($ENV{'request.state'} eq 'construct') {
+	$force_title=&Apache::lonxml::display_title();
+    }
     if ($target eq 'edit') {
         $result .="<script type=\"text/javascript\">\n".
             "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n".
@@ -173,13 +187,35 @@ sub registerurl {
         ((($ENV{'request.publicaccess'}) || 
          (!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) &&
         (!$forcereg))) {
-	return $result.
-         '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>';
+        my $loadfunction='';
+        my $inlineloadfunction='';
+        my $unloadfunction='';
+        unless (($ENV{'browser.interface'} eq 'textual') ||
+                ($ENV{'environment.remote'} eq 'off') ||
+                ($ENV{'request.publicaccess'})) {
+	    my $reopen=&Apache::lonmenu::reopenmenu();
+ 	    $loadfunction='swmenu='.$reopen.'swmenu.windowloaded(self.name);window.focus();';
+            $inlineloadfunction=&regflush();
+ 	    $unloadfunction='swmenu='.$reopen.'swmenu.windowunloaded(self.name);';
+        } 
+	return $result.(<<ENDFUNCTIONS);
+<script type="text/javascript">
+function LONCAPAreg() {
+   $loadfunction
+} 
+
+function LONCAPAstale() {
+   $unloadfunction
+}
+</script>
+$inlineloadfunction
+$force_title
+ENDFUNCTIONS
     }
 # Graphical display after login only
     if ($Apache::lonxml::registered && !$forcereg) { return ''; }
     $result.=&innerregister($forcereg,$target);
-    return $result;
+    return $result.$force_title;
 }
 
 # =========== This gets called in order to register a URL, both with the Remote
@@ -189,6 +225,7 @@ sub innerregister {
     my $forcereg=shift;
     my $target = shift;
     my $result = '';
+    if ($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html') { return ''; }
 
     $Apache::lonxml::registered=1;
 
@@ -203,9 +240,12 @@ sub innerregister {
     my $reopen=&Apache::lonmenu::reopenmenu();
 
     my $newmail='';
+    if ($noremote) {
+	$newmail='<table bgcolor="'.$pgbg.'" border="0" cellspacing="3" cellpadding="3" width="100%"><tr><td bgcolor="'.$tabbg.'">';
+    }
     if (($textual) && ($ENV{'request.symb'}) && ($ENV{'request.course.id'})) {
 	my ($mapurl,$rid,$resurl)=split(/\_\_\_/,$ENV{'request.symb'});
-        $newmail=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};
+        $newmail.=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};
         my $maptitle=&Apache::lonnet::gettitle($mapurl);
 	my $restitle=&Apache::lonnet::gettitle($resurl);
         if ($maptitle) {
@@ -221,6 +261,9 @@ sub innerregister {
  '<b><a href="/adm/communicate">You have new messages</a></b><br />':
                           'swmenu.setstatus("you have","messages");');
     }
+    if ($noremote) {
+	$newmail.='</td></tr></table>';
+    }
     my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');');
     my $tablestart=($noremote?'<table bgcolor="'.$pgbg.'" border="0" cellspacing="3" cellpadding="3" width="100%">':'');
     my $tableend=($noremote?'</table>':'');
@@ -344,7 +387,7 @@ $inlinebuttons
 $tableend
 $form
 <script>
-//END LON-CAPA Internal
+// END LON-CAPA Internal
 </script>
 
 ENDREGTEXT
@@ -358,6 +401,7 @@ var swmenu=null;
 
     function LONCAPAreg() {
 	  swmenu=$reopen;
+          swmenu.windowloaded(self.name);
           swmenu.clearTimeout(swmenu.menucltim);
           $timesync
           $newmail
@@ -385,7 +429,7 @@ var swmenu=null;
  'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
  'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3);clearbut(6,1)',
 			  2000);
-
+          swmenu.windowunloaded(self.name);
       }
 
 // END LON-CAPA Internal
@@ -409,6 +453,7 @@ var swmenu=null;
 
     function LONCAPAreg() {
 	  swmenu=$reopen
+	  swmenu.windowloaded(self.name);
           $timesync
           swmenu.currentStale=1;
           swmenu.clearbut(2,1);
@@ -425,6 +470,8 @@ var swmenu=null;
     }
 
     function LONCAPAstale() {
+ 	  swmenu=$reopen
+	  swmenu.windowunloaded(self.name);  
     }
 
 // END LON-CAPA Internal
@@ -437,10 +484,12 @@ ENDDONOTREGTHIS
 }
 
 sub loadevents() {
+    if ($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html') { return ''; }
     return 'LONCAPAreg();';
 }
 
 sub unloadevents() {
+    if ($ENV{'REQUEST_URI'} eq '/res/adm/pages/menu.html') { return ''; }
     return 'LONCAPAstale();';
 }
 
@@ -553,6 +602,7 @@ ENDRESIZE
 window.status='Opening LON-CAPA Remote Control';
 var menu=window.open("/res/adm/pages/menu.html","$menuname",
 "height=350,width=150,scrollbars=no,menubar=no,top=5,left=5,screenX=5,screenY=5");
+self.name='loncapaclient';
 ENDOPEN
     return '<script>'.$returnval.'</script>';
 }
@@ -590,7 +640,7 @@ sub switch {
        my $text=$top.' '.$bot;
        $text=~s/\- //;
        $inlineremote[10*$row+$col]="\n".($nobreak?' ':'<br />').
-        '<a href="javascript:'.$act.';" target="_top">'.$text.'</a> '.
+        '<a href="javascript:'.$act.';">'.$text.'</a> '.
         ($nobreak?'':$desc);
    } else {
 # Inline Remote
@@ -600,7 +650,7 @@ sub switch {
        $inlineremote[10*$row+$col]="\n".
          ($nobreak==3?'<td width="50%" colspan="2" align="right"':'<tr><td').
          ' bgcolor="'.$tabbg.'"'.($nobreak==1?' width="50%" colspan="2"':'').
-     '"><a href="javascript:'.$act.';" target="_top"><font color="'.$font.'"'.
+     '"><a href="javascript:'.$act.';"><font color="'.$font.'"'.
           ($nobreak?' size="+1"':'').
      '>'.$text.'</font></a></td>'.
      ($nobreak?'':'<td colspan="3" width="80%"><font color="'.$font.'" size="-1">'.$desc.'</font>').($nobreak!=1?'</tr>':'');
@@ -802,7 +852,7 @@ ENDUTILITY
 sub serverform {
     return(<<ENDSERVERFORM);
 
-<form name="server" action="/adm/logout" method="post">
+<form name="server" action="/adm/logout" method="post" target="_top">
 <input type="hidden" name="postdata" value="none" />
 <input type="hidden" name="command" value="none" />
 <input type="hidden" name="url" value="none" />