--- loncom/interface/loncommon.pm	2009/05/08 13:38:41	1.807
+++ loncom/interface/loncommon.pm	2009/08/14 23:54:34	1.884
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.807 2009/05/08 13:38:41 droeschl Exp $
+# $Id: loncommon.pm,v 1.884 2009/08/14 23:54:34 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -407,6 +407,7 @@ sub studentbrowser_javascript {
           ) { return ''; }  
    return (<<'ENDSTDBRW');
 <script type="text/javascript" language="Javascript">
+// <![CDATA[
     var stdeditbrowser;
     function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) {
         var url = '/adm/pickstudent?';
@@ -429,6 +430,7 @@ sub studentbrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();
     }
+// ]]>
 </script>
 ENDSTDBRW
 }
@@ -461,6 +463,7 @@ sub selectstudent_link {
 sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";
 <script type="text/javascript" language="JavaScript">
+// <![CDATA[
 var stdeditbrowser;
 
 function openauthorbrowser(formname,udom) {
@@ -473,32 +476,24 @@ function openauthorbrowser(formname,udom
     stdeditbrowser.focus();
 }
 
+// ]]>
 </script>
 ENDAUTHORBRW
 }
 
 sub coursebrowser_javascript {
     my ($domainfilter,$sec_element,$formname)=@_;
-    my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role');
-   my $output = '
+    my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Community - for which you wish to add/modify a user role');
+    my $id_functions = &javascript_index_functions();
+    my $output = '
 <script type="text/javascript" language="JavaScript">
+// <![CDATA[
     var stdeditbrowser;'."\n";
-   $output .= <<"ENDSTDBRW";
+
+    $output .= <<"ENDSTDBRW";
     function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
         var url = '/adm/pickcourse?';
-        var domainfilter = '';
-        var formid = getFormIdByName(formname);
-        if (formid > -1) {
-            var domid = getIndexByName(formid,udom);
-            if (domid > -1) {
-                if (document.forms[formid].elements[domid].type == 'select-one') {
-                    domainfilter=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;
-                }
-                if (document.forms[formid].elements[domid].type == 'hidden') {
-                    domainfilter=document.forms[formid].elements[domid].value;
-                }
-            }
-        }
+        var domainfilter = getDomainFromSelectbox(formname,udom);
         if (domainfilter != null) {
            if (domainfilter != '') {
                url += 'domainfilter='+domainfilter+'&';
@@ -524,10 +519,15 @@ sub coursebrowser_javascript {
                 }
             }     
         }
+        if (formname == 'ccrs') {
+            var ownername = document.forms[formid].ccuname.value;
+            var ownerdom =  document.forms[formid].ccdomain.options[document.forms[formid].ccdomain.selectedIndex].value;
+            url += '&cloner='+ownername+':'+ownerdom;
+        }
         if (multflag !=null && multflag != '') {
             url += '&multiple='+multflag;
         }
-        if (crstype == 'Course/Group') {
+        if (crstype == 'Course/Community') {
             if (formname == 'cu') {
                 crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
                 if (crstype == "") {
@@ -545,31 +545,111 @@ sub coursebrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();
     }
+$id_functions
+ENDSTDBRW
+    if ($sec_element ne '') {
+        $output .= &setsec_javascript($sec_element,$formname);
+    }
+    $output .= '
+// ]]>
+</script>';
+    return $output;
+}
 
-    function getFormIdByName(formname) {
-        for (var i=0;i<document.forms.length;i++) {
-            if (document.forms[i].name == formname) {
-                return i;
-            }
+sub javascript_index_functions {
+    return <<"ENDJS";
+
+function getFormIdByName(formname) {
+    for (var i=0;i<document.forms.length;i++) {
+        if (document.forms[i].name == formname) {
+            return i;
         }
-        return -1; 
     }
+    return -1;
+}
 
-    function getIndexByName(formid,item) {
-        for (var i=0;i<document.forms[formid].elements.length;i++) {
-            if (document.forms[formid].elements[i].name == item) {
-                return i;
+function getIndexByName(formid,item) {
+    for (var i=0;i<document.forms[formid].elements.length;i++) {
+        if (document.forms[formid].elements[i].name == item) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+function getDomainFromSelectbox(formname,udom) {
+    var userdom;
+    var formid = getFormIdByName(formname);
+    if (formid > -1) {
+        var domid = getIndexByName(formid,udom);
+        if (domid > -1) {
+            if (document.forms[formid].elements[domid].type == 'select-one') {
+                userdom=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;
+            }
+            if (document.forms[formid].elements[domid].type == 'hidden') {
+                userdom=document.forms[formid].elements[domid].value;
             }
         }
-        return -1;
     }
-ENDSTDBRW
-    if ($sec_element ne '') {
-        $output .= &setsec_javascript($sec_element,$formname);
+    return userdom;
+}
+
+ENDJS
+
+}
+
+sub userbrowser_javascript {
+    my $id_functions = &javascript_index_functions();
+    return <<"ENDUSERBRW";
+
+function openuserbrowser(formname,uname,udom,ulast,ufirst,uemail,hideudom,crsdom) {
+    var url = '/adm/pickuser?';
+    var userdom = getDomainFromSelectbox(formname,udom);
+    if (userdom != null) {
+       if (userdom != '') {
+           url += 'srchdom='+userdom+'&';
+       }
     }
-    $output .= '
-</script>';
-    return $output;
+    url += 'form=' + formname + '&unameelement='+uname+
+                                '&udomelement='+udom+
+                                '&ulastelement='+ulast+
+                                '&ufirstelement='+ufirst+
+                                '&uemailelement='+uemail+
+                                '&hideudomelement='+hideudom+
+                                '&coursedom='+crsdom;
+    var title = 'User_Browser';
+    var options = 'scrollbars=1,resizable=1,menubar=0';
+    options += ',width=700,height=600';
+    var stdeditbrowser = open(url,title,options,'1');
+    stdeditbrowser.focus();
+}
+
+function fix_domain (formname,udom,origdom) {
+    var formid = getFormIdByName(formname);
+    if (formid > -1) {
+        var domid = getIndexByName(formid,udom);
+        var hidedomid = getIndexByName(formid,origdom);
+        if (hidedomid > -1) {
+            var fixeddom = document.forms[formid].elements[hidedomid].value;
+            if (domid > -1) {
+                var slct = document.forms[formid].elements[domid];
+                if (slct.type == 'select-one') {
+                    var i;
+                    for (i=0;i<slct.length;i++) {
+                        if (slct.options[i].value==fixeddom) { slct.selectedIndex=i; }
+                    }
+                }
+                if (slct.type == 'hidden') {
+                    slct.value = fixeddom;
+                }
+            }
+        }
+    }
+    return;
+}
+
+$id_functions
+ENDUSERBRW
 }
 
 sub setsec_javascript {
@@ -614,12 +694,16 @@ function setSect(sectionlist) {
 
 sub selectcourse_link {
    my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
+   my $linktext = &mt('Select Course');
+   if ($selecttype eq 'Community') {
+       $linktext = &mt('Select Community'); 
+   }
    return '<span class="LC_nobreak">'
          ."<a href='"
          .'javascript:opencrsbrowser("'.$form.'","'.$unameele
          .'","'.$udomele.'","'.$desc.'","'.$extra_element
          .'","'.$multflag.'","'.$selecttype.'");'
-         ."'>".&mt('Select Course').'</a>'
+         ."'>".$linktext.'</a>'
          .'</span>';
 }
 
@@ -629,6 +713,14 @@ sub selectauthor_link {
           &mt('Select Author').'</a>';
 }
 
+sub selectuser_link {
+    my ($form,$unameelem,$domelem,$lastelem,$firstelem,$emailelem,$hdomelem,
+        $coursedom,$linktext) = @_;
+    return '<a href="javascript:openuserbrowser('."'$form','$unameelem','$domelem',".
+           "'$lastelem','$firstelem','$emailelem','$hdomelem','$coursedom'".
+           ');">'.$linktext.'</a>';
+}
+
 sub check_uncheck_jscript {
     my $jscript = <<"ENDSCRT";
 function checkAll(field) {
@@ -829,6 +921,7 @@ sub linked_select_forms {
     # output the javascript to do the changing
     my $result = '';
     $result.='<script type="text/javascript" language="JavaScript">'."\n";
+    $result.="// <![CDATA[\n";
     $result.="var select2data = new Object();\n";
     $" = '","';
     my $debug = '';
@@ -874,6 +967,7 @@ function select1_changed() {
         }
     }
 }
+// ]]>
 </script>
 END
     # output the initial values for the selection lists
@@ -1027,7 +1121,9 @@ sub update_help_link {
     my $banner_link = "/adm/helpmenu?page=banner&amp;topic=$topic&amp;component_help=$component_help&amp;faq=$faq&amp;bug=$bug&amp;origurl=$origurl&amp;stamp=$timestamp&amp;stayonpage=$stayOnPage";
     my $output .= <<"ENDOUTPUT";
 <script type="text/javascript">
+// <![CDATA[
 banner_link = '$banner_link';
+// ]]>
 </script>
 ENDOUTPUT
     return $output;
@@ -1101,8 +1197,8 @@ sub help_menu_js {
 
     my $template .= <<"ENDTEMPLATE";
 <script type="text/javascript">
-// <!-- BEGIN LON-CAPA Internal
 // <![CDATA[
+// <!-- BEGIN LON-CAPA Internal
 var banner_link = '';
 function helpMenu(target) {
     var caller = this;
@@ -1127,8 +1223,8 @@ function writeHelp(caller) {
     caller.document.close()
     caller.focus()
 }
-// ]]>
 // END LON-CAPA Internal -->
+// ]]>
 </script>
 ENDTEMPLATE
     return $template;
@@ -1394,6 +1490,7 @@ sub resize_textarea_js {
     my $geometry = &viewport_geometry_js();
     return <<"RESIZE";
     <script type="text/javascript">
+// <![CDATA[
 $geometry
 
 function getX(element) {
@@ -1432,6 +1529,7 @@ function resize_textarea(textarea_id,bot
     }
     textarea.style.height=new_height+'px';
 }
+// ]]>
 </script>
 RESIZE
 
@@ -1775,7 +1873,7 @@ sub select_level_form {
 
 =pod
 
-=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit)
+=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)
 
 Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.  
@@ -1786,16 +1884,15 @@ selected");
 
 If the $showdomdesc flag is set, the domain name is followed by the domain description.
 
-If the $autosubmit flag is set, the form containing the domain selector will be auto-submitted by an onchange action.  
+The optional $onchange argumnet specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.  
 
 =cut
 
 #-------------------------------------------
 sub select_dom_form {
-    my ($defdom,$name,$includeempty,$showdomdesc,$autosubmit) = @_;
-    my $onchange;
-    if ($autosubmit) {
-        $onchange = ' onchange="this.form.submit()"';
+    my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;
+    if ($onchange) {
+        $onchange = ' onchange="'.$onchange.'"';
     }
     my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     if ($includeempty) { @domains=('',@domains); }
@@ -2299,7 +2396,7 @@ sub authform_internal{
     $result = &mt
         ('[_1] Internally authenticated (with initial password [_2])',
          '<label>'.$authtype,'</label>'.$autharg);
-    $result.="<label><input type=\"checkbox\" name=\"visible\" onClick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';
+    $result.="<label><input type=\"checkbox\" name=\"visible\" onclick='if (this.checked) { this.form.intarg.type=\"text\" } else { this.form.intarg.type=\"password\" }' />".&mt('Visible input').'</label>';
     return $result;
 }
 
@@ -3754,7 +3851,7 @@ sub blockcheck {
                  ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E}));
         next if ($no_userblock);
 
-        # Retrieve blocking times and identity of blocker for course
+        # Retrieve blocking times and identity of locker for course
         # of specified user, unless user has 'evb' privilege.
         
         my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum);
@@ -3819,103 +3916,48 @@ sub parse_block_record {
     return ($setuname,$setudom,$title,$blocks);
 }
 
-sub build_block_table {
-    my ($startblock,$endblock,$setters) = @_;
-    my %lt = &Apache::lonlocal::texthash(
-        'cacb' => 'Currently active communication blocks',
-        'cour' => 'Course',
-        'dura' => 'Duration',
-        'blse' => 'Block set by'
-    );
-    my $output;
-    $output = '<br />'.$lt{'cacb'}.':<br />';
-    $output .= &start_data_table();
-    $output .= '
-<tr>
- <th>'.$lt{'cour'}.'</th>
- <th>'.$lt{'dura'}.'</th>
- <th>'.$lt{'blse'}.'</th>
-</tr>
-';
-    foreach my $course (keys(%{$setters})) {
-        my %courseinfo=&Apache::lonnet::coursedescription($course);
-        for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {
-            my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};
-            my $fullname = &plainname($uname,$udom);
-            if (defined($env{'user.name'}) && defined($env{'user.domain'})
-                && $env{'user.name'} ne 'public' 
-                && $env{'user.domain'} ne 'public') {
-                $fullname = &aboutmewrapper($fullname,$uname,$udom);
-            }
-            my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};
-            $openblock = &Apache::lonlocal::locallocaltime($openblock);
-            $closeblock= &Apache::lonlocal::locallocaltime($closeblock);
-            $output .= &Apache::loncommon::start_data_table_row().
-                       '<td>'.$courseinfo{'description'}.'</td>'.
-                       '<td>'.$openblock.' to '.$closeblock.'</td>'.
-                       '<td>'.$fullname.'</td>'.
-                        &Apache::loncommon::end_data_table_row();
-        }
-    }
-    $output .= &end_data_table();
-}
-
 sub blocking_status {
-    my ($activity,$uname,$udom) = @_;
-    my %setters;
-    my ($blocked,$output,$ownitem,$is_course);
-    my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
-    if ($startblock && $endblock) {
-        $blocked = 1;
-        if (wantarray) {
-            my $category;
-            if ($activity eq 'boards') {
-                $category = 'Discussion posts in this course';
-            } elsif ($activity eq 'blogs') {
-                $category = 'Blogs';
-            } elsif ($activity eq 'port') {
-                if (defined($uname) && defined($udom)) {
-                    if ($uname eq $env{'user.name'} &&
-                        $udom eq $env{'user.domain'}) {
-                        $ownitem = 1;
-                    }
-                }
-                $is_course = &Apache::lonnet::is_course($udom,$uname);
-                if ($ownitem) { 
-                    $category = 'Your portfolio files';  
-                } elsif ($is_course) {
-                    my $coursedesc;
-                    foreach my $course (keys(%setters)) {
-                        my %courseinfo =
-                             &Apache::lonnet::coursedescription($course);
-                        $coursedesc = $courseinfo{'description'};
-                    }
-                    $category = "Group portfolio in the course '$coursedesc'";
-                } else {
-                    $category = 'Portfolio files belonging to ';
-                    if ($env{'user.name'} eq 'public' && 
-                        $env{'user.domain'} eq 'public') {
-                        $category .= &plainname($uname,$udom);
-                    } else {
-                        $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);  
-                    }
-                }
-            } elsif ($activity eq 'groups') {
-                $category = 'Groups in this course';
-            }
-            my $showstart = &Apache::lonlocal::locallocaltime($startblock);
-            my $showend = &Apache::lonlocal::locallocaltime($endblock);
-            $output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />';
-            if (!($activity eq 'port' && !($ownitem) && !($is_course))) { 
-                $output .= &build_block_table($startblock,$endblock,\%setters);
-            }
-        }
-    }
-    if (wantarray) {
-        return ($blocked,$output);
-    } else {
-        return $blocked;
+  my $blocked;
+  my ($activity,$uname,$udom) = @_;
+  my %setters;
+  my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
+  if ($startblock && $endblock) {
+    $blocked = 1;
+  }
+  if(!wantarray) {
+    return $blocked;
+  }
+  my $output;
+  my $querystring;
+  $querystring = "?activity=$activity";
+
+      $output .= <<"END_MYBLOCK";
+<script type="text/javascript">
+// <![CDATA[
+    function openWindow(url, wdwName, w, h, toolbar,scrollbar) {
+        var options = "width=" + w + ",height=" + h + ",";
+        options += "resizable=yes,scrollbars="+scrollbar+",status=no,";
+        options += "menubar=no,toolbar="+toolbar+",location=no,directories=no";
+        var newWin = window.open(url, wdwName, options);
+        newWin.focus();
     }
+
+// ]]>
+</script>
+END_MYBLOCK
+  my $popupUrl = "/adm/blockingstatus/$querystring";
+  $output .= <<"END_BLOCK";
+<div class='LC_comblock'>
+  <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring'
+  title='Communication Blocked'>
+  <img class='LC_noBorder LC_middle' title='Communication Blocked' src='/res/adm/pages/comblock.png' alt='Communication Blocked'/></a>
+  <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring' 
+  title='Communication Blocked'>Communication Blocked</a>
+</div>
+
+END_BLOCK
+
+  return ($blocked, $output);
 }
 
 ###############################################
@@ -4144,41 +4186,120 @@ Returns: value of designparamter $which
 ##############################################
 sub designparm {
     my ($which,$domain)=@_;
-    if ($env{'browser.blackwhite'} eq 'on') {
-	if ($which=~/\.(font|alink|vlink|link|textcol)$/) {
-	    return '#000000';
-	}
-	if ($which=~/\.(pgbg|sidebg|bgcol)$/) {
-	    return '#FFFFFF';
-	}
-	if ($which=~/\.tabbg$/) {
-	    return '#CCCCCC';
-	}
-    }
     if (exists($env{'environment.color.'.$which})) {
-	return $env{'environment.color.'.$which};
+        return $env{'environment.color.'.$which};
     }
     $domain=&determinedomain($domain);
     my %domdesign = &get_domainconf($domain);
     my $output;
     if ($domdesign{$domain.'.'.$which} ne '') {
-	$output = $domdesign{$domain.'.'.$which};
+        $output = $domdesign{$domain.'.'.$which};
     } else {
         $output = $defaultdesign{$which};
     }
     if (($which =~ /^(student|coordinator|author|admin)\.img$/) ||
         ($which =~ /login\.(img|logo|domlogo|login)/)) {
         if ($output =~ m{^/(adm|res)/}) {
-	    if ($output =~ m{^/res/}) {
-		my $local_name = &Apache::lonnet::filelocation('',$output);
-		&Apache::lonnet::repcopy($local_name);
-	    }
+            if ($output =~ m{^/res/}) {
+                my $local_name = &Apache::lonnet::filelocation('',$output);
+                &Apache::lonnet::repcopy($local_name);
+            }
             $output = &lonhttpdurl($output);
         }
     }
     return $output;
 }
 
+##############################################
+=pod
+
+=item * &authorspace()
+
+Inputs: ./.
+
+Returns: Path to the Construction Space of the current user's
+         accessed author space
+         The author space will be that of the current user
+         when accessing the own author space
+         and that of the co-author/assistent co-author
+         when accessing the co-author's/assistent co-author's
+         space
+
+=cut
+
+sub authorspace {
+    my $caname = '';
+    if ($env{'request.role'} =~ /^ca|^aa/) {
+        (undef,$caname) =
+            ($env{'request.role'}=~/($match_domain)\/($match_username)$/);
+    } else {
+        $caname = $env{'user.name'};
+    }
+    return '/priv/'.$caname.'/';
+}
+
+##############################################
+=pod
+
+=item * &head_subbox()
+
+Inputs: $content (contains HTML code with page functions, etc.)
+
+Returns: HTML div with $content
+         To be included in page header
+
+=cut
+
+sub head_subbox {
+    my ($content)=@_;
+    my $output =
+        '<div id="LC_head_subbox">'
+       .$content
+       .'</div>'
+}
+
+##############################################
+=pod
+
+=item * &CSTR_pageheader()
+
+Inputs: ./.
+
+Returns: HTML div with CSTR path and recent box
+         To be included on Construction Space pages
+
+=cut
+
+sub CSTR_pageheader {
+    # this is for resources; directories have customtitle, and crumbs
+            # and select recent are created in lonpubdir.pm  
+    my ($uname,$thisdisfn)=
+        ($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);
+    my $formaction='/priv/'.$uname.'/'.$thisdisfn;
+    $formaction=~s/\/+/\//g;
+
+    my $parentpath = '';
+    my $lastitem = '';
+    if ($thisdisfn =~ m-(.+/)([^/]*)$-) {
+        $parentpath = $1;
+        $lastitem = $2;
+    } else {
+        $lastitem = $thisdisfn;
+    }
+    return
+         '<div>'
+        .&Apache::loncommon::help_open_menu('','',3,'Authoring') #FIXME: Broken? Where is it?
+        .'<b>'.&mt('Construction Space:').'</b> '
+        .'<form name="dirs" method="post" action="'.$formaction
+        .'" target="_top"><tt><b>' #FIXME lonpubdir: target="_parent"
+        .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."$lastitem</b></tt><br />"
+        #FIXME lonpubdir: &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."</b></tt><br />"
+        .&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
+        .'</form>'
+        .&Apache::lonmenu::constspaceform()
+        .'</div>';
+}
+
 ###############################################
 ###############################################
 
@@ -4211,17 +4332,11 @@ Inputs:
 =item * $forcereg, if page should register as content page (relevant for 
             text interface only)
 
-=item * $customtitle, alternate text to use instead of $title
-                      in the title box that appears, this text
-                      is not auto translated like the $title is
-
-=item * $notopbar, if true, keep the 'what is this' info but remove the
-                   navigational links
+=item * $no_nav_bar, if true, keep the 'what is this' info but remove the
+                     navigational links
 
 =item * $bgcolor, used to override the bgcolor on a webpage to a specific value
 
-=item * $notitle, if true keep the nav controls, but remove the title bar
-
 =item * $no_inline_link, if true and in remote mode, don't show the 
          'Switch To Inline Menu' link
 
@@ -4241,8 +4356,8 @@ other decorations will be returned.
 =cut
 
 sub bodytag {
-    my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,$customtitle,
-	$notopbar,$bgcolor,$notitle,$no_inline_link,$args)=@_;
+    my ($title,$function,$addentries,$bodyonly,$domain,$forcereg,
+        $no_nav_bar,$bgcolor,$no_inline_link,$args)=@_;
 
     if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }
 
@@ -4296,25 +4411,7 @@ sub bodytag {
 	$name = &aboutmewrapper($name,$env{'user.name'},$env{'user.domain'});
     }
     
-    my $roleinfo=(<<ENDROLE);
-<td class="LC_title_bar_who">
-<div class="LC_title_bar_name">
-    $name
-    &nbsp;
-</div>
-<div class="LC_title_bar_role">
-$role&nbsp;
-</div>
-<div class="LC_title_bar_realm">
-$realm&nbsp;
-</div>
-</td>
-ENDROLE
-
     my $titleinfo = '<h1>'.$title.'</h1>';
-    if ($customtitle) {
-        $titleinfo = $customtitle;
-    }
     #
     # Extra info if you are the DC
     my $dc_info = '';
@@ -4327,57 +4424,33 @@ ENDROLE
         $dc_info = '('.$dc_info.')';
     }
 
-    if (($env{'environment.remote'} eq 'off') || ($args->{'suppress_header_logos'})) {
+    $role = "($role)" if $role;
+    &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
+
+    if ($env{'environment.remote'} eq 'off') {
         # No Remote
 	if ($env{'request.state'} eq 'construct') {
 	    $forcereg=1;
 	}
 
-	if (!$customtitle && $env{'request.state'} eq 'construct') {
-	    # this is for resources; directories have customtitle, and crumbs
-            # and select recent are created in lonpubdir.pm  
-	    my ($uname,$thisdisfn)=
-		($env{'request.filename'} =~ m|^/home/([^/]+)/public_html/(.*)|);
-	    my $formaction='/priv/'.$uname.'/'.$thisdisfn;
-	    $formaction=~s/\/+/\//g;
-
-	    my $parentpath = '';
-	    my $lastitem = '';
-	    if ($thisdisfn =~ m-(.+/)([^/]*)$-) {
-		$parentpath = $1;
-		$lastitem = $2;
-	    } else {
-		$lastitem = $thisdisfn;
-	    }
-	    $titleinfo = 
-		&Apache::loncommon::help_open_menu('','',3,'Authoring')
-		.'<b>'.&mt('Construction Space').'</b>:&nbsp;'
-		.'<form name="dirs" method="post" action="'.$formaction
-		.'" target="_top"><tt><b>'
-		.&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv','','+1',1)."<span class=\"LC_fontsize_big\">$lastitem</span></b></tt><br />"
-		.&Apache::lonhtmlcommon::select_recent('construct','recent','this.form.action=this.form.recent.value;this.form.submit()')
-		.'</form>'
-		.&Apache::lonmenu::constspaceform();
-        }
-
-        my $titletable;
-	if (!$notitle) {
-	    $titletable =
-		'<table id="LC_title_bar">'.
-                         "<tr><td> $titleinfo $dc_info</td>".$roleinfo.
-			 '</tr></table>';
-	}
-	if ($notopbar) {
+#    if ($env{'request.state'} eq 'construct') {
+#        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
+#    }
+
+        my $titletable = '<table id="LC_title_bar">'
+                        ."<tr><td> $titleinfo $dc_info</td>"
+                        .'</tr></table>';
+
+	if ($no_nav_bar) {
 	    $bodytag .= $titletable;
 	} else {
-        $bodytag .= qq|<div id="head_userinfo">$name ($role) <br/>
-        <em>$realm</em></div>|;
+        $bodytag .= qq|<div id="LC_nav_bar">$name $role<br />
+            <em>$realm</em> $dc_info</div>| unless $env{'form.inhibitmenu'};
+
 	    if ($env{'request.state'} eq 'construct') {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg,
-							  $titletable);
+                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$titletable);
             } else {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg).
-		    $titletable;
+                $bodytag .= &Apache::lonmenu::menubuttons($forcereg).$titletable;
             }
         }
         return $bodytag;
@@ -4395,11 +4468,13 @@ ENDROLE
 
     # Explicit link to get inline menu
     my $menu= ($no_inline_link?''
-	       :'<br /><a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a>');
+	       :'<a href="/adm/remote?action=collapse" target="_top">'.&mt('Switch to Inline Menu Mode').'</a>');
+    $bodytag .= qq|<div id="LC_nav_bar">$name $role
+            <em>$realm</em> $dc_info </div>
+            <ol class="LC_smallMenu LC_right">
+                <li>$menu</li>
+            </ol>| unless $env{'form.inhibitmenu'};
     #
-    if ($notitle) {
-	return $bodytag;
-    }
     return(<<ENDBODY);
 $bodytag
 <table id="LC_title_bar" class="LC_with_remote">
@@ -4407,7 +4482,6 @@ $bodytag
     <td>$messages&nbsp;</td>
 </tr>
 <tr><td>$titleinfo $dc_info $menu</td>
-$roleinfo
 </tr>
 </table>
 ENDBODY
@@ -4452,15 +4526,6 @@ sub make_attr_string {
 	$attr_ref->{'style'}=$style.'; font-size: x-large;';
     }
 
-    if ($env{'browser.blackwhite'} eq 'on') {
-	delete($attr_ref->{'font'});
-	delete($attr_ref->{'link'});
-	delete($attr_ref->{'alink'});
-	delete($attr_ref->{'vlink'});
-	delete($attr_ref->{'bgcolor'});
-	delete($attr_ref->{'background'});
-    }
-
     my $attr_string;
     foreach my $attr (keys(%$attr_ref)) {
 	$attr_string .= " $attr=\"".$attr_ref->{$attr}.'" ';
@@ -4538,9 +4603,9 @@ sub standard_css {
 
     my $sans                 = 'Verdana,Arial,Helvetica,sans-serif';
     my $mono                 = 'monospace';
-    my $data_table_head      = $tabbg;
-    my $data_table_light     = '#EEEEEE';
-    my $data_table_dark      = '#DDDDDD';
+    my $data_table_head      = $sidebg;
+    my $data_table_light     = '#FAFAFA';
+    my $data_table_dark      = '#F0F0F0';
     my $data_table_darker    = '#CCCCCC';
     my $data_table_highlight = '#FFFF00';
     my $mail_new             = '#FFBB77';
@@ -4577,18 +4642,12 @@ a:focus {
   background: yellow 
 }
 
-table.thinborder,
-table.thinborder tr th {
-  border-style: solid;
-  border-width: 1px;
-  border-color: $lg_border_color;
-  background: $tabbg;
-}
-
-table.thinborder tr td {
-  border-style: solid;
-  border-width: 1px;
-  border-color: $lg_border_color;
+hr {
+  clear: both;
+  color: $tabbg;
+  background-color: $tabbg;
+  height: 3px;
+  border: none;
 }
 
 form, .inline { 
@@ -4648,20 +4707,11 @@ div.LC_confirm_box .LC_success img {
   vertical-align: middle;
 }
 
-.LC_unknown {
-  color: yellow;
-}
-
 .LC_icon {
   border: none;
   vertical-align: middle;
 }
 
-.LC_indexer_icon {
-  border: none;
-  height: 22px;
-}
-
 .LC_docs_spacer {
   width: 25px;
   height: 1px;
@@ -4680,7 +4730,6 @@ div.LC_confirm_box .LC_success img {
 
 .LC_disc_action_links_bar {
    background: $tabbg;
-   font-family: $sans;
    border: none;
    margin: 4px;
 }
@@ -4725,7 +4774,8 @@ table#LC_title_bar a {
 }
 
 table#LC_title_bar {
-  /*display: none;*/
+  clear: both;
+  display: none;
 }
 
 table#LC_title_bar,
@@ -4737,48 +4787,15 @@ table#LC_title_bar.LC_with_remote {
   border-width: $border;
   background: $pgbg;
   color: $fontmenu;
-  font-family: $sans;
-  border-collapse: collapse;
-  padding: 0;
-}
-
-table.LC_docs_path {
-  width: 100%;
-  border: 0;
-  background: $pgbg;
-  font-family: $sans;
   border-collapse: collapse;
   padding: 0;
+  margin: 0;
 }
 
 table#LC_title_bar td {
   background: $tabbg;
 }
 
-table#LC_title_bar .LC_title_bar_who {
-  background: $tabbg;
-  color: $fontmenu;
-  font: small $sans;
-  text-align: right;
-  margin: 0;
-}
-
-table#LC_title_bar .LC_title_bar_name {
-  margin: 0;
-}
-
-table#LC_title_bar .LC_title_bar_role {
-  margin: 0;
-}
-
-table#LC_title_bar .LC_title_bar_realm {
-  margin: 0;
-}
-
-span.LC_metadata {
-  font-family: $sans;
-}
-
 table#LC_menubuttons img{
   border: none;
 }
@@ -4794,7 +4811,6 @@ table#LC_top_nav td {
 table#LC_top_nav td a,
 div#LC_top_nav a {
   color: $font;
-  font-family: $sans;
 }
 
 table#LC_top_nav td.LC_top_nav_logo {
@@ -4819,21 +4835,12 @@ table#LC_top_nav td.LC_top_nav_login {
   text-align: center;
 }
 
-table.LC_breadcrumbs td,
-table.LC_docs_path td  {
-  background: $tabbg;
-  color: $fontmenu;
-  font-family: $sans;
-  font-size: smaller;
+.LC_breadcrumbs_component {
+    float: right;
+    margin: 0 1em;
 }
-
-table.LC_breadcrumbs td.LC_breadcrumbs_component,
-table.LC_docs_path td.LC_docs_path_component {
-  background: $tabbg;
-  color: $fontmenu;
-  font-family: $sans;
-  font-size: larger;
-  text-align: right;
+.LC_breadcrumbs_component img {
+    vertical-align: middle;
 }
 
 td.LC_table_cell_checkbox {
@@ -4848,6 +4855,28 @@ table#LC_mainmenu td.LC_mainmenu_column
  font-size: 70%;
 }
 
+#LC_breadcrumbs {
+ clear:both;
+ background: $sidebg;
+ border-bottom: 1px solid $lg_border_color;
+ line-height: 32px; 
+ margin: 0;
+ padding: 0;
+}
+
+/* Preliminary fix to hide breadcrumbs inside remote control window */
+#LC_remote #LC_breadcrumbs {
+    display:none;
+}
+
+#LC_head_subbox {
+ clear:both;
+ background: #F8F8F8; /* $sidebg; */
+ border-bottom: 1px solid $lg_border_color;
+ margin: 0 0 10px 0;
+ padding: 5px;
+}
+
 .LC_fontsize_medium {
  font-size: 85%;
 }
@@ -4858,7 +4887,6 @@ table#LC_mainmenu td.LC_mainmenu_column
 
 .LC_menubuttons_inline_text {
   color: $font;
-  font-family: $sans;
   font-size: 90%;
   padding-left:3px;
 }
@@ -4870,7 +4898,6 @@ table#LC_mainmenu td.LC_mainmenu_column
 .LC_menubuttons_category {
   color: $font;
   background: $pgbg;
-  font-family: $sans;
   font-size: larger;
   font-weight: bold;
 }
@@ -4880,40 +4907,14 @@ td.LC_menubuttons_text {
 }
 
 .LC_current_location {
-  font-family: $sans;
   background: $tabbg;
 }
 
 .LC_new_mail {
-  font-family: $sans;
   background: $tabbg;
   font-weight: bold;
 }
 
-.LC_dropadd_labeltext {
-  font-family: $sans;
-  text-align: right;
-}
-
-.LC_preferences_labeltext {
-  font-family: $sans;
-  text-align: right;
-}
-
-.LC_roleslog_note {
-  font-size: small;
-}
-
-.LC_mail_functions {
-    font-weight: bold;
-}
-
-table.LC_aboutme_port {
-  border: none;
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
 table.LC_data_table,
 table.LC_mail_list {
   border: 1px solid #000000;
@@ -4933,6 +4934,7 @@ table.LC_nested_outer {
   width: 100%;
 }
 
+table.LC_innerpickbox,
 table.LC_nested {
   border: none;
   border-collapse: collapse;
@@ -4943,13 +4945,19 @@ table.LC_nested {
 table.LC_data_table tr th, 
 table.LC_calendar tr th, 
 table.LC_mail_list tr th,
-table.LC_prior_tries tr th {
+table.LC_prior_tries tr th,
+table.LC_innerpickbox tr th {
   font-weight: bold;
   background-color: $data_table_head;
   color:$fontmenu;
   font-size:90%;
 }
 
+table.LC_innerpickbox tr th,
+table.LC_innerpickbox tr td {
+  vertical-align: top;
+}
+
 table.LC_data_table tr.LC_info_row > td {
   background-color: #CCCCCC;
   font-weight: bold;
@@ -4957,15 +4965,13 @@ table.LC_data_table tr.LC_info_row > td
 }
 
 table.LC_data_table tr.LC_odd_row > td,
-table.LC_pick_box tr > td.LC_odd_row,
-table.LC_aboutme_port tr td {
+table.LC_pick_box tr > td.LC_odd_row {
   background-color: $data_table_light;
   padding: 2px;
 }
 
 table.LC_data_table tr.LC_even_row > td,
-table.LC_pick_box tr > td.LC_even_row,
-table.LC_aboutme_port tr.LC_even_row td {
+table.LC_pick_box tr > td.LC_even_row {
   background-color: $data_table_dark;
   padding: 2px;
 }
@@ -5163,7 +5169,6 @@ span.LC_current_location {
 
 span.LC_parm_menu_item {
   font-size: larger;
-  font-family: $sans;
 }
 
 span.LC_parm_scope_all {
@@ -5218,7 +5223,6 @@ table#LC_helpmenu {
 
 table#LC_helpmenu fieldset legend {
   font-size: larger;
-  font-weight: bold;
 }
 
 table#LC_helpmenu_links {
@@ -5271,7 +5275,7 @@ table.LC_pick_box {
 }
 
 table.LC_pick_box td.LC_pick_box_title {
-  background: $tabbg;
+  background: $sidebg;
   font-weight: bold;
   text-align: right;
   vertical-align: top;
@@ -5279,14 +5283,6 @@ table.LC_pick_box td.LC_pick_box_title {
   padding: 8px;
 }
 
-table.LC_pick_box td.LC_selfenroll_pick_box_title {
-  background: $tabbg;
-  font-weight: bold;
-  text-align: right;
-  width: 350px;
-  padding: 8px;
-}
-
 table.LC_pick_box td.LC_pick_box_value {
   text-align: left;
   padding: 8px;
@@ -5406,7 +5402,6 @@ table.LC_notify_front_page td {
 }
 
 .LC_topic_bar {
-  font-family: $sans;
   font-weight: bold;
   width: 100%;
   background: $tabbg;
@@ -5435,17 +5430,45 @@ table.LC_status_selector td {
 
 div.LC_feedback_link {
   clear: both;
-  background: white;
+  background: $sidebg;
   width: 100%;
+  padding-bottom: 10px;
+  border: 1px $tabbg solid;
+  height: 22px;
+  line-height: 22px;
+  padding-top: 5px;
+}
+
+div.LC_feedback_link img {
+  height: 22px;
+  vertical-align:middle;
+}
+
+div.LC_feedback_link a{
+  text-decoration: none;
+}
+
+div.LC_comblock {
+  display:inline; 
+  color:$font;
+  font-size:90%;
+}
+
+div.LC_feedback_link div.LC_comblock {
+  padding-left:5px;
+}
+
+div.LC_feedback_link div.LC_comblock a {
+  color:$font;
 }
 
 span.LC_feedback_link {
-  background: $feedback_link_bg;
+  /* background: $feedback_link_bg; */
   font-size: larger;
 }
 
 span.LC_message_link {
-  background: $feedback_link_bg;
+  /* background: $feedback_link_bg; */
   font-size: larger;
   position: absolute;
   right: 1em;
@@ -5463,14 +5486,12 @@ table.LC_prior_tries td {
 
 .LC_answer_correct {
   background: lightgreen;
-  font-family: $sans;
   color: darkgreen;
   padding: 6px;
 }
 
 .LC_answer_charged_try {
   background: #FFAAAA;
-  font-family: $sans;
   color: darkred;
   padding: 6px;
 }
@@ -5479,28 +5500,24 @@ table.LC_prior_tries td {
 .LC_answer_no_grade,
 .LC_answer_late {
   background: lightyellow;
-  font-family: $sans;
   color: black;
   padding: 6px;
 }
 
 .LC_answer_previous {
   background: lightblue;
-  font-family: $sans;
   color: darkblue;
   padding: 6px;
 }
 
 .LC_answer_no_message {
   background: #FFFFFF;
-  font-family: $sans;
   color: black;
   padding: 6px;
 }
 
 .LC_answer_unknown {
   background: orange;
-  font-family: $sans;
   color: black;
   padding: 6px;
 }
@@ -5535,8 +5552,7 @@ table.LC_prior_match tr td {
   border: 1px solid #000000;
 }
 
-td.LC_nobreak,
-span.LC_nobreak {
+.LC_nobreak {
   white-space: nowrap;
 }
 
@@ -5560,21 +5576,24 @@ table.LC_docs_documents td.LC_docs_docum
   padding: 4px;
 }
 
-.LC_docs_entry_move {
-  border: none;
-  border-collapse: collapse;
-}
-
-.LC_docs_entry_move td {
-  border: 2px solid #BBBBBB;
+div.LC_docs_entry_move {
+  border: 1px solid #BBBBBB;
   background: #DDDDDD;
+  width: 22px;
+  padding: 1px;
+  margin: 0;
 }
 
-.LC_docs_editor td.LC_docs_entry_commands {
+table.LC_data_table tr > td.LC_docs_entry_commands,
+table.LC_data_table tr > td.LC_docs_entry_parameter {
   background: #DDDDDD;
   font-size: x-small;
 }
 
+.LC_docs_entry_parameter {
+  white-space: nowrap;
+}
+
 .LC_docs_copy {
   color: #000099;
 }
@@ -5596,17 +5615,6 @@ table.LC_docs_documents td.LC_docs_docum
   font-size: x-small;
 }
 
-.LC_docs_editor td.LC_docs_entry_title,
-.LC_docs_editor td.LC_docs_entry_icon {
-  background: #FFFFBB;
-}
-
-.LC_docs_editor td.LC_docs_entry_parameter {
-  background: #BBBBFF;
-  font-size: x-small;
-  white-space: nowrap;
-}
-
 table.LC_docs_adddocs td,
 table.LC_docs_adddocs th {
   border: 1px solid #BBBBBB;
@@ -5643,10 +5651,6 @@ table.LC_double_column tr td.LC_right_co
   vertical-align: top;
 }
 
-span.LC_role_level {
-  font-weight: bold;
-}
-
 div.LC_left_float {
   float: left;
   padding-right: 5%;
@@ -5738,12 +5742,6 @@ div.LC_edit_problem_editxml_header div {
   margin-top: 5px;
 }
 
-div.LC_edit_problem_header_edit_row {
-  background: $tabbg;
-  padding: 3px;
-  margin-bottom: 5px;
-}
-
 div.LC_edit_problem_header_title {
   font-weight: bold;
   font-size: larger;
@@ -5773,14 +5771,6 @@ div.LC_edit_problem_saves {
   padding-bottom: 5px;
 }
 
-hr.LC_edit_problem_divide {
-  clear: both;
-  color: $tabbg;
-  background-color: $tabbg;
-  height: 3px;
-  border: none;
-}
-
 img.stift{
   border-width: 0;
   vertical-align: middle;
@@ -5799,7 +5789,6 @@ table#LC_mainmenu td.LC_mainmenu_col_fie
 .LC_mainmenu_fieldset_category {
   color: $font;
   background: $pgbg;
-  font-family: $sans;
   font-size: small;
   font-weight: bold;
 }
@@ -5827,7 +5816,7 @@ ul.LC_TabContent   li:hover a {
 }
 
 h1 {
-	padding:5px 10px 5px 20px;
+	padding: 0;
 	line-height:130%;
 }
 
@@ -5845,13 +5834,14 @@ h2,h3,h4,h5,h6 {
 	border-bottom:solid 1px $lg_border_color;
 }
 
+.LC_Box > .LC_hcell {
+    margin: 0 -10px 10px -10px;
+}
+
 .LC_noBorder {
         border: 0;
 }
 
-
-/* Main Header with discription of Person, Course, etc. */
-
 .LC_Right {
         float: right;
         margin: 0;
@@ -5880,21 +5870,27 @@ dl,ul,div,fieldset {
 /*	overflow: hidden; */
 }
 
-#head_userinfo {
+fieldset > legend {
+    font-weight: bold;
+    padding: 0 5px 0 5px;
+}
+
+#LC_nav_bar {
     float: left;
-    margin: 0;
+    margin: 0.2em 0 0 0;
 }
 
-#head_userinfo em{
+#LC_nav_bar em{
     font-weight: bold;
     font-style: normal;
 }
 
 ol.LC_smallMenu {
     float: right;
+    margin: 0.2em 0 0 0;
 }
 
-ol.LC_smallMenu, ol#LC_PathBreadcrumbs {
+ol#LC_PathBreadcrumbs {
 	margin: 0;
 }
 
@@ -5914,46 +5910,46 @@ ol.LC_smallMenu a {
 	text-decoration: none;
 }
 
-ol#LC_TabMainMenuContent {
+ul#LC_TabMainMenuContent {
     clear: both;
+    color: $fontmenu;
+    background: $tabbg;
+    list-style: none;
+    padding: 0;
+    margin: 0;
+    width: 100%;
 }
 
-ol#LC_TabMainMenuContent, 
-ul.LC_TabContent ,
-ul.LC_TabContentBigger {
+ul#LC_TabMainMenuContent li {
+    font-weight: bold;
+    line-height: 1.8em;
+    padding: 0 0.8em; 
+    border-right: 1px solid black;
+    display: inline;
+    vertical-align: middle;
+}
+
+ul.LC_TabContent {
 	display:block;
+	background: $sidebg;
+	border-bottom: solid 1px $lg_border_color;
 	list-style:none;
-	margin: 0;
+	margin: 0 -10px;
 	padding: 0;
 }
 
-ol#LC_TabMainMenuContent li,
 ul.LC_TabContent li,
 ul.LC_TabContentBigger li {
-	display: inline;
-	border-right: solid 1px $lg_border_color;
 	float:left;
-	line-height:140%;
-	white-space:nowrap;
-}
-
-ol#LC_TabMainMenuContent li {
-	vertical-align: bottom;
-	border-bottom: solid 1px RGB(175, 175, 175);
-	padding: 5px 10px 5px 10px;
-	margin-right:5px;
-	margin-bottom:3px;
-	font-weight: bold;
-	background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
 }
 
-ol#LC_TabMainMenuContent li a {
-	color: RGB(47, 47, 47);
+ul#LC_TabMainMenuContent li a {
+    color: $fontmenu;
 	text-decoration: none;
 }
 
 ul.LC_TabContent {
-	min-height:1.6em;
+	min-height:1.5em;
 }
 
 ul.LC_TabContent li {
@@ -5963,6 +5959,10 @@ ul.LC_TabContent li {
 	border-bottom:solid 1px $lg_border_color;
 }
 
+ul.LC_TabContent .right {
+	float:right;
+}
+
 ul.LC_TabContent li a, ul.LC_TabContent li {
 	color:rgb(47,47,47);
 	text-decoration:none;
@@ -5973,56 +5973,86 @@ ul.LC_TabContent li a, ul.LC_TabContent
 
 ul.LC_TabContent li:hover, ul.LC_TabContent li.active {
         background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center;
-	border-bottom:solid 1px #FFFFFF;
+	border-bottom:solid 2px #FFFFFF;
 	padding-right: 16px;
 }
 
-ul.LC_TabContentBigger li {
-	vertical-align:bottom;
-	border-top:solid 1px $lg_border_color;
-	border-left:solid 1px $lg_border_color;
-	padding:5px 10px 5px 10px;
-	margin-left:2px;
-	background:url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
+#maincoursedoc {
+	clear:both;
+}
+
+ul.LC_TabContentBigger {
+        display:block;
+        list-style:none;
+        padding: 0;
 }
 
-ul.LC_TabContentBigger li:hover, 
-ul.LC_TabContentBigger li.active {
-	background:url(/adm/lonIcons/lightGreyBG.png) repeat-x right bottom;
+ul.LC_TabContentBigger li {
+        vertical-align:bottom;
+        height: 30px;
+        font-size:110%;
+        font-weight:bold;
+        color: #737373;
 }
 
-ul.LC_TabContentBigger li, 
+
 ul.LC_TabContentBigger li a {
-	font-size:110%;
-	font-weight:bold;
+        background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat;
+	height: 30px;
+	line-height: 30px;
+	text-align: center;
+	display: block;
+	text-decoration: none;
 }
 
-ol#LC_MenuBreadcrumbs, 
-ol#LC_PathBreadcrumbs, 
+ul.LC_TabContentBigger li:hover a, 
+ul.LC_TabContentBigger li.active a {
+	background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat;
+	color:$font;
+	text-decoration: underline;
+}
+
+
+ul.LC_TabContentBigger li b {
+	background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom;
+	display: block;
+	float: left;
+	padding: 0 30px;
+}
+
+ul.LC_TabContentBigger li:hover b,
+ul.LC_TabContentBigger li.active b {
+        background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;
+        color:$font;
+	border-bottom: 1px solid #FFFFFF;
+}
+
+
 ul.LC_CourseBreadcrumbs {
-	border-top: solid 1px RGB(255, 255, 255);
-	height: 20px;
-	line-height: 20px;
-	vertical-align: bottom;
-	margin: 0 0 30px 0;
+  background: $sidebg;
+  line-height: 32px;
+  padding-left: 10px;
+  margin: 0 0 10px 0;
+  list-style-position: inside;
+
+}
+
+ol#LC_MenuBreadcrumbs, 
+ol#LC_PathBreadcrumbs {
 	padding-left: 10px;
+	margin: 0;
 	list-style-position: inside;
-	background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
 }
 
 ol#LC_MenuBreadcrumbs li, 
 ol#LC_PathBreadcrumbs li, 
 ul.LC_CourseBreadcrumbs li {
-/*
-	background: url(/adm/lonIcons/arrow_white.png) no-repeat left center;
-*/
-	display: inline;
-	padding: 0 0 0 10px;
-/*	vertical-align: bottom; */
-	overflow:hidden;
+    display: inline;
+    white-space: nowrap;
 }
 
-ol#LC_MenuBreadcrumbs li a, ul.LC_CourseBreadcrumbs li a {
+ol#LC_MenuBreadcrumbs li a,
+ul.LC_CourseBreadcrumbs li a {
 	text-decoration: none;
 	font-size:90%;
 }
@@ -6033,18 +6063,9 @@ ol#LC_PathBreadcrumbs li a {
 	font-weight:bold;
 }
 
-.LC_BoxPadding {
-	padding: 10px;
-}
-
-.LC_ContentBoxSpecial {
-	border: solid 1px $lg_border_color;
-}
-
-.LC_ContentBoxSpecialContactInfo {
-	border: solid 1px $lg_border_color;
-	max-width:25%;
-	min-width:25%;
+.LC_Box {
+    border: solid 1px $lg_border_color;
+    padding: 0 10px 10px 10px;
 }
 
 .LC_AboutMe_Image {
@@ -6133,26 +6154,6 @@ div.LC_columnSection>* {
 	overflow:hidden;
 }
 
-.ContentBoxSpecialTemplate {
-        border: solid 1px $lg_border_color;
-}
-
-.ContentBoxTemplate {
-        padding:10px;
-}
-
-div.LC_columnSection > .ContentBoxTemplate,
-div.LC_columnSection > .ContentBoxSpecialTemplate {
-        width: 600px;
-}
-
-.clear {
-	clear: both;
-	line-height: 0;
-	font-size: 0;
-	height: 0;
-}
-
 .LC_loginpage_container {
 	text-align:left;
 	margin : 0 auto;
@@ -6207,7 +6208,7 @@ table em {
 table.LC_tableBrowseRes,
 table.LC_tableOfContent {
         border:none;
-	border-spacing: 1;
+	border-spacing: 1px;
 	padding: 3px;
 	background-color: #FFFFFF;
 	font-size: 90%;
@@ -6301,7 +6302,7 @@ a.LC_toolbarItem {
 	background-color:transparent;
 }
 
-ul.LC_functionslist li {
+ul.LC_funclist li {
   float: left;
   white-space: nowrap;
   height: 35px; /* at least as high as heighest list item */
@@ -6436,7 +6437,8 @@ sub xml_begin {
             .'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' 
 	    .'xmlns="http://www.w3.org/1999/xhtml">';
     } else {
-	$output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>';
+	$output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
+           .'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">';
     }
     return $output;
 }
@@ -6498,7 +6500,7 @@ $args - additional optional args support
 
              only_body      -> is true will set &bodytag() onlybodytag
                                     arg on
-             no_nav_bar     -> is true will set &bodytag() notopbar arg on
+             no_nav_bar     -> is true will set &bodytag() no_nav_bar arg on
              add_entries    -> additional attributes to add to the  <body>
              domain         -> force to color decorate a page for a 
                                     specific domain
@@ -6512,12 +6514,8 @@ $args - additional optional args support
                                     a html attribute
              force_register -> if is true will turn on the &bodytag()
                                     $forcereg arg
-             body_title     -> alternate text to use instead of $title
-                                    in the title box that appears, this text
-                                    is not auto translated like the $title is
              frameset       -> if true will start with a <frameset>
                                     rather than <body>
-             no_title       -> if true the title bar won't be shown
              skip_phases    -> hash ref of 
                                     head -> skip the <html><head> generation
                                     body -> skip all <body> generation
@@ -6527,6 +6525,8 @@ $args - additional optional args support
              inherit_jsmath -> when creating popup window in a page,
                                     should it have jsmath forced on by the
                                     current page
+             bread_crumbs ->             Array containing breadcrumbs
+             bread_crumbs_components ->  if exists show it as headline else show only the breadcrumbs
 
 =back
 
@@ -6559,16 +6559,15 @@ sub start_page {
 	    my $attr_string = &make_attr_string($args->{'force_register'},
 						$args->{'add_entries'});
 	    $result .= "\n<frameset $attr_string>\n";
-	} else {
-	    $result .=
-		&bodytag($title, 
-			 $args->{'function'},       $args->{'add_entries'},
-			 $args->{'only_body'},      $args->{'domain'},
-			 $args->{'force_register'}, $args->{'body_title'},
-			 $args->{'no_nav_bar'},     $args->{'bgcolor'},
-			 $args->{'no_title'},       $args->{'no_inline_link'},
-			 $args);
-	}
+        } else {
+            $result .=
+                &bodytag($title, 
+                         $args->{'function'},       $args->{'add_entries'},
+                         $args->{'only_body'},      $args->{'domain'},
+                         $args->{'force_register'}, $args->{'no_nav_bar'},
+                         $args->{'bgcolor'},        $args->{'no_inline_link'},
+                         $args);
+        }
     }
 
     if ($args->{'js_ready'}) {
@@ -6578,7 +6577,15 @@ sub start_page {
 		$result = &html_encode($result);
     }
 
-	#Breadcrumbs
+    # Preparation for new and consistent functionlist at top of screen
+    # if ($args->{'functionlist'}) {
+    #            $result .= &build_functionlist();
+    #}
+
+    # Don't add anything more if only_body wanted
+    return $result if $args->{'only_body'};
+
+    #Breadcrumbs
     if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
 		&Apache::lonhtmlcommon::clear_breadcrumbs();
 		#if any br links exists, add them to the breadcrumbs
@@ -6822,14 +6829,17 @@ Returns either 'student','coordinator','
 
 ###############################################
 sub get_users_function {
-    my $function = 'student';
+    my $function = 'norole';
+    if ($env{'request.role'}=~/^(st)/) {
+        $function='student';
+    }
     if ($env{'request.role'}=~/^(cc|in|ta|ep)/) {
         $function='coordinator';
     }
     if ($env{'request.role'}=~/^(su|dc|ad|li)/) {
         $function='admin';
     }
-    if (($env{'request.role'}=~/^(au|ca)/) ||
+    if (($env{'request.role'}=~/^(au|ca|aa)/) ||
         ($ENV{'REQUEST_URI'}=~/^(\/priv|\~)/)) {
         $function='author';
     }
@@ -6840,6 +6850,38 @@ sub get_users_function {
 
 =pod
 
+=item * &show_course()
+
+Used by lonmenu.pm and lonroles.pm to determine whether to use the word
+'Courses' or 'Roles' in inline navigation and on screen displaying user's roles.
+
+Inputs:
+None
+
+Outputs:
+Scalar: 1 if 'Course' to be used, 0 otherwise.
+
+=cut
+
+###############################################
+sub show_course {
+    my $course = !$env{'user.adv'};
+    if (!$env{'user.adv'}) {
+        foreach my $env (keys(%env)) {
+            next if ($env !~ m/^user\.priv\./);
+            if ($env !~ m/^user\.priv\.(?:st|cm)/) {
+                $course = 0;
+                last;
+            }
+        }
+    }
+    return $course;
+}
+
+###############################################
+
+=pod
+
 =item * &check_user_status()
 
 Determines current status of supplied role for a
@@ -7493,6 +7535,7 @@ sub user_picker {
         #       loncreateuser::print_user_query_page()
         #       has been completed.
         next if ($option eq 'alc');
+        next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs'));  
         next if ($option eq 'crs' && !$env{'request.course.id'});
         if ($curr_selected{'srchin'} eq $option) {
             $srchinsel .= ' 
@@ -7583,6 +7626,7 @@ ENDSCRIPT
 
     my $output = <<"END_BLOCK";
 <script type="text/javascript">
+// <![CDATA[
 function validateEntry(callingForm) {
 
     var checkok = 1;
@@ -7651,28 +7695,25 @@ function validateEntry(callingForm) {
 
 $newuserscript
 
+// ]]>
 </script>
 
 $new_user_create
 
-<table>
- <tr>
-  <td>$lt{'doma'}:</td>
-  <td>$domform</td>
-  </td>
- </tr>
- <tr>
-  <td>$lt{'usr'}:</td>
-  <td>$srchbysel
-      $srchtypesel 
-      <input type="text" size="15" name="srchterm" value="$srchterm" />
-      $srchinsel 
-  </td>
- </tr>
-</table>
-<br />
 END_BLOCK
 
+    $output .= &Apache::lonhtmlcommon::start_pick_box().
+               &Apache::lonhtmlcommon::row_title($lt{'doma'}).
+               $domform.
+               &Apache::lonhtmlcommon::row_closure().
+               &Apache::lonhtmlcommon::row_title($lt{'usr'}).
+               $srchbysel.
+               $srchtypesel. 
+               '<input type="text" size="15" name="srchterm" value="'.$srchterm.'" />'.
+               $srchinsel.
+               &Apache::lonhtmlcommon::row_closure(1). 
+               &Apache::lonhtmlcommon::end_pick_box().
+               '<br />';
     return $output;
 }
 
@@ -8545,7 +8586,7 @@ sub csv_print_samples {
     $r->print(&mt('Samples').'<br />'.&start_data_table().
               &start_data_table_header_row());
     foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) { 
-        $r->print('<th>'.&mt('Column&nbsp;[_1]',($sample+1)).'</th>'); }
+        $r->print('<th>'.&mt('Column [_1]',($sample+1)).'</th>'); }
     $r->print(&end_data_table_header_row());
     foreach my $hash (@$samples) {
 	$r->print(&start_data_table_row());
@@ -8589,7 +8630,7 @@ sub csv_print_select_table {
 	my ($value,$display,$defaultcol)=@{ $array_ref };
 	$r->print(&start_data_table_row().'<td>'.$display.'</td>');
 
-	$r->print('<td><select name=f'.$i.
+	$r->print('<td><select name="f'.$i.'"'.
 		  ' onchange="javascript:flip(this.form,'.$i.');">');
 	$r->print('<option value="none"></option>');
 	foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {
@@ -9243,10 +9284,11 @@ sub restore_settings {
 
 =item * &build_recipient_list()
 
-Build recipient lists for four types of e-mail:
+Build recipient lists for five types of e-mail:
 (a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors
-(d) Help requests, generated by
-lonerrorhandler.pm, CHECKRPMS, loncron, and lonsupportreq.pm respectively.
+(d) Help requests, (e) Course requests needing approval,  generated by
+lonerrorhandler.pm, CHECKRPMS, loncron, lonsupportreq.pm and
+loncoursequeueadmin.pm respectively.
 
 Inputs:
 defmail (scalar - email address of default recipient), 
@@ -9819,7 +9861,8 @@ sub check_clone {
         $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});     
     } else {
 	my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
-	if ($env{'request.role.domain'} eq $args->{'clonedomain'}) {
+	if (($env{'request.role.domain'} eq $args->{'clonedomain'}) && 
+            (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {
 	    $can_clone = 1;
 	} else {
 	    my %clonehash = &Apache::lonnet::get('environment',['cloners'],
@@ -9847,7 +9890,7 @@ sub check_clone {
 }
 
 sub construct_course {
-    my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_;
+    my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context,$cnum) = @_;
     my $outcome;
     my $linefeed =  '<br />'."\n";
     if ($context eq 'auto') {
@@ -9885,7 +9928,8 @@ sub construct_course {
                                              $args->{'crscode'},
                                              $args->{'ccuname'}.':'.
                                              $args->{'ccdomain'},
-                                             $args->{'crstype'});
+                                             $args->{'crstype'},
+                                             $cnum);
 
     # Note: The testing routines depend on this being output; see 
     # Utils::Course. This needs to at least be output as a comment
@@ -10194,7 +10238,7 @@ sub group_term {
     my $crstype = &course_type();
     my %names = (
                   'Course' => 'group',
-                  'Group' => 'team',
+                  'Community' => 'group',
                 );
     return $names{$crstype};
 }
@@ -10258,7 +10302,23 @@ sub escape_url {
     return join('/',@urlslices).'/'.$lastitem;
 }
 
-# -------------------------------------------------------- Initliaze user login
+sub compare_arrays {
+    my ($arrayref1,$arrayref2) = @_;
+    my (@difference,%count);
+    @difference = ();
+    %count = ();
+    if ((ref($arrayref1) eq 'ARRAY') && (ref($arrayref2) eq 'ARRAY')) {
+        foreach my $element (@{$arrayref1}, @{$arrayref2}) { $count{$element}++; }
+        foreach my $element (keys(%count)) {
+            if ($count{$element} == 1) {
+                push(@difference,$element);
+            }
+        }
+    }
+    return @difference;
+}
+
+# -------------------------------------------------------- Initialize user login
 sub init_user_environment {
     my ($r, $username, $domain, $authhost, $form, $args) = @_;
     my $lonids=$Apache::lonnet::perlvar{'lonIDsDir'};
@@ -10312,19 +10372,6 @@ sub init_user_environment {
     my ($httpbrowser,$clientbrowser,$clientversion,$clientmathml,
         $clientunicode,$clientos) = &decode_user_agent($r);
 
-# -------------------------------------- Any accessibility options to remember?
-    if (($form->{'interface'}) && ($form->{'remember'} eq 'true')) {
-	foreach my $option ('imagesuppress','appletsuppress',
-			    'embedsuppress','fontenhance','blackwhite') {
-	    if ($form->{$option} eq 'true') {
-		&Apache::lonnet::put('environment',{$option => 'on'},
-				     $domain,$username);
-	    } else {
-		&Apache::lonnet::del('environment',[$option],
-				     $domain,$username);
-	    }
-	}
-    }
 # ------------------------------------------------------------- Get environment
 
     my %userenv = &Apache::lonnet::dump('environment',$domain,$username);
@@ -10342,10 +10389,8 @@ sub init_user_environment {
     if ($userenv{'texengine'} eq 'ttm') { $clientmathml=1; }
 
 # --------------- Do not trust query string to be put directly into environment
-    foreach my $option ('imagesuppress','appletsuppress',
-			'embedsuppress','fontenhance','blackwhite',
-			'interface','localpath','localres') {
-	$form->{$option}=~s/[\n\r\=]//gs;
+    foreach my $option ('interface','localpath','localres') {
+        $form->{$option}=~s/[\n\r\=]//gs;
     }
 # --------------------------------------------------------- Write first profile
 
@@ -10379,13 +10424,6 @@ sub init_user_environment {
 	    $form->{'interface'}=~s/\W//gs;
 	    $initial_env{"browser.interface"} = $form->{'interface'};
 	    $env{'browser.interface'}=$form->{'interface'};
-	    foreach my $option ('imagesuppress','appletsuppress',
-				'embedsuppress','fontenhance','blackwhite') {
-		if (($form->{$option} eq 'true') ||
-		    ($userenv{$option} eq 'on')) {
-		    $initial_env{"browser.$option"} = "on";
-		}
-	    }
 	}
 
         foreach my $tool ('aboutme','blog','portfolio') {
@@ -10393,7 +10431,7 @@ sub init_user_environment {
                 &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
         }
 
-        foreach my $crstype ('official','unofficial') {
+        foreach my $crstype ('official','unofficial','community') {
             $userenv{'canrequest.'.$crstype} =
                 &Apache::lonnet::usertools_access($username,$domain,$crstype,
                                                   'reload','requestcourses');