--- loncom/interface/loncommon.pm	2009/04/01 14:22:11	1.783
+++ loncom/interface/loncommon.pm	2010/08/08 02:00:38	1.973
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.783 2009/04/01 14:22:11 amueller Exp $
+# $Id: loncommon.pm,v 1.973 2010/08/08 02:00:38 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -407,8 +407,9 @@ sub studentbrowser_javascript {
           ) { return ''; }  
    return (<<'ENDSTDBRW');
 <script type="text/javascript" language="Javascript">
+// <![CDATA[
     var stdeditbrowser;
-    function openstdbrowser(formname,uname,udom,roleflag,ignorefilter) {
+    function openstdbrowser(formname,uname,udom,roleflag,ignorefilter,courseadvonly) {
         var url = '/adm/pickstudent?';
         var filter;
 	if (!ignorefilter) {
@@ -422,30 +423,39 @@ sub studentbrowser_javascript {
         url += 'form=' + formname + '&unameelement='+uname+
                                     '&udomelement='+udom;
 	if (roleflag) { url+="&roles=1"; }
+        if (courseadvonly) { url+="&courseadvonly=1"; }
         var title = 'Student_Browser';
         var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';
         stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();
     }
+// ]]>
 </script>
 ENDSTDBRW
 }
 
 sub selectstudent_link {
-   my ($form,$unameele,$udomele)=@_;
+   my ($form,$unameele,$udomele,$courseadvonly)=@_;
+   my $callargs = "'".$form."','".$unameele."','".$udomele."'";
    if ($env{'request.course.id'}) {  
        if (!&Apache::lonnet::allowed('srm',$env{'request.course.id'})
 	   && !&Apache::lonnet::allowed('srm',$env{'request.course.id'}.
 					'/'.$env{'request.course.sec'})) {
 	   return '';
        }
-       return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.
-        '","'.$udomele.'");'."'>".&mt('Select User')."</a>";
+       if ($courseadvonly)  {
+           $callargs .= ",'',1,1";
+       }
+       return '<span class="LC_nobreak">'.
+              '<a href="javascript:openstdbrowser('.$callargs.');">'.
+              &mt('Select User').'</a></span>';
    }
    if ($env{'request.role'}=~/^(au|dc|su)/) {
-       return "<a href='".'javascript:openstdbrowser("'.$form.'","'.$unameele.
-        '","'.$udomele.'",1);'."'>".&mt('Select User')."</a>";
+       $callargs .= ",1"; 
+       return '<span class="LC_nobreak">'.
+              '<a href="javascript:openstdbrowser('.$callargs.');">'.
+              &mt('Select User').'</a></span>';
    }
    return '';
 }
@@ -453,6 +463,7 @@ sub selectstudent_link {
 sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";
 <script type="text/javascript" language="JavaScript">
+// <![CDATA[
 var stdeditbrowser;
 
 function openauthorbrowser(formname,udom) {
@@ -465,32 +476,28 @@ 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 ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_;
+    my $wintitle = 'Course_Browser';
+    if ($crstype eq 'Community') {
+        $wintitle = 'Community_Browser';
+    }
+    my $id_functions = &javascript_index_functions();
+    my $output = '
 <script type="text/javascript" language="JavaScript">
+// <![CDATA[
     var stdeditbrowser;'."\n";
-   $output .= <<"ENDSTDBRW";
-    function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
+
+    $output .= <<"ENDSTDBRW";
+    function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,type,type_elem) {
         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+'&';
@@ -509,59 +516,170 @@ sub coursebrowser_javascript {
             else {
                 if (formname == 'portform') {
                     url += '&setroles='+extra_element;
+                } else {
+                    if (formname == 'rules') {
+                        url += '&fixeddom='+extra_element; 
+                    }
                 }
             }     
         }
-        if (multflag !=null && multflag != '') {
-            url += '&multiple='+multflag;
+        if (type != null && type != '') {
+            url += '&type='+type;
         }
-        if (crstype == 'Course/Group') {
-            if (formname == 'cu') {
-                crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
-                if (crstype == "") {
-                    alert("$crs_or_grp_alert");
-                    return;
-                }
-            }
+        if (type_elem != null && type_elem != '') {
+            url += '&typeelement='+type_elem;
         }
-        if (crstype !=null && crstype != '') {
-            url += '&type='+crstype;
+        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;
         }
-        var title = 'Course_Browser';
+        var title = '$wintitle';
         var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';
         stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();
     }
+$id_functions
+ENDSTDBRW
+    if (($sec_element ne '') || ($role_element ne '')) {
+        $output .= &setsec_javascript($sec_element,$formname,$role_element);
+    }
+    $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;
+}
+
+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; 
     }
+    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 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,caller) {
+    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;
+    if ((caller != null) && (caller != undefined)) {
+        url += '&caller='+caller;
+    }
+    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,uname) {
+    var formid = getFormIdByName(formname);
+    if (formid > -1) {
+        var unameid = getIndexByName(formid,uname);
+        var domid = getIndexByName(formid,udom);
+        var hidedomid = getIndexByName(formid,origdom);
+        if (hidedomid > -1) {
+            var fixeddom = document.forms[formid].elements[hidedomid].value;
+            var unameval = document.forms[formid].elements[unameid].value;
+            if ((fixeddom != '') && (fixeddom != undefined) && (fixeddom != null) && (unameval != '') && (unameval != undefined) && (unameval != null)) {
+                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 {
-    my ($sec_element,$formname) = @_;
+    my ($sec_element,$formname,$role_element) = @_;
+    my (@courserolenames,@communityrolenames,$rolestr,$courserolestr,
+        $communityrolestr);
+    if ($role_element ne '') {
+        my @allroles = ('st','ta','ep','in','ad');
+        foreach my $crstype ('Course','Community') {
+            if ($crstype eq 'Community') {
+                foreach my $role (@allroles) {
+                    push(@communityrolenames,&Apache::lonnet::plaintext($role,$crstype));
+                }
+                push(@communityrolenames,&Apache::lonnet::plaintext('co'));
+            } else {
+                foreach my $role (@allroles) {
+                    push(@courserolenames,&Apache::lonnet::plaintext($role,$crstype));
+                }
+                push(@courserolenames,&Apache::lonnet::plaintext('cc'));
+            }
+        }
+        $rolestr = '"'.join('","',@allroles).'"';
+        $courserolestr = '"'.join('","',@courserolenames).'"';
+        $communityrolestr = '"'.join('","',@communityrolenames).'"';
+    }
     my $setsections = qq|
 function setSect(sectionlist) {
     var sectionsArray = new Array();
@@ -595,15 +713,67 @@ function setSect(sectionlist) {
         }
     }
 }
+
+function setRole(crstype) {
 |;
+    if ($role_element eq '') {
+        $setsections .= '    return;
+}
+';
+    } else {
+        $setsections .= qq|
+    var elementLength = document.$formname.$role_element.length;
+    var allroles = Array($rolestr);
+    var courserolenames = Array($courserolestr);
+    var communityrolenames = Array($communityrolestr);
+    if (elementLength != undefined) {
+        if (document.$formname.$role_element.options[5].value == 'cc') {
+            if (crstype == 'Course') {
+                return;
+            } else {
+                allroles[5] = 'co';
+                for (var i=0; i<6; i++) {
+                    document.$formname.$role_element.options[i].value = allroles[i];
+                    document.$formname.$role_element.options[i].text = communityrolenames[i];
+                }
+            }
+        } else {
+            if (crstype == 'Community') {
+                return;
+            } else {
+                allroles[5] = 'cc';
+                for (var i=0; i<6; i++) {
+                    document.$formname.$role_element.options[i].value = allroles[i];
+                    document.$formname.$role_element.options[i].text = courserolenames[i];
+                }
+            }
+        }
+    }
+    return;
+}
+|;
+    }
     return $setsections;
 }
 
-
 sub selectcourse_link {
-   my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
-   return "<a href='".'javascript:opencrsbrowser("'.$form.'","'.$unameele.
-        '","'.$udomele.'","'.$desc.'","'.$extra_element.'","'.$multflag.'","'.$selecttype.'");'."'>".&mt('Select Course')."</a>";
+   my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype,
+       $typeelement) = @_;
+   my $type = $selecttype;
+   my $linktext = &mt('Select Course');
+   if ($selecttype eq 'Community') {
+       $linktext = &mt('Select Community');
+   } elsif ($selecttype eq 'Course/Community') {
+       $linktext = &mt('Select Course/Community');
+       $type = '';
+   }
+   return '<span class="LC_nobreak">'
+         ."<a href='"
+         .'javascript:opencrsbrowser("'.$form.'","'.$unameele
+         .'","'.$udomele.'","'.$desc.'","'.$extra_element
+         .'","'.$multflag.'","'.$type.'","'.$typeelement.'");'
+         ."'>".$linktext.'</a>'
+         .'</span>';
 }
 
 sub selectauthor_link {
@@ -612,6 +782,14 @@ sub selectauthor_link {
           &mt('Select Author').'</a>';
 }
 
+sub selectuser_link {
+    my ($form,$unameelem,$domelem,$lastelem,$firstelem,$emailelem,$hdomelem,
+        $coursedom,$linktext,$caller) = @_;
+    return '<a href="javascript:openuserbrowser('."'$form','$unameelem','$domelem',".
+           "'$lastelem','$firstelem','$emailelem','$hdomelem','$coursedom','$caller'".
+           ');">'.$linktext.'</a>';
+}
+
 sub check_uncheck_jscript {
     my $jscript = <<"ENDSCRT";
 function checkAll(field) {
@@ -710,6 +888,21 @@ sub select_datelocale {
     return $output;
 }
 
+sub select_language {
+    my ($name,$selected,$includeempty) = @_;
+    my %langchoices;
+    if ($includeempty) {
+        %langchoices = ('' => 'No language preference');
+    }
+    foreach my $id (&languageids()) {
+        my $code = &supportedlanguagecode($id);
+        if ($code) {
+            $langchoices{$code} = &plainlanguagedescription($id);
+        }
+    }
+    return &select_form($selected,$name,\%langchoices);
+}
+
 =pod
 
 =item * &linked_select_forms(...)
@@ -797,6 +990,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 = '';
@@ -842,6 +1036,7 @@ function select1_changed() {
         }
     }
 }
+// ]]>
 </script>
 END
     # output the initial values for the selection lists
@@ -877,7 +1072,7 @@ END
 
 =pod
 
-=item * &help_open_topic($topic,$text,$stayOnPage,$width,$height)
+=item * &help_open_topic($topic,$text,$stayOnPage,$width,$height,$imgid)
 
 Returns a string corresponding to an HTML link to the given help
 $topic, where $topic corresponds to the name of a .tex file in
@@ -895,17 +1090,18 @@ a new window using Javascript. (Default
 
 $width and $height are optional numerical parameters that will
 override the width and height of the popped up window, which may
-be useful for certain help topics with big pictures included. 
+be useful for certain help topics with big pictures included.
+
+$imgid is the id of the img tag used for the help icon. This may be
+used in a javascript call to switch the image src.  See 
+lonhtmlcommon::htmlareaselectactive() for an example.
 
 =cut
 
 sub help_open_topic {
-    my ($topic, $text, $stayOnPage, $width, $height) = @_;
+    my ($topic, $text, $stayOnPage, $width, $height, $imgid) = @_;
     $text = "" if (not defined $text);
     $stayOnPage = 0 if (not defined $stayOnPage);
-    if ($env{'browser.interface'} eq 'textual') {
-	$stayOnPage=1;
-    }
     $width = 350 if (not defined $width);
     $height = 400 if (not defined $height);
     my $filename = $topic;
@@ -932,10 +1128,13 @@ sub help_open_topic {
     # (Always) Add the graphic
     my $title = &mt('Online Help');
     my $helpicon=&lonhttpdurl("/adm/help/help.png");
+    if ($imgid ne '') {
+        $imgid = ' id="'.$imgid.'"';
+    }
     $template.=' <a target="_top" href="'.$link.'" title="'.$title.'">'
               .'<img src="'.$helpicon.'" border="0"'
               .' alt="'.&mt('Help: [_1]',$topic).'"'
-              .' title="'.$title.'"' 
+              .' title="'.$title.'" style="vertical-align:middle;"'.$imgid 
               .' /></a>';
     if ($text ne "") {	
         $template.='</span>';
@@ -978,7 +1177,7 @@ sub general_help {
     my $helptopic='Student_Intro';
     if ($env{'request.role'}=~/^(ca|au)/) {
 	$helptopic='Authoring_Intro';
-    } elsif ($env{'request.role'}=~/^cc/) {
+    } elsif ($env{'request.role'}=~/^(cc|co)/) {
 	$helptopic='Course_Coordination_Intro';
     } elsif ($env{'request.role'}=~/^dc/) {
         $helptopic='Domain_Coordination_Intro';
@@ -998,7 +1197,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;
@@ -1008,13 +1209,7 @@ ENDOUTPUT
 sub help_open_menu {
     my ($topic,$component_help,$faq,$bug,$stayOnPage,$width,$height,$text) 
 	= @_;    
-    $stayOnPage = 0 if (not defined $stayOnPage);
-    # only use pop-up help (stayOnPage == 0)
-    # if environment.remote is on (using remote control UI)
-    if ($env{'browser.interface'} eq 'textual' ||
-    	$env{'environment.remote'} eq 'off' ) {
-        $stayOnPage=1;
-    }
+    $stayOnPage = 1;
     my $output;
     if ($component_help) {
 	if (!$text) {
@@ -1035,9 +1230,8 @@ sub help_open_menu {
 sub top_nav_help {
     my ($text) = @_;
     $text = &mt($text);
-    my $stay_on_page = 
-	($env{'browser.interface'}  eq 'textual' ||
-	 $env{'environment.remote'} eq 'off' );
+    my $stay_on_page = 1;
+
     my $link = ($stay_on_page) ? "javascript:helpMenu('display')"
 	                     : "javascript:helpMenu('open')";
     my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);
@@ -1052,11 +1246,7 @@ END
 
 sub help_menu_js {
     my ($text) = @_;
-
-    my $stayOnPage = 
-	($env{'browser.interface'}  eq 'textual' ||
-	 $env{'environment.remote'} eq 'off' );
-
+    my $stayOnPage = 1;
     my $width = 620;
     my $height = 600;
     my $helptopic=&general_help();
@@ -1075,8 +1265,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;
@@ -1101,8 +1291,8 @@ function writeHelp(caller) {
     caller.document.close()
     caller.focus()
 }
-// ]]>
 // END LON-CAPA Internal -->
+// ]]>
 </script>
 ENDTEMPLATE
     return $template;
@@ -1113,11 +1303,7 @@ sub help_open_bug {
     unless ($env{'user.adv'}) { return ''; }
     unless ($Apache::lonnet::perlvar{'BugzillaHost'}) { return ''; }
     $text = "" if (not defined $text);
-    $stayOnPage = 0 if (not defined $stayOnPage);
-    if ($env{'browser.interface'} eq 'textual' ||
-	$env{'environment.remote'} eq 'off' ) {
 	$stayOnPage=1;
-    }
     $width = 600 if (not defined $width);
     $height = 600 if (not defined $height);
 
@@ -1158,11 +1344,7 @@ sub help_open_faq {
     unless ($env{'user.adv'}) { return ''; }
     unless ($Apache::lonnet::perlvar{'FAQHost'}) { return ''; }
     $text = "" if (not defined $text);
-    $stayOnPage = 0 if (not defined $stayOnPage);
-    if ($env{'browser.interface'} eq 'textual' ||
-	$env{'environment.remote'} eq 'off' ) {
 	$stayOnPage=1;
-    }
     $width = 350 if (not defined $width);
     $height = 400 if (not defined $height);
 
@@ -1370,6 +1552,7 @@ sub resize_textarea_js {
     my $geometry = &viewport_geometry_js();
     return <<"RESIZE";
     <script type="text/javascript">
+// <![CDATA[
 $geometry
 
 function getX(element) {
@@ -1408,6 +1591,7 @@ function resize_textarea(textarea_id,bot
     }
     textarea.style.height=new_height+'px';
 }
+// ]]>
 </script>
 RESIZE
 
@@ -1528,10 +1712,13 @@ sub create_workbook {
     my $workbook  = Spreadsheet::WriteExcel->new('/home/httpd'.$filename);
     if (! defined($workbook)) {
         $r->log_error("Error creating excel spreadsheet $filename: $!");
-        $r->print('<p>'.&mt("Unable to create new Excel file.  ".
-                            "This error has been logged.  ".
-                            "Please alert your LON-CAPA administrator").
-                  '</p>');
+        $r->print(
+            '<p class="LC_error">'
+           .&mt('Problems occurred in creating the new Excel file.')
+           .' '.&mt('This error has been logged.')
+           .' '.&mt('Please alert your LON-CAPA administrator.')
+           .'</p>'
+        );
         return (undef);
     }
     #
@@ -1571,9 +1758,13 @@ sub create_text_file {
     $fh = Apache::File->new('>/home/httpd'.$filename);
     if (! defined($fh)) {
         $r->log_error("Couldn't open $filename for output $!");
-        $r->print(&mt('Problems occurred in creating the output file. '
-                     .'This error has been logged. '
-                     .'Please alert your LON-CAPA administrator.'));
+        $r->print(
+            '<p class="LC_error">'
+           .&mt('Problems occurred in creating the output file.')
+           .' '.&mt('This error has been logged.')
+           .' '.&mt('Please alert your LON-CAPA administrator.')
+           .'</p>'
+        );
     }
     return ($fh,$filename)
 }
@@ -1602,7 +1793,7 @@ sub domain_select {
 	return &multiple_select_form($name,$value,4,\%domains);
     } else {
 	$domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];
-	return &select_form($name,$value,%domains);
+	return &select_form($name,$value,\%domains);
     }
 }
 
@@ -1664,29 +1855,36 @@ sub multiple_select_form {
 
 =pod
 
-=item * &select_form($defdom,$name,%hash)
+=item * &select_form($defdom,$name,$hashref,$onchange)
 
 Returns a string containing a <select name='$name' size='1'> form to 
-allow a user to select options from a hash option_name => displayed text.  
+allow a user to select options from a ref to a hash containing:
+option_name => displayed text. An optional $onchange can include
+a javascript onchange item, e.g., onchange="this.form.submit();"  
+
 See lonrights.pm for an example invocation and use.
 
 =cut
 
 #-------------------------------------------
 sub select_form {
-    my ($def,$name,%hash) = @_;
-    my $selectform = "<select name=\"$name\" size=\"1\">\n";
+    my ($def,$name,$hashref,$onchange) = @_;
+    return unless (ref($hashref) eq 'HASH');
+    if ($onchange) {
+        $onchange = ' onchange="'.$onchange.'"';
+    }
+    my $selectform = "<select name=\"$name\" size=\"1\"$onchange>\n";
     my @keys;
-    if (exists($hash{'select_form_order'})) {
-	@keys=@{$hash{'select_form_order'}};
+    if (exists($hashref->{'select_form_order'})) {
+	@keys=@{$hashref->{'select_form_order'}};
     } else {
-	@keys=sort(keys(%hash));
+	@keys=sort(keys(%{$hashref}));
     }
     foreach my $key (@keys) {
         $selectform.=
 	    '<option value="'.&HTML::Entities::encode($key,'"<>&').'" '.
             ($key eq $def ? 'selected="selected" ' : '').
-                ">".&mt($hash{$key})."</option>\n";
+                ">".$hashref->{$key}."</option>\n";
     }
     $selectform.="</select>";
     return $selectform;
@@ -1704,9 +1902,9 @@ sub display_filter {
            &mt('Filter [_1]',
 	   &select_form($env{'form.displayfilter'},
 			'displayfilter',
-			('currentfolder' => 'Current folder/page',
+			{'currentfolder' => 'Current folder/page',
 			 'containing' => 'Containing phrase',
-			 'none' => 'None'))).
+			 'none' => 'None'})).
 			 '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>';
 }
 
@@ -1751,7 +1949,7 @@ sub select_level_form {
 
 =pod
 
-=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit)
+=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms)
 
 Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.  
@@ -1762,18 +1960,24 @@ 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 argument specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.
+
+The optional $incdoms is a reference to an array of domains which will be the only available options. 
 
 =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,$incdoms) = @_;
+    if ($onchange) {
+        $onchange = ' onchange="'.$onchange.'"';
+    }
+    my @domains;
+    if (ref($incdoms) eq 'ARRAY') {
+        @domains = sort {lc($a) cmp lc($b)} (@{$incdoms});
+    } else {
+        @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     }
-    my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     if ($includeempty) { @domains=('',@domains); }
     my $selectdomain = "<select name=\"$name\" size=\"1\"$onchange>\n";
     foreach my $dom (@domains) {
@@ -1831,7 +2035,7 @@ sub home_server_form_item {
     if ($numlib > 1) {
         $result .= '<select name="'.$name.'" />'."\n";
         if ($default) {
-            $result .= '<option value="default" selected>'.&mt('default').
+            $result .= '<option value="default" selected="selected">'.&mt('default').
                        '</option>'."\n";
         }
         foreach my $hostid (sort(keys(%servers))) {
@@ -2165,7 +2369,7 @@ sub authform_kerberos {
         }
     } else {
         if ($authnum == 1) {
-            $authtype = '<input type="hidden" name="login" value="krb">';
+            $authtype = '<input type="hidden" name="login" value="krb" />';
         }
     }
     if (!$can_assign{'krb4'} && !$can_assign{'krb5'}) {
@@ -2174,7 +2378,7 @@ sub authform_kerberos {
         if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {
-                    $authtype = '<input type="hidden" name="login" value="krb">';
+                    $authtype = '<input type="hidden" name="login" value="krb" />';
                 }
             }
         }
@@ -2251,7 +2455,7 @@ sub authform_internal{
         }
     } else {
         if ($authnum == 1) {
-            $authtype = '<input type="hidden" name="login" value="int">';
+            $authtype = '<input type="hidden" name="login" value="int" />';
         }
     }
     if (!$can_assign{'int'}) {
@@ -2260,7 +2464,7 @@ sub authform_internal{
         if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {
-                    $authtype = '<input type="hidden" name="login" value="int">';
+                    $authtype = '<input type="hidden" name="login" value="int" />';
                 }
             }
         }
@@ -2275,7 +2479,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;
 }
 
@@ -2306,7 +2510,7 @@ sub authform_local{
         }
     } else {
         if ($authnum == 1) {
-            $authtype = '<input type="hidden" name="login" value="loc">';
+            $authtype = '<input type="hidden" name="login" value="loc" />';
         }
     }
     if (!$can_assign{'loc'}) {
@@ -2315,7 +2519,7 @@ sub authform_local{
         if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {
-                    $authtype = '<input type="hidden" name="login" value="loc">';
+                    $authtype = '<input type="hidden" name="login" value="loc" />';
                 }
             }
         }
@@ -2357,7 +2561,7 @@ sub authform_filesystem{
         }
     } else {
         if ($authnum == 1) {
-            $authtype = '<input type="hidden" name="login" value="fsys">';
+            $authtype = '<input type="hidden" name="login" value="fsys" />';
         }
     }
     if (!$can_assign{'fsys'}) {
@@ -2366,7 +2570,7 @@ sub authform_filesystem{
         if (defined($in{'mode'})) {
             if ($in{'mode'} eq 'modifycourse') {
                 if ($authnum == 1) {
-                    $authtype = '<input type="hidden" name="login" value="fsys">';
+                    $authtype = '<input type="hidden" name="login" value="fsys" />';
                 }
             }
         }
@@ -2790,6 +2994,26 @@ sub screenname {
 }
 
 
+# ------------------------------------------------------------- Confirm Wrapper
+=pod
+
+=item confirmwrapper
+
+Wrap messages about completion of operation in box
+
+=cut
+
+sub confirmwrapper {
+    my ($message)=@_;
+    if ($message) {
+        return "\n".'<div class="LC_confirm_box">'."\n"
+               .$message."\n"
+               .'</div>'."\n";
+    } else {
+        return $message;
+    }
+}
+
 # ------------------------------------------------------------- Message Wrapper
 
 sub messagewrapper {
@@ -2800,13 +3024,15 @@ sub messagewrapper {
 	'&amp;subject='.&escape($subject).'&amp;text='.&escape($text).'" '.
         'title="'.&mt('Send message').'">'.$link.'</a>';
 }
+
 # --------------------------------------------------------------- Notes Wrapper
 
 sub noteswrapper {
     my ($link,$un,$do)=@_;
     return 
-"<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";
+"<a href='/adm/email?recordftf=retrieve&amp;recname=$un&amp;recdom=$do'>$link</a>";
 }
+
 # ------------------------------------------------------------- Aboutme Wrapper
 
 sub aboutmewrapper {
@@ -2814,20 +3040,21 @@ sub aboutmewrapper {
     if (!defined($username)  && !defined($domain)) {
         return;
     }
-    return '<a href="/adm/'.$domain.'/'.$username.'/aboutme"'.
+    return '<a href="/adm/'.$domain.'/'.$username.'/aboutme?forcestudent=1"'.
 	($target?' target="$target"':'').' title="'.&mt("View this user's personal information page").'">'.$link.'</a>';
 }
 
 # ------------------------------------------------------------ Syllabus Wrapper
 
-
 sub syllabuswrapper {
     my ($linktext,$coursedir,$domain)=@_;
     return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>};
 }
 
+# -----------------------------------------------------------------------------
+
 sub track_student_link {
-    my ($linktext,$sname,$sdom,$target,$start) = @_;
+    my ($linktext,$sname,$sdom,$target,$start,$only_body) = @_;
     my $link ="/adm/trackstudent?";
     my $title = 'View recent activity';
     if (defined($sname) && $sname !~ /^\s*$/ &&
@@ -2841,6 +3068,7 @@ sub track_student_link {
         $target = '';
     }
     if ($start) { $link.='&amp;start='.$start; }
+    if ($only_body) { $link .= '&amp;only_body=1'; }
     $title = &mt($title);
     $linktext = &mt($linktext);
     return qq{<a href="$link" title="$title" $target>$linktext</a>}.
@@ -3018,8 +3246,7 @@ sub filemimetype {
 sub filecategoryselect {
     my ($name,$value)=@_;
     return &select_form($value,$name,
-			'' => &mt('Any category'),
-			map { $_,$_ } sort(keys(%category_extensions)));
+                        {'' => &mt('Any category'), map { $_,$_ } sort(keys(%category_extensions))});
 }
 
 =pod
@@ -3184,12 +3411,22 @@ sub get_previous_attempt {
       }
       $prevattempts=&start_data_table().&start_data_table_header_row();
       $prevattempts.='<th>'.&mt('History').'</th>';
+      my %typeparts;
+      my $showsurv=&Apache::lonnet::allowed('vas',$env{'request.course.id'});
       foreach my $key (sort(keys(%lasthash))) {
 	my ($ign,@parts) = split(/\./,$key);
 	if ($#parts > 0) {
 	  my $data=$parts[-1];
 	  pop(@parts);
-	  $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.'&nbsp;</th>';
+          if ($data eq 'type') {
+              unless ($showsurv) {
+                  my $id = join(',',@parts);
+                  $typeparts{$ign.'.'.$id} = $lasthash{$key};
+              }
+              delete($lasthash{$key});
+          } else {
+	      $prevattempts.='<th>'.&mt('Part ').join('.',@parts).'<br />'.$data.'&nbsp;</th>';
+          }
 	} else {
 	  if ($#parts == 0) {
 	    $prevattempts.='<th>'.$parts[0].'</th>';
@@ -3199,23 +3436,98 @@ sub get_previous_attempt {
 	}
       }
       $prevattempts.=&end_data_table_header_row();
+      my %lasthidden;
       if ($getattempt eq '') {
 	for ($version=1;$version<=$returnhash{'version'};$version++) {
-	  $prevattempts.=&start_data_table_row().
-	      '<td>'.&mt('Transaction [_1]',$version).'</td>';
-	    foreach my $key (sort(keys(%lasthash))) {
-		my $value = &format_previous_attempt_value($key,
-							   $returnhash{$version.':'.$key});
-		$prevattempts.='<td>'.$value.'&nbsp;</td>';   
-	    }
-	  $prevattempts.=&end_data_table_row();
+            my @hidden;
+            if (%typeparts) {
+                foreach my $id (keys(%typeparts)) {
+                    if (($returnhash{$version.':'.$id.'.type'} eq 'anonsurvey') || ($returnhash{$version.':'.$id.'.type'} eq 'anonsurveycred')) {
+                        push(@hidden,$id);
+                        $lasthidden{$id} = 1;
+                    } elsif ($lasthidden{$id}) {
+                        if (exists($returnhash{$version.':'.$id.'.award'})) {
+                            delete($lasthidden{$id});
+                        }
+                    }
+                }
+            }
+            $prevattempts.=&start_data_table_row().
+                           '<td>'.&mt('Transaction [_1]',$version).'</td>';
+            if (@hidden) {
+                foreach my $key (sort(keys(%lasthash))) {
+                    my $hide;
+                    foreach my $id (@hidden) {
+                        if ($key =~ /^\Q$id\E/) {
+                            $hide = 1;
+                            last;
+                        }
+                    }
+                    if ($hide) {
+                        my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/);
+                        if (($data eq 'award') || ($data eq 'awarddetail')) {
+                            my $value = &format_previous_attempt_value($key,
+                                             $returnhash{$version.':'.$key});
+                            $prevattempts.='<td>'.$value.'&nbsp;</td>';
+                        } else {
+                            $prevattempts.='<td>&nbsp;</td>';
+                        }
+                    } else {
+                        if ($key =~ /\./) {
+                            my $value = &format_previous_attempt_value($key,
+                                              $returnhash{$version.':'.$key});
+                            $prevattempts.='<td>'.$value.'&nbsp;</td>';
+                        } else {
+                            $prevattempts.='<td>&nbsp;</td>';
+                        }
+                    }
+                }
+            } else {
+	        foreach my $key (sort(keys(%lasthash))) {
+		    my $value = &format_previous_attempt_value($key,
+			            $returnhash{$version.':'.$key});
+		    $prevattempts.='<td>'.$value.'&nbsp;</td>';
+	        }
+            }
+	    $prevattempts.=&end_data_table_row();
 	 }
       }
+      my @currhidden = keys(%lasthidden);
       $prevattempts.=&start_data_table_row().'<td>'.&mt('Current').'</td>';
       foreach my $key (sort(keys(%lasthash))) {
-	my $value = &format_previous_attempt_value($key,$lasthash{$key});
-	if ($key =~/$regexp$/ && (defined &$gradesub)) {$value = &$gradesub($value)}
-	$prevattempts.='<td>'.$value.'&nbsp;</td>';
+          if (%typeparts) {
+              my $hidden;
+              foreach my $id (@currhidden) {
+                  if ($key =~ /^\Q$id\E/) {
+                      $hidden = 1;
+                      last;
+                  }
+              }
+              if ($hidden) {
+                  my ($id,$data) = ($key =~ /^(.+)\.([^.]+)$/);
+                  if (($data eq 'award') || ($data eq 'awarddetail')) {
+                      my $value = &format_previous_attempt_value($key,$lasthash{$key});
+                      if ($key =~/$regexp$/ && (defined &$gradesub)) {
+                          $value = &$gradesub($value);
+                      }
+                      $prevattempts.='<td>'.$value.'&nbsp;</td>';
+                  } else {
+                      $prevattempts.='<td>&nbsp;</td>';
+                  }
+              } else {
+                  my $value = &format_previous_attempt_value($key,$lasthash{$key});
+                  if ($key =~/$regexp$/ && (defined &$gradesub)) {
+                      $value = &$gradesub($value);
+                  }
+                  $prevattempts.='<td>'.$value.'&nbsp;</td>';
+              }
+          } else {
+	      my $value = &format_previous_attempt_value($key,$lasthash{$key});
+	      if ($key =~/$regexp$/ && (defined &$gradesub)) {
+                  $value = &$gradesub($value);
+              }
+	      $prevattempts.='<td>'.$value.'&nbsp;</td>';
+          }
       }
       $prevattempts.= &end_data_table_row().&end_data_table();
     } else {
@@ -3388,10 +3700,13 @@ sub submlink {
     }
     if (!$symb) { $symb=&Apache::lonnet::symbread(); }
     $symb=&escape($symb);
-    if ($target) { $target="target=\"$target\""; }
-    return '<a href="/adm/grades?&command=submission&'.
-	'symb='.$symb.'&student='.$uname.
-	'&userdom='.$udom.'" '.$target.'>'.$text.'</a>';
+    if ($target) { $target=" target=\"$target\""; }
+    return
+        '<a href="/adm/grades?command=submission'.
+        '&amp;symb='.$symb.
+        '&amp;student='.$uname.
+        '&amp;userdom='.$udom.'"'.
+        $target.'>'.$text.'</a>';
 }
 ##############################################
 
@@ -3517,6 +3832,7 @@ sub findallcourses {
         if (!%roles) {
             %roles = (
                        cc => 1,
+                       co => 1,
                        in => 1,
                        ep => 1,
                        ta => 1,
@@ -3707,7 +4023,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);
@@ -3772,103 +4088,51 @@ 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 ($activity,$uname,$udom) = @_;
+  my %setters;
+
+  # check for active blocking
+  my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
+
+  my $blocked = $startblock && $endblock ? 1 : 0;
+
+  # caller just wants to know whether a block is active
+  if (!wantarray) { return $blocked; }
+
+  # build a link to a popup window containing the details
+  my $querystring  = "?activity=$activity";
+  # $uname and $udom decide whose portfolio the user is trying to look at
+     $querystring .= "&amp;udom=$udom"      if $udom;
+     $querystring .= "&amp;uname=$uname"    if $uname;
+
+  my $output .= <<'END_MYBLOCK';
+    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();
+    }
+END_MYBLOCK
+
+  $output = Apache::lonhtmlcommon::scripttag($output);
+  
+  my $popupUrl = "/adm/blockingstatus/$querystring";
+  my $text = mt('Communication Blocked');
+
+  $output .= <<"END_BLOCK";
+<div class='LC_comblock'>
+  <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring'
+  title='$text'>
+  <img class='LC_noBorder LC_middle' title='$text' src='/res/adm/pages/comblock.png' alt='$text'/></a>
+  <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring' 
+  title='$text'>$text</a>
+</div>
+
+END_BLOCK
+
+  return ($blocked, $output);
 }
 
 ###############################################
@@ -3946,7 +4210,7 @@ sub determinedomain {
     my $domain=shift;
     if (! $domain) {
         # Determine domain if we have not been given one
-        $domain = $Apache::lonnet::perlvar{'lonDefDomain'};
+        $domain = &Apache::lonnet::default_login_domain();
         if ($env{'user.domain'}) { $domain=$env{'user.domain'}; }
         if ($env{'request.role.domain'}) { 
             $domain=$env{'request.role.domain'}; 
@@ -3969,16 +4233,39 @@ sub get_domainconf {
     if (defined($cached)) { return %{$result}; }
 
     my %domconfig = &Apache::lonnet::get_dom('configuration',
-					     ['login','rolecolors'],$udom);
+					     ['login','rolecolors','autoenroll'],$udom);
     my (%designhash,%legacy);
     if (keys(%domconfig) > 0) {
         if (ref($domconfig{'login'}) eq 'HASH') {
             if (keys(%{$domconfig{'login'}})) {
                 foreach my $key (keys(%{$domconfig{'login'}})) {
                     if (ref($domconfig{'login'}{$key}) eq 'HASH') {
-                        foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
-                            $designhash{$udom.'.login.'.$key.'_'.$img} = 
-                                $domconfig{'login'}{$key}{$img};
+                        if ($key eq 'loginvia') {
+                            if (ref($domconfig{'login'}{'loginvia'}) eq 'HASH') {
+                                my @ids = &Apache::lonnet::current_machine_ids();
+                                foreach my $hostname (@ids) {
+                                    if (ref($domconfig{'login'}{'loginvia'}{$hostname}) eq 'HASH') {
+                                        if ($domconfig{'login'}{'loginvia'}{$hostname}{'server'}) {
+                                            my $server = $domconfig{'login'}{'loginvia'}{$hostname}{'server'};
+                                            $designhash{$udom.'.login.loginvia'} = $server;
+                                            if ($domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'} eq 'custom') {
+
+                                                $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'custompath'};
+                                            } else {
+                                                 $designhash{$udom.'.login.loginvia_'.$hostname} = $server.':'.$domconfig{'login'}{'loginvia'}{$hostname}{'serverpath'};
+                                            }
+                                            if ($domconfig{'login'}{'loginvia'}{$hostname}{'exempt'}) {
+                                                $designhash{$udom.'.login.loginvia_exempt_'.$hostname} = $domconfig{'login'}{'loginvia'}{$hostname}{'exempt'};
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        } else {
+                            foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
+                                $designhash{$udom.'.login.'.$key.'_'.$img} = 
+                                    $domconfig{'login'}{$key}{$img};
+                            }
                         }
                     } else {
                         $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};
@@ -4005,6 +4292,11 @@ sub get_domainconf {
         } else {
             $legacy{'rolecolors'} = 1;
         }
+        if (ref($domconfig{'autoenroll'}) eq 'HASH') {
+            if ($domconfig{'autoenroll'}{'co-owners'}) {
+                $designhash{$udom.'.autoassign.co-owners'}=$domconfig{'autoenroll'}{'co-owners'};
+            }
+        }
         if (keys(%legacy) > 0) {
             my %legacyhash = &get_legacy_domconf($udom);
             foreach my $item (keys(%legacyhash)) {
@@ -4097,41 +4389,132 @@ 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;
+    }
+
+    my $output =
+         '<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">' #FIXME lonpubdir: target="_parent"
+        .&Apache::lonhtmlcommon::crumbs($uname.'/'.$parentpath,'_top','/priv',undef,undef);
+
+    if ($lastitem) {
+        $output .=
+             '<span class="LC_filename">'
+            .$lastitem
+            .'</span>';
+    }
+    $output .=
+         '<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>';
+
+    return $output;
+}
+
 ###############################################
 ###############################################
 
@@ -4164,20 +4547,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
-
 =item * $args, optional argument valid values are
             no_auto_mt_title -> prevents &mt()ing the title arg
             inherit_jsmath -> when creating popup window in a page,
@@ -4194,9 +4568,14 @@ 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,$args)=@_;
 
+    my $public;
+    if ((($env{'user.name'} eq 'public') && ($env{'user.domain'} eq 'public'))
+        || ($env{'user.name'} eq '') && ($env{'user.domain'} eq '')) {
+        $public = 1;
+    }
     if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); }
 
     $function = &get_users_function() if (!$function);
@@ -4204,7 +4583,7 @@ sub bodytag {
     my $font =   &designparm($function.'.font',$domain);
     my $pgbg   = $bgcolor || &designparm($function.'.pgbg',$domain);
 
-    my %design = ( 'style'   => 'margin-top: 0px',
+    my %design = ( 'style'   => 'margin-top: 0',
 		   'bgcolor' => $pgbg,
 		   'text'    => $font,
                    'alink'   => &designparm($function.'.alink',$domain),
@@ -4223,14 +4602,15 @@ sub bodytag {
         if ($env{'request.role'} !~ /^cr/) {
             $role = &Apache::lonnet::plaintext($role,&course_type());
         }
+        if ($env{'request.course.sec'}) {
+            $role .= ('&nbsp;'x2).'-&nbsp;'.&mt('section:').'&nbsp;'.$env{'request.course.sec'};
+        }   
 	$realm = $env{'course.'.$env{'request.course.id'}.'.description'};
     } else {
         $role = &Apache::lonnet::plaintext($role);
     }
 
     if (!$realm) { $realm='&nbsp;'; }
-# Set messages
-    my $messages=&domainlogo($domain);
 
     my $extra_body_attr = &make_attr_string($forcereg,\%design);
 
@@ -4240,42 +4620,16 @@ sub bodytag {
 
     if ($bodyonly) {
         return $bodytag;
-    } elsif ($env{'browser.interface'} eq 'textual') {
-# Accessibility
-          
-	$bodytag.=&Apache::lonmenu::menubuttons($forcereg,$forcereg);
-	if (!$notitle) {
-	    $bodytag.='<h1>LON-CAPA: '.$title.'</h1>';
-	}
-	return $bodytag;
-    }
+    } 
 
     my $name = &plainname($env{'user.name'},$env{'user.domain'});
-    if ($env{'user.name'} eq 'public' && $env{'user.domain'} eq 'public') {
+    if ($public) {
 	undef($role);
     } else {
 	$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 = '';
@@ -4283,93 +4637,75 @@ ENDROLE
                         $env{'course.'.$env{'request.course.id'}.
                                  '.domain'}.'/'})) {
         my $cid = $env{'request.course.id'};
-        $dc_info.= $cid.' '.$env{'course.'.$cid.'.internal.coursecode'};
+        $dc_info = $cid.' '.$env{'course.'.$cid.'.internal.coursecode'};
         $dc_info =~ s/\s+$//;
-        $dc_info = '('.$dc_info.')';
     }
 
-    if (($env{'environment.remote'} eq 'off') || ($args->{'suppress_header_logos'})) {
-        # No Remote
-	if ($env{'request.state'} eq 'construct') {
-	    $forcereg=1;
-	}
+    $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;
+    &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
 
-	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) {
-	    $bodytag .= $titletable;
-	} else {
-	    if ($env{'request.state'} eq 'construct') {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg,
-							  $titletable);
-            } else {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg).
-		    $titletable;
+        if ($no_nav_bar || $env{'form.inhibitmenu'} eq 'yes') { 
+            return $bodytag; 
+        } 
+
+        if ($env{'request.state'} eq 'construct') { $forcereg=1; }
+
+        #    if ($env{'request.state'} eq 'construct') {
+        #        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
+        #    }
+
+
+
+        if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
+             if ($dc_info) {
+                 $dc_info = qq|<span class="LC_cusr_subheading">$dc_info</span>|;
+             }
+             $bodytag .= qq|<div id="LC_nav_bar">$name $role<br />
+                <em>$realm</em> $dc_info</div>|;
+            return $bodytag;
+        }
+
+        unless ($env{'request.symb'} =~ m/\.page___\d+___/) {
+            $bodytag .= qq|<div id="LC_nav_bar">$name $role</div>|;
+        }
+
+        $bodytag .= Apache::lonhtmlcommon::scripttag(
+            Apache::lonmenu::utilityfunctions(), 'start');
+
+        $bodytag .= Apache::lonmenu::primary_menu();
+
+        if ($dc_info) {
+            $dc_info = &dc_courseid_toggle($dc_info);
+        }
+        $bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|;
+
+        #don't show menus for public users
+        if (!$public){
+            $bodytag .= Apache::lonmenu::secondary_menu();
+            $bodytag .= Apache::lonmenu::serverform();
+            $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
+            if ($env{'request.state'} eq 'construct') {
+                $bodytag .= &Apache::lonmenu::innerregister($forcereg,
+                                $args->{'bread_crumbs'});
+            } elsif ($forcereg) { 
+                $bodytag .= &Apache::lonmenu::innerregister($forcereg);
             }
+        }else{
+            # this is to seperate menu from content when there's no secondary
+            # menu. Especially needed for public accessible ressources.
+            $bodytag .= '<hr style="clear:both" />';
+            $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); 
         }
-        return $bodytag;
-    }
 
-#
-# Top frame rendering, Remote is up
-#
+        return $bodytag;
+}
 
-    my $imgsrc = $img;
-    if ($img =~ /^\/adm/) {
-        $imgsrc = &lonhttpdurl($img);
-    }
-    my $upperleft='<img src="'.$imgsrc.'" alt="'.$function.'" />';
-
-    # 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>');
-    #
-    if ($notitle) {
-	return $bodytag;
-    }
-    return(<<ENDBODY);
-$bodytag
-<table id="LC_title_bar" class="LC_with_remote">
-<tr><td class="LC_title_bar_role_logo">$upperleft</td>
-    <td class="LC_title_bar_domain_logo">$messages&nbsp;</td>
-</tr>
-<tr><td>$titleinfo $dc_info $menu</td>
-$roleinfo
-</tr>
-</table>
-ENDBODY
+sub dc_courseid_toggle {
+    my ($dc_info) = @_;
+    return ' <span id="dccidtext" class="LC_cusr_subheading">'.
+           '<a href="javascript:showCourseID();">'.
+           &mt('(More ...)').'</a></span>'.
+           '<div id="dccid" class="LC_dccid">'.$dc_info.'</div>';
 }
 
 sub make_attr_string {
@@ -4393,31 +4729,8 @@ sub make_attr_string {
 		delete($attr_ref->{$key});
 	    }
 	}
-	$attr_ref->{'onload'}  =
-	    &Apache::lonmenu::loadevents().  $on_load;
-	$attr_ref->{'onunload'}=
-	    &Apache::lonmenu::unloadevents().$on_unload;
-    }
-
-# Accessibility font enhance
-    if ($env{'browser.fontenhance'} eq 'on') {
-	my $style;
-	foreach my $key (keys(%{$attr_ref})) {
-	    if (lc($key) eq 'style') {
-		$style.=$attr_ref->{$key}.';';
-		delete($attr_ref->{$key});
-	    }
-	}
-	$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'});
+	$attr_ref->{'onload'}  = $on_load;
+	$attr_ref->{'onunload'}= $on_unload;
     }
 
     my $attr_string;
@@ -4480,6 +4793,8 @@ sub standard_css {
     my $img    = &designparm($function.'.img',   $domain);
     my $tabbg  = &designparm($function.'.tabbg', $domain);
     my $font   = &designparm($function.'.font',  $domain);
+    my $fontmenu = &designparm($function.'.fontmenu', $domain);
+#second colour for later usage
     my $sidebg = &designparm($function.'.sidebg',$domain);
     my $pgbg_or_bgcolor =
 	         $bgcolor ||
@@ -4489,15 +4804,11 @@ sub standard_css {
     my $vlink  = &designparm($function.'.vlink', $domain);
     my $link   = &designparm($function.'.link',  $domain);
 
-    my $loginbg = &designparm('login.sidebg',$domain);
-    my $bgcol = &designparm('login.bgcol',$domain);
-    my $textcol = &designparm('login.textcol',$domain);
-
     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';
@@ -4510,48 +4821,70 @@ sub standard_css {
     my $mail_other_hover     = '#669999';
     my $table_header         = '#DDDDDD';
     my $feedback_link_bg     = '#BBBBBB';
-    my $lg_border_color	     = '#C8C8C8';
+    my $lg_border_color      = '#C8C8C8';
+    my $button_hover         = '#BF2317';
 
     my $border = ($env{'browser.type'} eq 'explorer' ||
-		  $env{'browser.type'} eq 'safari'     ) ? '0px 2px 0px 2px'
-	                                                 : '0px 3px 0px 4px';
+      $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'
+                                             : '0 3px 0 4px';
 
 
     return <<END;
-body{
-     font-family: $sans;
-     line-height:130%;
-     font-size:0.83em;
-     color:$font;
-  }
-a:link, a:visited { font-size:100%; }
 
-a:focus { color: red; background: yellow }
-table.thinborder,
-table.thinborder tr th {
-  border-style: solid;
-  border-width: 1px;
-  border-color: $lg_border_color;
-  background: $tabbg;
+/* needed for iframe to allow 100% height in FF */
+body, html { 
+    margin: 0;
+    padding: 0 0.5%;
+    height: 99%; /* to avoid scrollbars */
 }
-table.thinborder tr td {
-  border-style: solid;
-  border-width: 1px;
-  border-color: $lg_border_color;
+
+body {
+  font-family: $sans;
+  line-height:130%;
+  font-size:0.83em;
+  color:$font;
 }
 
-form, .inline { display: inline; }
+a:focus,
+a:focus img {
+  color: red;
+  background: yellow;
+}
+
+form, .inline {
+  display: inline;
+}
 
-.LC_right {text-align:right;}
-.LC_middle {vertical-align:middle;}
+.LC_right {
+  text-align:right;
+}
 
-/* just for tests */
-.LC_400Box {width:400px; }
-/* end */
+.LC_middle {
+  vertical-align:middle;
+}
+
+.LC_400Box {
+  width:400px;
+}
+
+.LC_iframecontainer {
+    width: 98%;
+    margin: 0;
+    position: fixed;
+    top: 8.5em;
+    bottom: 0;
+}
+
+.LC_iframecontainer iframe{
+    border: none;
+    width: 100%;
+    height: 100%;
+}
 
 .LC_filename {
   font-family: $mono;
   white-space:pre;
+  font-size: 120%;
 }
 
 .LC_fileicon {
@@ -4566,6 +4899,7 @@ form, .inline { display: inline; }
   color: red;
   font-size: larger;
 }
+
 .LC_warning,
 .LC_diff_removed {
   color: red;
@@ -4576,18 +4910,24 @@ form, .inline { display: inline; }
 .LC_diff_added {
   color: green;
 }
-.LC_unknown {
-  color: yellow;
+
+div.LC_confirm_box {
+  background-color: #FAFAFA;
+  border: 1px solid $lg_border_color;
+  margin-right: 0;
+  padding: 5px;
+}
+
+div.LC_confirm_box .LC_error img,
+div.LC_confirm_box .LC_success img {
+  vertical-align: middle;
 }
 
 .LC_icon {
   border: none;
+  vertical-align: middle;
 }
 
-.LC_indexer_icon {
-  border: 0px;
-  height: 22px;
-}
 .LC_docs_spacer {
   width: 25px;
   height: 1px;
@@ -4598,267 +4938,295 @@ form, .inline { display: inline; }
   color: #999999;
 }
 
+.LC_discussion {
+  background: $tabbg;
+  border: 1px solid black;
+  margin: 2px;
+}
+
+.LC_disc_action_links_bar {
+  background: $tabbg;
+  border: none;
+  margin: 4px;
+}
+
+.LC_disc_action_left {
+  text-align: left;
+}
+
+.LC_disc_action_right {
+  text-align: right;
+}
+
+.LC_disc_new_item {
+  background: white;
+  border: 2px solid red;
+  margin: 2px;
+}
+
+.LC_disc_old_item {
+  background: white;
+  border: 1px solid black;
+  margin: 2px;
+}
+
 table.LC_pastsubmission {
   border: 1px solid black;
   margin: 2px;
 }
 
-table#LC_top_nav, table#LC_menubuttons,table#LC_nav_location {
+table#LC_menubuttons {
   width: 100%;
   background: $pgbg;
   border: 2px;
   border-collapse: separate;
-  padding: 0px;
+  padding: 0;
+}
+
+table#LC_title_bar a {
+  color: $fontmenu;
 }
 
-table#LC_title_bar, table.LC_breadcrumbs,
+table#LC_title_bar {
+  clear: both;
+  display: none;
+}
+
+table#LC_title_bar,
+table.LC_breadcrumbs, /* obsolete? */
 table#LC_title_bar.LC_with_remote {
   width: 100%;
   border-color: $pgbg;
   border-style: solid;
   border-width: $border;
-
-  background: $pgbg;
-  font-family: $sans;
-  border-collapse: collapse;
-  padding: 0px;
-}
-table.LC_docs_path {
-  width: 100%;
-  border: 0;
   background: $pgbg;
-  font-family: $sans;
+  color: $fontmenu;
   border-collapse: collapse;
-  padding: 0px;
+  padding: 0;
+  margin: 0;
 }
 
-table#LC_title_bar td {
-  background: $tabbg;
+ul.LC_breadcrumb_tools_outerlist {
+    margin: 0;
+    padding: 0;
+    position: relative;
+    list-style: none;
 }
-table#LC_title_bar .LC_title_bar_who {
-  background: $tabbg;
-  color: $font;
-  font: small $sans;
-  text-align: right;
-  margin: 0px;
-}
-table#LC_title_bar .LC_title_bar_name {
-  margin: 0px;
-}
-table#LC_title_bar .LC_title_bar_role {
-  margin: 0px;
-}
-table#LC_title_bar .LC_title_bar_realm {
-  margin: 0px;
-}
-span.LC_metadata {
-    font-family: $sans;
-}
-table#LC_title_bar td.LC_title_bar_domain_logo {
-  background: $sidebg;
-  text-align: right;
-  padding: 0px;
-}
-table#LC_title_bar td.LC_title_bar_role_logo {
-  background: $sidebg;
-  padding: 0px;
+ul.LC_breadcrumb_tools_outerlist li {
+    display: inline;
 }
 
-table#LC_menubuttons img{
-  border: 0px;
-}
-table#LC_top_nav td {
-  background: $tabbg;
-  border: 0px;
-  font-size: small;
-  vertical-align:top;
-  padding:2px 5px 2px 5px;
+.LC_breadcrumb_tools_navigation {
+    padding: 0;
+    margin: 0;
+    float: left;
 }
-table#LC_top_nav td a, div#LC_top_nav a {
-  color: $font;
-  font-family: $sans;
+.LC_breadcrumb_tools_tools {
+    padding: 0;
+    margin: 0;
+    float: right;
 }
-table#LC_top_nav td.LC_top_nav_logo {
+
+table#LC_title_bar td {
   background: $tabbg;
-  text-align: left;
-  white-space: nowrap;
-  width: 31px;
-}
-table#LC_top_nav td.LC_top_nav_logo img {
-  border: 0px;
-  vertical-align: bottom;
-}
-table#LC_top_nav td.LC_top_nav_exit,
-table#LC_top_nav td.LC_top_nav_help {
-  width: 2.0em;
 }
-table#LC_top_nav td.LC_top_nav_login {
-  width: 4.0em;
-  text-align: center;
+
+table#LC_menubuttons img {
+  border: none;
 }
-table.LC_breadcrumbs td, table.LC_docs_path td  {
-  background: $tabbg;
-  color: $font;
-  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: $font;
-  font-family: $sans;
-  font-size: larger;
-  text-align: right;
+.LC_breadcrumbs_component img {
+  vertical-align: middle;
 }
+
 td.LC_table_cell_checkbox {
   text-align: center;
 }
-table#LC_mainmenu td.LC_mainmenu_column {
-    vertical-align: top;
+
+.LC_fontsize_small {
+  font-size: 70%;
 }
 
-.LC_fontsize_small
-{
- font-size: 70%;
+#LC_breadcrumbs {
+  clear:both;
+  background: $sidebg;
+  border-bottom: 1px solid $lg_border_color;
+  line-height: 2.5em;
+  overflow: hidden;
+  margin: 0;
+  padding: 0;
 }
 
-.LC_fontsize_medium
-{
- font-size: 85%;
+#LC_head_subbox {
+  clear:both;
+  background: #F8F8F8; /* $sidebg; */
+  border: 1px solid $sidebg;
+  margin: 0 0 10px 0;      
+  padding: 3px;
 }
 
-.LC_fontsize_large
-{
- font-size: 120%;
+.LC_fontsize_medium {
+  font-size: 85%;
+}
+
+.LC_fontsize_large {
+  font-size: 120%;
 }
 
 .LC_menubuttons_inline_text {
   color: $font;
-  font-family: $sans;
   font-size: 90%;
   padding-left:3px;
 }
 
+.LC_menubuttons_inline_text img{
+  vertical-align: middle;
+}
+
+li.LC_menubuttons_inline_text img,a {
+  cursor:pointer;
+}
+
 .LC_menubuttons_link {
   text-decoration: none;
 }
-/*2008--9-5: new menu style sheet.Changed category*/
+
 .LC_menubuttons_category {
   color: $font;
   background: $pgbg;
-  font-family: $sans;
   font-size: larger;
   font-weight: bold;
 }
 
 td.LC_menubuttons_text {
- 	color: $font;
+  color: $font;
 }
 
-
-
 .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: 0px;
-  border-collapse: collapse;
-  border-spacing: 0px;
-}
-table.LC_data_table, table.LC_mail_list {
+table.LC_data_table {
   border: 1px solid #000000;
   border-collapse: separate;
   border-spacing: 1px;
   background: $pgbg;
 }
+
 .LC_data_table_dense {
   font-size: small;
 }
+
 table.LC_nested_outer {
   border: 1px solid #000000;
   border-collapse: collapse;
-  border-spacing: 0px;
+  border-spacing: 0;
   width: 100%;
 }
+
+table.LC_innerpickbox,
 table.LC_nested {
-  border: 0px;
+  border: none;
   border-collapse: collapse;
-  border-spacing: 0px;
+  border-spacing: 0;
   width: 100%;
 }
-table.LC_data_table tr th, table.LC_calendar tr th, table.LC_mail_list tr th,
-table.LC_prior_tries tr th {
+
+.ui-accordion,
+.ui-accordion table.LC_data_table,
+.ui-accordion table.LC_nested_outer{
+  border: 0px;
+  border-spacing: 0px;
+  margin: 3px;
+}
+
+table.LC_data_table tr th,
+table.LC_calendar 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;
   text-align: left;
 }
-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_data_table tr.LC_odd_row > td {
   background-color: $data_table_light;
   padding: 2px;
+  vertical-align: top;
 }
-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_odd_row {
+  background-color: $data_table_light;
+  vertical-align: top;
+}
+
+table.LC_data_table tr.LC_even_row > td {
   background-color: $data_table_dark;
   padding: 2px;
+  vertical-align: top;
+}
+
+table.LC_pick_box tr > td.LC_even_row {
+  background-color: $data_table_dark;
+  vertical-align: top;
 }
+
 table.LC_data_table tr.LC_data_table_highlight td {
   background-color: $data_table_darker;
 }
+
 table.LC_data_table tr td.LC_leftcol_header {
   background-color: $data_table_head;
   font-weight: bold;
 }
+
 table.LC_data_table tr.LC_empty_row td,
 table.LC_nested tr.LC_empty_row td {
-  background-color: #FFFFFF;
   font-weight: bold;
   font-style: italic;
   text-align: center;
   padding: 8px;
 }
+
+table.LC_data_table tr.LC_empty_row td {
+  background-color: $sidebg;
+}
+
+table.LC_nested tr.LC_empty_row td {
+  background-color: #FFFFFF;
+}
+
+table.LC_caption {
+}
+
 table.LC_nested tr.LC_empty_row td {
   padding: 4ex
 }
+
 table.LC_nested_outer tr th {
   font-weight: bold;
+  color:$fontmenu;
   background-color: $data_table_head;
   font-size: small;
   border-bottom: 1px solid #000000;
 }
+
 table.LC_nested_outer tr td.LC_subheader {
   background-color: $data_table_head;
   font-weight: bold;
@@ -4866,20 +5234,24 @@ table.LC_nested_outer tr td.LC_subheader
   border-bottom: 1px solid #000000;
   text-align: right;
 }
+
 table.LC_nested tr.LC_info_row td {
   background-color: #CCCCCC;
   font-weight: bold;
   font-size: small;
   text-align: center;
 }
+
 table.LC_nested tr.LC_info_row td.LC_left_item,
 table.LC_nested_outer tr th.LC_left_item {
   text-align: left;
 }
+
 table.LC_nested td {
   background-color: #FFFFFF;
   font-size: small;
 }
+
 table.LC_nested_outer tr th.LC_right_item,
 table.LC_nested tr.LC_info_row td.LC_right_item,
 table.LC_nested tr.LC_odd_row td.LC_right_item,
@@ -4887,6 +5259,22 @@ table.LC_nested tr td.LC_right_item {
   text-align: right;
 }
 
+.ui-accordion table.LC_nested tr.LC_odd_row td.LC_left_item,
+.ui-accordion table.LC_nested tr.LC_even_row td.LC_left_item {
+  text-align: right;
+  width: 40%;
+  padding-right:10px;
+  vertical-align: top;
+  padding: 5px;
+}
+
+.ui-accordion table.LC_nested tr.LC_odd_row td.LC_right_item,
+.ui-accordion table.LC_nested tr.LC_even_row td.LC_right_item {
+  text-align: left;
+  width: 60%;
+  padding: 2px 4px;
+}
+
 table.LC_nested tr.LC_odd_row td {
   background-color: #EEEEEE;
 }
@@ -4907,85 +5295,110 @@ table.LC_createuser tr.LC_info_row td  {
 table.LC_calendar {
   border: 1px solid #000000;
   border-collapse: collapse;
+  width: 98%;
 }
+
 table.LC_calendar_pickdate {
   font-size: xx-small;
 }
+
 table.LC_calendar tr td {
   border: 1px solid #000000;
   vertical-align: top;
+  width: 14%;
 }
+
 table.LC_calendar tr td.LC_calendar_day_empty {
   background-color: $data_table_dark;
 }
+
 table.LC_calendar tr td.LC_calendar_day_current {
   background-color: $data_table_highlight;
 }
-table.LC_mail_list tr.LC_mail_new {
+
+table.LC_data_table tr td.LC_mail_new {
   background-color: $mail_new;
 }
-table.LC_mail_list tr.LC_mail_new:hover {
+
+table.LC_data_table tr.LC_mail_new:hover {
   background-color: $mail_new_hover;
 }
-table.LC_mail_list tr.LC_mail_even{
-}
-table.LC_mail_list tr.LC_mail_odd{
-}
-table.LC_mail_list tr.LC_mail_read {
+
+table.LC_data_table tr td.LC_mail_read {
   background-color: $mail_read;
 }
-table.LC_mail_list tr.LC_mail_read:hover {
+
+/*
+table.LC_data_table tr.LC_mail_read:hover {
   background-color: $mail_read_hover;
 }
-table.LC_mail_list tr.LC_mail_replied {
+*/
+
+table.LC_data_table tr td.LC_mail_replied {
   background-color: $mail_replied;
 }
-table.LC_mail_list tr.LC_mail_replied:hover {
+
+/*
+table.LC_data_table tr.LC_mail_replied:hover {
   background-color: $mail_replied_hover;
 }
-table.LC_mail_list tr.LC_mail_other {
+*/
+
+table.LC_data_table tr td.LC_mail_other {
   background-color: $mail_other;
 }
-table.LC_mail_list tr.LC_mail_other:hover {
+
+/*
+table.LC_data_table tr.LC_mail_other:hover {
   background-color: $mail_other_hover;
 }
+*/
 
 table.LC_data_table tr > td.LC_browser_file,
 table.LC_data_table tr > td.LC_browser_file_published {
-  background: #CCFF88;
+  background: #AAEE77;
 }
+
 table.LC_data_table tr > td.LC_browser_file_locked,
 table.LC_data_table tr > td.LC_browser_file_unpublished {
   background: #FFAA99;
 }
+
 table.LC_data_table tr > td.LC_browser_file_obsolete {
-  background: #AAAAAA;
+  background: #888888;
 }
+
 table.LC_data_table tr > td.LC_browser_file_modified,
 table.LC_data_table tr > td.LC_browser_file_metamodified {
-  background: #FFFF77;
+  background: #F8F866;
 }
+
 table.LC_data_table tr.LC_browser_folder > td {
-  background: #CCCCFF;
+  background: #E0E8FF;
 }
 
 table.LC_data_table tr > td.LC_roles_is {
-/*  background: #77FF77; */
+  /* background: #77FF77; */
 }
+
 table.LC_data_table tr > td.LC_roles_future {
-  background: #FFFF77;
+  border-right: 8px solid #FFFF77;
 }
+
 table.LC_data_table tr > td.LC_roles_will {
-  background: #FFAA77;
+  border-right: 8px solid #FFAA77;
 }
+
 table.LC_data_table tr > td.LC_roles_expired {
-  background: #FF7777;
+  border-right: 8px solid #FF7777;
 }
+
 table.LC_data_table tr > td.LC_roles_will_not {
-  background: #AAFF77;
+  border-right: 8px solid #AAFF77;
 }
+
 table.LC_data_table tr > td.LC_roles_selected {
-  background: #11CC55;
+  border-right: 8px solid #11CC55;
 }
 
 span.LC_current_location {
@@ -4995,60 +5408,71 @@ span.LC_current_location {
 
 span.LC_parm_menu_item {
   font-size: larger;
-  font-family: $sans;
 }
+
 span.LC_parm_scope_all {
   color: red;
 }
+
 span.LC_parm_scope_folder {
   color: green;
 }
+
 span.LC_parm_scope_resource {
   color: orange;
 }
+
 span.LC_parm_part {
   color: blue;
 }
-span.LC_parm_folder, span.LC_parm_symb {
+
+span.LC_parm_folder,
+span.LC_parm_symb {
   font-size: x-small;
   font-family: $mono;
   color: #AAAAAA;
 }
 
-td.LC_parm_overview_level_menu, td.LC_parm_overview_map_menu,
-td.LC_parm_overview_parm_selectors,td.LC_parm_overview_restrictions  {
+td.LC_parm_overview_level_menu,
+td.LC_parm_overview_map_menu,
+td.LC_parm_overview_parm_selectors,
+td.LC_parm_overview_restrictions  {
   border: 1px solid black;
   border-collapse: collapse;
 }
+
 table.LC_parm_overview_restrictions td {
   border-width: 1px 4px 1px 4px;
   border-style: solid;
   border-color: $pgbg;
   text-align: center;
 }
+
 table.LC_parm_overview_restrictions th {
   background: $tabbg;
   border-width: 1px 4px 1px 4px;
   border-style: solid;
   border-color: $pgbg;
 }
+
 table#LC_helpmenu {
-  border: 0px;
+  border: none;
   height: 55px;
-  border-spacing: 0px;
+  border-spacing: 0;
 }
 
 table#LC_helpmenu fieldset legend {
   font-size: larger;
-  font-weight: bold;
 }
+
 table#LC_helpmenu_links {
   width: 100%;
   border: 1px solid black;
   background: $pgbg;
-  padding: 0px;
+  padding: 0;
   border-spacing: 1px;
 }
+
 table#LC_helpmenu_links tr td {
   padding: 1px;
   background: $tabbg;
@@ -5056,11 +5480,13 @@ table#LC_helpmenu_links tr td {
   font-weight: bold;
 }
 
-table#LC_helpmenu_links a:link, table#LC_helpmenu_links a:visited,
+table#LC_helpmenu_links a:link,
+table#LC_helpmenu_links a:visited,
 table#LC_helpmenu_links a:active {
   text-decoration: none;
   color: $font;
 }
+
 table#LC_helpmenu_links a:hover {
   text-decoration: underline;
   color: $vlink;
@@ -5070,172 +5496,173 @@ table#LC_helpmenu_links a:hover {
   border: 1px solid #339933;
   margin: -1px;
 }
+
 .LC_chrt_popup_up {
   border: 1px solid yellow;
   margin: -1px;
 }
+
 .LC_chrt_popup {
   border: 1px solid #8888FF;
   background: #CCCCFF;
 }
+
 table.LC_pick_box {
   border-collapse: separate;
   background: white;
   border: 1px solid black;
   border-spacing: 1px;
 }
+
 table.LC_pick_box td.LC_pick_box_title {
-  background: $tabbg;
+  background: $sidebg;
   font-weight: bold;
-  text-align: right;
+  text-align: left;
   vertical-align: top;
   width: 184px;
   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;
 }
+
 table.LC_pick_box td.LC_pick_box_select {
   text-align: left;
   padding: 8px;
 }
+
 table.LC_pick_box td.LC_pick_box_separator {
-  padding: 0px;
+  padding: 0;
   height: 1px;
   background: black;
 }
+
 table.LC_pick_box td.LC_pick_box_submit {
   text-align: right;
 }
+
 table.LC_pick_box td.LC_evenrow_value {
   text-align: left;
   padding: 8px;
   background-color: $data_table_light;
 }
+
 table.LC_pick_box td.LC_oddrow_value {
   text-align: left;
   padding: 8px;
   background-color: $data_table_light;
 }
-table.LC_helpform_receipt {
-  width: 620px;
-  border-collapse: separate;
-  background: white;
-  border: 1px solid black;
-  border-spacing: 1px;
-}
-table.LC_helpform_receipt td.LC_pick_box_title {
-  background: $tabbg;
-  font-weight: bold;
-  text-align: right;
-  width: 184px;
-  padding: 8px;
-}
-table.LC_helpform_receipt td.LC_evenrow_value {
-  text-align: left;
-  padding: 8px;
-  background-color: $data_table_light;
-}
-table.LC_helpform_receipt td.LC_oddrow_value {
-  text-align: left;
-  padding: 8px;
-  background-color: $data_table_light;
-}
-table.LC_helpform_receipt td.LC_pick_box_separator {
-  padding: 0px;
-  height: 1px;
-  background: black;
-}
+
 span.LC_helpform_receipt_cat {
   font-weight: bold;
 }
+
 table.LC_group_priv_box {
   background: white;
   border: 1px solid black;
   border-spacing: 1px;
 }
+
 table.LC_group_priv_box td.LC_pick_box_title {
   background: $tabbg;
   font-weight: bold;
   text-align: right;
   width: 184px;
 }
+
 table.LC_group_priv_box td.LC_groups_fixed {
   background: $data_table_light;
   text-align: center;
 }
+
 table.LC_group_priv_box td.LC_groups_optional {
   background: $data_table_dark;
   text-align: center;
 }
+
 table.LC_group_priv_box td.LC_groups_functionality {
   background: $data_table_darker;
   text-align: center;
   font-weight: bold;
 }
+
 table.LC_group_priv td {
   text-align: left;
-  padding: 0px;
+  padding: 0;
 }
 
-table.LC_notify_front_page {
-  background: white;
-  border: 1px solid black;
-  padding: 8px;
-}
-table.LC_notify_front_page td {
-  padding: 8px;
-}
 .LC_navbuttons {
   margin: 2ex 0ex 2ex 0ex;
 }
+
 .LC_topic_bar {
-  font-family: $sans;
   font-weight: bold;
-  width: 100%;
   background: $tabbg;
-  vertical-align: middle;
-  margin: 2ex 0ex 2ex 0ex;
+  margin: 1em 0em 1em 2em;
+  padding: 3px;
+  font-size: 1.2em;
 }
+
 .LC_topic_bar span {
+  left: 0.5em;
+  position: absolute;
   vertical-align: middle;
+  font-size: 1.2em;
 }
-.LC_topic_bar img {
-  vertical-align: bottom;
-}
+
 table.LC_course_group_status {
   margin: 20px;
 }
+
 table.LC_status_selector td {
   vertical-align: top;
   text-align: center;
   padding: 4px;
 }
-table.LC_descriptive_input td.LC_description {
-  vertical-align: top;
-  text-align: right;
-  font-weight: bold;
-}
+
 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;
@@ -5252,42 +5679,54 @@ table.LC_prior_tries td {
 }
 
 .LC_answer_correct {
-  background: #AAFFAA;
-  color: black;
+  background: lightgreen;
+  color: darkgreen;
+  padding: 6px;
 }
+
 .LC_answer_charged_try {
-  background: #FFAAAA ! important;
-  color: black;
+  background: #FFAAAA;
+  color: darkred;
+  padding: 6px;
 }
+
 .LC_answer_not_charged_try,
 .LC_answer_no_grade,
 .LC_answer_late {
-  background: #FFFFAA;
+  background: lightyellow;
   color: black;
+  padding: 6px;
 }
+
 .LC_answer_previous {
-  background: #AAAAFF;
-  color: black;
+  background: lightblue;
+  color: darkblue;
+  padding: 6px;
 }
+
 .LC_answer_no_message {
   background: #FFFFFF;
   color: black;
+  padding: 6px;
 }
+
 .LC_answer_unknown {
   background: orange;
   color: black;
+  padding: 6px;
 }
+
 span.LC_prior_numerical,
 span.LC_prior_string,
 span.LC_prior_custom,
 span.LC_prior_reaction,
 span.LC_prior_math {
-  font-family: monospace;
+  font-family: $mono;
   white-space: pre;
 }
 
 span.LC_prior_string {
-  font-family: monospace;
+  font-family: $mono;
   white-space: pre;
 }
 
@@ -5295,17 +5734,19 @@ table.LC_prior_option {
   width: 100%;
   border-collapse: collapse;
 }
-table.LC_prior_rank, table.LC_prior_match {
+
+table.LC_prior_rank,
+table.LC_prior_match {
   border-collapse: collapse;
 }
+
 table.LC_prior_option tr td,
 table.LC_prior_rank tr td,
 table.LC_prior_match tr td {
   border: 1px solid #000000;
 }
 
-td.LC_nobreak,
-span.LC_nobreak {
+.LC_nobreak {
   white-space: nowrap;
 }
 
@@ -5318,38 +5759,36 @@ span.LC_cusr_subheading {
   font-size: 85%;
 }
 
-table.LC_docs_documents {
-  background: #BBBBBB;
-  border-width: 0px;
-  border-collapse: collapse;
-}
-table.LC_docs_documents td.LC_docs_document {
-  border: 2px solid black;
-  padding: 4px;
-}
-.LC_docs_entry_move {
-  border: 0px;
-  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;
 }
+
 .LC_docs_cut {
   color: #550044;
 }
+
 .LC_docs_rename {
   color: #009900;
 }
+
 .LC_docs_remove {
   color: #990000;
 }
@@ -5359,16 +5798,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;
@@ -5379,12 +5808,13 @@ table.LC_docs_adddocs th {
 table.LC_sty_begin {
   background: #BBFFBB;
 }
+
 table.LC_sty_end {
   background: #FFBBBB;
 }
 
 table.LC_double_column {
-  border-width: 0px;
+  border-width: 0;
   border-collapse: collapse;
   width: 100%;
   padding: 2px;
@@ -5404,10 +5834,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%;
@@ -5423,66 +5849,58 @@ div.LC_clear_float_footer {
   clear: both;
 }
 
-
 div.LC_grade_show_user {
-  margin-top: 20px;
-  border: 1px solid black;
+/*  border-left: 5px solid $sidebg; */
+  border-top: 5px solid #000000;
+  margin: 50px 0 0 0;
+  padding: 15px 0 5px 10px;
 }
-div.LC_grade_user_name {
-  background: #DDDDEE;
-  border-bottom: 1px solid black;
-  font-weight: bold;
-  font-size: large;
+
+div.LC_grade_show_user_odd_row {
+/*  border-left: 5px solid #000000; */
 }
-div.LC_grade_show_user_odd_row div.LC_grade_user_name {
-  background: #DDEEDD;
+
+div.LC_grade_show_user div.LC_Box {
+  margin-right: 50px;
 }
 
-div.LC_grade_show_problem,
 div.LC_grade_submissions,
 div.LC_grade_message_center,
-div.LC_grade_info_links,
-div.LC_grade_assign {
+div.LC_grade_info_links {
   margin: 5px;
   width: 99%;
   background: #FFFFFF;
 }
-div.LC_grade_show_problem_header,
+
 div.LC_grade_submissions_header,
-div.LC_grade_message_center_header,
-div.LC_grade_assign_header {
+div.LC_grade_message_center_header {
   font-weight: bold;
   font-size: large;
 }
-div.LC_grade_show_problem_problem,
+
 div.LC_grade_submissions_body,
-div.LC_grade_message_center_body,
-div.LC_grade_assign_body {
+div.LC_grade_message_center_body {
   border: 1px solid black;
   width: 99%;
   background: #FFFFFF;
 }
-span.LC_grade_check_note {
-  font-weight: normal;
-  font-size: medium;
-  display: inline;
-  position: absolute;
-  right: 1em;
-}
 
 table.LC_scantron_action {
   width: 100%;
 }
+
 table.LC_scantron_action tr th {
   font-weight:bold;
   font-style:normal;
 }
+
 .LC_edit_problem_header,
 div.LC_edit_problem_footer {
   font-weight: normal;
   font-size:  medium;
   margin: 2px;
 }
+
 div.LC_edit_problem_header,
 div.LC_edit_problem_header div,
 div.LC_edit_problem_footer,
@@ -5491,299 +5909,393 @@ div.LC_edit_problem_editxml_header,
 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;
   background: $tabbg;
   padding: 3px;
 }
+
 table.LC_edit_problem_header_title {
-  font-size: larger;
-  font-weight:  bold;
   width: 100%;
-  border-color: $pgbg;
-  border-style: solid;
-  border-width: $border;
-
   background: $tabbg;
-  border-collapse: collapse;
-  padding: 0px
 }
 
 div.LC_edit_problem_discards {
   float: left;
   padding-bottom: 5px;
 }
+
 div.LC_edit_problem_saves {
   float: right;
   padding-bottom: 5px;
 }
-hr.LC_edit_problem_divide {
-  clear: both;
-  color: $tabbg;
-  background-color: $tabbg;
-  height: 3px;
-  border: 0px;
-}
-img.stift{
-  border-width:0;
-  vertical-align:middle;
-}
-
-table#LC_mainmenu{
- margin-top:10px;
- width:80%;
 
+img.stift {
+  border-width: 0;
+  vertical-align: middle;
 }
 
-table#LC_mainmenu td.LC_mainmenu_col_fieldset{
+table td.LC_mainmenu_col_fieldset {
   vertical-align: top;
-  width: 45%;
-}
-.LC_mainmenu_fieldset_category {
-  color: $font;
-  background: $pgbg;
-  font-family: $sans;
-  font-size: small;
-  font-weight: bold;
 }
+
 div.LC_createcourse {
-    margin: 10px 10px 10px 10px;
+  margin: 10px 10px 10px 10px;
 }
 
-/* ---- Remove when done ----
-# The following styles is part of the redesign of LON-CAPA and are
-# subject to change during this project.
-# Don't rely on their current functionality as they might be 
-# changed or removed.
-# --------------------------*/
+.LC_dccid {
+  margin: 0.2em 0 0 0;
+  padding: 0;
+  font-size: 90%;
+  display:none;
+}
 
 a:hover,
-ol.LC_smallMenu a:hover,
+ol.LC_primary_menu a:hover,
 ol#LC_MenuBreadcrumbs a:hover,
 ol#LC_PathBreadcrumbs a:hover,
-ul#LC_TabMainMenuContent a:hover,
+ul#LC_secondary_menu a:hover,
 .LC_FormSectionClearButton input:hover
-ul.LC_TabContent   li:hover a{
-	color:#BF2317;
-        text-decoration:none;
+ul.LC_TabContent   li:hover a {
+  color:$button_hover;
+  text-decoration:none;
 }
 
 h1 {
-	padding:5px 10px 5px 20px;
-	line-height:130%;
+  padding: 0;
+  line-height:130%;
 }
 
-h2,h3,h4,h5,h6
-{
-	margin:5px 0px 5px 0px;
-	padding:0px;
-	line-height:130%;
-}
-.LC_hcell{
-        padding:3px 15px 3px 15px;
-        margin:0px;
-	background-color:$tabbg;
-	border-bottom:solid 1px $lg_border_color;
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin: 5px 0 5px 0;
+  padding: 0;
+  line-height:130%;
+}
+
+.LC_hcell {
+  padding:3px 15px 3px 15px;
+  margin: 0;
+  background-color:$tabbg;
+  color:$fontmenu;
+  border-bottom:solid 1px $lg_border_color;
+}
+
+.LC_Box > .LC_hcell {
+  margin: 0 -10px 10px -10px;
 }
+
 .LC_noBorder {
-        border:0px;
+  border: 0;
 }
 
+.LC_FormSectionClearButton input {
+  background-color:transparent;
+  border: none;
+  cursor:pointer;
+  text-decoration:underline;
+}
 
-/* Main Header with discription of Person, Course, etc. */
+.LC_help_open_topic {
+  color: #FFFFFF;
+  background-color: #EEEEFF;
+  margin: 1px;
+  padding: 4px;
+  border: 1px solid #000033;
+  white-space: nowrap;
+  /* vertical-align: middle; */
+}
 
-.LC_Right {
-        float: right;
-        margin: 0px;
-        padding: 0px;
+dl,
+ul,
+div,
+fieldset {
+  margin: 10px 10px 10px 0;
+  /* overflow: hidden; */
 }
 
-p, .LC_ContentBox {
-	padding: 10px;
+fieldset > legend {
+  font-weight: bold;
+  padding: 0 5px 0 5px;
+}
 
+#LC_nav_bar {
+  float: left;
+  margin: 0 0 2px 0;
 }
-.LC_FormSectionClearButton input {
-        background-color:transparent;
-        border:0px;
-        cursor:pointer;
-        text-decoration:underline;
+
+#LC_realm {
+  margin: 0.2em 0 0 0;
+  padding: 0;
+  font-weight: bold;
+  text-align: center;
 }
 
-.LC_help_open_topic {
-        color: #FFFFFF;
-        background-color: #EEEEFF;
-        margin: 1px;
-        padding: 4px;
-        border: 1px solid #000033;
-        white-space: nowrap;
-/*		vertical-align: middle; */
+#LC_nav_bar em {
+  font-weight: bold;
+  font-style: normal;
 }
 
-dl,ul,div,fieldset {
-	margin: 10px 10px 10px 0px;
-	overflow:hidden;
+/* Preliminary fix to hide nav_bar inside bookmarks window */
+#LC_bookmarks #LC_nav_bar {
+  display:none;
 }
-ol.LC_smallMenu, ol#LC_PathBreadcrumbs {
-	margin: 0px;
+
+ol.LC_primary_menu {
+  float: right;
+  margin: 0;
 }
 
-ol.LC_smallMenu li {
-	display: inline;
-	padding: 5px 5px 0px 10px;
-	vertical-align: top;
+ol#LC_PathBreadcrumbs {
+  margin: 0;
 }
 
-ol.LC_smallMenu li img {
-	vertical-align: bottom;
+ol.LC_primary_menu li {
+  display: inline;
+  padding: 5px 5px 0 10px;
+  vertical-align: top;
 }
 
-ol.LC_smallMenu a {
-	font-size: 90%;
-	color: RGB(80, 80, 80);
-	text-decoration: none;
+ol.LC_primary_menu li img {
+  vertical-align: bottom;
+  height: 1.1em;
 }
-ol#LC_TabMainMenuContent, ul.LC_TabContent ,
-ul.LC_TabContentBigger {
-	display:block;
-	list-style:none;
-	margin: 0px;
-	padding: 0px;
-}
-
-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);
-	text-decoration: none;
+
+ol.LC_primary_menu a {
+  color: RGB(80, 80, 80);
+  text-decoration: none;
+}
+
+ol.LC_primary_menu a.LC_new_message {
+  font-weight:bold;
+  color: darkred;
+}
+
+ul#LC_secondary_menu {
+  clear: both;
+  color: $fontmenu;
+  background: $tabbg;
+  list-style: none;
+  padding: 0;
+  margin: 0;
+  width: 100%;
+}
+
+ul#LC_secondary_menu 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 {
-	min-height:1.6em;
+  display:block;
+  background: $sidebg;
+  border-bottom: solid 1px $lg_border_color;
+  list-style:none;
+  margin: 0 -10px;
+  padding: 0;
 }
-ul.LC_TabContent li{
-	vertical-align:middle;
-	padding:0px 10px 0px 10px;
-	background-color:$tabbg;
-	border-bottom:solid 1px $lg_border_color;
-}
-ul.LC_TabContent li a, ul.LC_TabContent li{
-	color:rgb(47,47,47);
-	text-decoration:none;
-	font-size:95%;
-	font-weight:bold;
-	padding-right: 16px;
-}
-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;
-	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;
-}
-ul.LC_TabContentBigger li:hover, ul.LC_TabContentBigger li.active{
-	background:url(/adm/lonIcons/lightGreyBG.png) repeat-x right bottom;
-}
-ul.LC_TabContentBigger li, ul.LC_TabContentBigger li a{
-	font-size:110%;
-	font-weight:bold;
-}
-
-ol#LC_MenuBreadcrumbs, ol#LC_PathBreadcrumbs, ul.LC_CourseBreadcrumbs{
-	border-top: solid 1px RGB(255, 255, 255);
-	height: 20px;
-	line-height: 20px;
-	vertical-align: bottom;
-	margin: 0px 0px 30px 0px;
-	padding-left: 10px;
-	list-style-position: inside;
-	background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
+
+ul.LC_TabContent li,
+ul.LC_TabContentBigger li {
+  float:left;
 }
 
-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: 0px 0px 0px 10px;
-/*	vertical-align: bottom; */
-	overflow:hidden;
-}
-
-ol#LC_MenuBreadcrumbs li a, ul.LC_CourseBreadcrumbs li a {
-	text-decoration: none;
-	font-size:90%;
-}
-ol#LC_PathBreadcrumbs li a{
-	text-decoration:none;
-	font-size:100%;
-	font-weight:bold;
+ul#LC_secondary_menu li a {
+  color: $fontmenu;
+  text-decoration: none;
 }
-.LC_ContentBoxSpecial
-{
-	border: solid 1px $lg_border_color;
+
+ul.LC_TabContent {
+  min-height:20px;
 }
-.LC_ContentBoxSpecialContactInfo
-{
-	border: solid 1px $lg_border_color;
-	max-width:25%;
-	min-width:25%;
+
+ul.LC_TabContent li {
+  vertical-align:middle;
+  padding: 0 16px 0 10px;
+  background-color:$tabbg;
+  border-bottom:solid 1px $lg_border_color;
+  border-right: solid 1px $font;
 }
-.LC_AboutMe_Image
-{
-	float:left;
-	margin-right:10px;
+
+ul.LC_TabContent .right {
+  float:right;
 }
-.LC_Clear_AboutMe_Image
-{
-	clear:left;
+
+ul.LC_TabContent li a,
+ul.LC_TabContent li {
+  color:rgb(47,47,47);
+  text-decoration:none;
+  font-size:95%;
+  font-weight:bold;
+  min-height:20px;
+}
+
+ul.LC_TabContent li a:hover,
+ul.LC_TabContent li a:focus {
+  color: $button_hover;
+  background:none;
+  outline:none;
+}
+
+ul.LC_TabContent li:hover {
+  color: $button_hover;
+  cursor:pointer;
+}
+
+ul.LC_TabContent li.active {
+  color: $font;
+  background:#FFFFFF url(/adm/lonIcons/open.gif) no-repeat scroll right center;
+  border-bottom:solid 1px #FFFFFF;
+  cursor: default;
+}
+
+ul.LC_TabContent li.active a {
+  color:$font;
+  background:#FFFFFF;
+  outline: none;
+}
+#maincoursedoc {
+  clear:both;
+}
+
+ul.LC_TabContentBigger {
+  display:block;
+  list-style:none;
+  padding: 0;
+}
+
+ul.LC_TabContentBigger li {
+  vertical-align:bottom;
+  height: 30px;
+  font-size:110%;
+  font-weight:bold;
+  color: #737373;
+}
+
+ul.LC_TabContentBigger li.active {
+  position: relative;
+  top: 1px;
+}
+
+ul.LC_TabContentBigger li a {
+  background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat;
+  height: 30px;
+  line-height: 30px;
+  text-align: center;
+  display: block;
+  text-decoration: none;
+  outline: none;  
+}
+
+ul.LC_TabContentBigger li.active a {
+  background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat;
+  color:$font;
+}
+
+ul.LC_TabContentBigger li b {
+  background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom;
+  display: block;
+  float: left;
+  padding: 0 30px;
+  border-bottom: 1px solid $lg_border_color;
+}
+
+ul.LC_TabContentBigger li:hover b {
+  color:$button_hover;
+}
+
+ul.LC_TabContentBigger li.active b {
+  background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;
+  color:$font;
+  border: 0;
+  cursor:default;
+}
+
+
+ul.LC_CourseBreadcrumbs {
+  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;
+  height: 2.5em;  /* equal to #LC_breadcrumbs line-height */
+}
+
+ol#LC_MenuBreadcrumbs li,
+ol#LC_PathBreadcrumbs li,
+ul.LC_CourseBreadcrumbs li {
+  display: inline;
+  white-space: normal;  
+}
+
+ol#LC_MenuBreadcrumbs li a,
+ul.LC_CourseBreadcrumbs li a {
+  text-decoration: none;
+  font-size:90%;
 }
+
+ol#LC_MenuBreadcrumbs h1 {
+  display: inline;
+  font-size: 90%;
+  line-height: 2.5em;
+  margin: 0;
+  padding: 0;
+}
+
+ol#LC_PathBreadcrumbs li a {
+  text-decoration:none;
+  font-size:100%;
+  font-weight:bold;
+}
+
+.LC_Box {
+  border: solid 1px $lg_border_color;
+  padding: 0 10px 10px 10px;
+}
+
+.LC_AboutMe_Image {
+  float:left;
+  margin-right:10px;
+}
+
+.LC_Clear_AboutMe_Image {
+  clear:left;
+}
+
 dl.LC_ListStyleClean dt {
-	padding-right: 5px;
-	display: table-header-group;
+  padding-right: 5px;
+  display: table-header-group;
 }
 
 dl.LC_ListStyleClean dd {
-	display: table-row;
+  display: table-row;
 }
 
 .LC_ListStyleClean,
 .LC_ListStyleSimple,
 .LC_ListStyleNormal,
-.LC_ListStyle_Border,
-.LC_ListStyleSpecial
-	{
-	/*display:block;	*/
-	list-style-position: inside;
-	list-style-type: none;
-	overflow: hidden;
-	padding: 0px;
+.LC_ListStyleSpecial {
+  /* display:block; */
+  list-style-position: inside;
+  list-style-type: none;
+  overflow: hidden;
+  padding: 0;
 }
 
 .LC_ListStyleSimple li,
@@ -5791,238 +6303,181 @@ dl.LC_ListStyleClean dd {
 .LC_ListStyleNormal li,
 .LC_ListStyleNormal dd,
 .LC_ListStyleSpecial li,
-.LC_ListStyleSpecial dd
-	{
-	margin: 0px;
-	padding: 5px 5px 5px 10px;
-	clear: both;
+.LC_ListStyleSpecial dd {
+  margin: 0;
+  padding: 5px 5px 5px 10px;
+  clear: both;
 }
 
 .LC_ListStyleClean li,
 .LC_ListStyleClean dd {
-	padding-top: 0px;
-	padding-bottom: 0px;
+  padding-top: 0;
+  padding-bottom: 0;
 }
 
 .LC_ListStyleSimple dd,
-.LC_ListStyleSimple li{
-	border-bottom: solid 1px $lg_border_color;
+.LC_ListStyleSimple li {
+  border-bottom: solid 1px $lg_border_color;
 }
 
 .LC_ListStyleSpecial li,
 .LC_ListStyleSpecial dd {
-	list-style-type: none;
-	background-color: RGB(220, 220, 220);
-	margin-bottom: 4px;
+  list-style-type: none;
+  background-color: RGB(220, 220, 220);
+  margin-bottom: 4px;
 }
 
 table.LC_SimpleTable {
-	margin:5px;
-	border:solid 1px $lg_border_color;
-	}
+  margin:5px;
+  border:solid 1px $lg_border_color;
+}
 
 table.LC_SimpleTable tr {
-	padding:0px;
-	border:solid 1px $lg_border_color;
+  padding: 0;
+  border:solid 1px $lg_border_color;
 }
-table.LC_SimpleTable thead{
-	 background:rgb(220,220,220);
+
+table.LC_SimpleTable thead {
+  background:rgb(220,220,220);
 }
 
 div.LC_columnSection {
-	display: block;
-	clear: both;
-	overflow: hidden;
-	margin:0px;
+  display: block;
+  clear: both;
+  overflow: hidden;
+  margin: 0;
 }
 
 div.LC_columnSection>* {
-	float: left;
-	margin: 10px 20px 10px 0px;
-	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: 0px;
-	font-size: 0px;
-	height: 0px;
-}
-
-.LC_loginpage_container {
-	text-align:left;
-	margin : 0 auto;
-	width:65%;
-	padding: 10px;
-	height: auto;
-	background-color:#FFFFFF;
-	border:1px solid #CCCCCC;
-}
-
-
-.LC_loginpage_loginContainer {
-	float:left;
-	width: 182px;
-	border:1px solid #CCCCCC;
-	background-color:$loginbg;
+  float: left;
+  margin: 10px 20px 10px 0;
+  overflow:hidden;
 }
 
-.LC_loginpage_loginContainer h2{
-	margin-top:0;
-	display:block;
-	background:$bgcol;
-	color:$textcol;
-	padding-left:5px;
-}
-.LC_loginpage_loginInfo {
-	margin-left:20px;
-	float:left;
-	width:30%;
-	border:1px solid #CCCCCC;
-	padding:10px;
+table em {
+  font-weight: bold;
+  font-style: normal;
 }
 
-.LC_loginpage_loginDomain {
-	margin-right:20px;
-	width:20%;
-	float:left;
-	padding:10px;
+table.LC_tableBrowseRes,
+table.LC_tableOfContent {
+  border:none;
+  border-spacing: 1px;
+  padding: 3px;
+  background-color: #FFFFFF;
+  font-size: 90%;
 }
 
-.LC_loginpage_space {
-	clear: both;
-	margin-bottom: 20px;
-	border-bottom: 1px solid #CCCCCC;
+table.LC_tableOfContent {
+  border-collapse: collapse;
 }
 
-table em{
-	font-weight: bold;
-	font-style: normal;
-}
-table.LC_tableBrowseRes,
-table.LC_tableOfContent{
-        border:none;
-	border-spacing: 1;
-	padding: 3px;
-	background-color: #FFFFFF;
-	font-size: 90%;
-}
 table.LC_tableBrowseRes a,
 table.LC_tableOfContent a {
-        background-color: transparent;
-	text-decoration: none;
+  background-color: transparent;
+  text-decoration: none;
 }
 
-table.LC_tableBrowseRes tr.LC_trOdd,
-table.LC_tableOfContent tr.LC_trOdd{
-	background-color: #EEEEEE;
+table.LC_tableOfContent img {
+  border: none;
+  height: 1.3em;
+  vertical-align: text-bottom;
+  margin-right: 0.3em;
 }
 
-table.LC_tableOfContent img{
-	border: none;
-	height: 1.3em;
-	vertical-align: text-bottom;
-	margin-right: 0.3em;
+a#LC_content_toolbar_firsthomework {
+  background-image:url(/res/adm/pages/open-first-problem.gif);
 }
 
-a#LC_content_toolbar_firsthomework{
-	background-image:url(/res/adm/pages/open-first-problem.gif);
+a#LC_content_toolbar_everything {
+  background-image:url(/res/adm/pages/show-all.gif);
 }
 
-a#LC_content_toolbar_launchnav{
-	background-image:url(/res/adm/pages/start-navigation.gif);
+a#LC_content_toolbar_uncompleted {
+  background-image:url(/res/adm/pages/show-incomplete-problems.gif);
 }
 
-a#LC_content_toolbar_closenav{
-	background-image:url(/res/adm/pages/close-navigation.gif);
+#LC_content_toolbar_clearbubbles {
+  background-image:url(/res/adm/pages/mark-discussionentries-read.gif);
 }
 
-a#LC_content_toolbar_everything{
-	background-image:url(/res/adm/pages/show-all.gif);
+a#LC_content_toolbar_changefolder {
+  background : url(/res/adm/pages/close-all-folders.gif) top center ;
 }
 
-a#LC_content_toolbar_uncompleted{
-	background-image:url(/res/adm/pages/show-incomplete-problems.gif);
+a#LC_content_toolbar_changefolder_toggled {
+  background-image:url(/res/adm/pages/open-all-folders.gif);
 }
 
-#LC_content_toolbar_clearbubbles{
-	background-image:url(/res/adm/pages/mark-discussionentries-read.gif);
+ul#LC_toolbar li a:hover {
+  background-position: bottom center;
 }
 
-a#LC_content_toolbar_changefolder{
-	background : url(/res/adm/pages/close-all-folders.gif) top center ;
+ul#LC_toolbar {
+  padding: 0;
+  margin: 2px;
+  list-style:none;
+  position:relative;
+  background-color:white;
 }
 
-a#LC_content_toolbar_changefolder_toggled{
-	background-image:url(/res/adm/pages/open-all-folders.gif);
+ul#LC_toolbar li {
+  border:1px solid white;
+  padding: 0;
+  margin: 0;
+  float: left;
+  display:inline;
+  vertical-align:middle;
 }
 
-ul#LC_toolbar li a:hover{
-	background-position: bottom center;
+
+a.LC_toolbarItem {
+  display:block;
+  padding: 0;
+  margin: 0;
+  height: 32px;
+  width: 32px;
+  color:white;
+  border: none;
+  background-repeat:no-repeat;
+  background-color:transparent;
 }
 
-ul#LC_toolbar{
-	padding:0;
-	margin: 2px;
-	list-style:none;
-	position:relative;
-	background-color:white;
+ul.LC_funclist {
+    margin: 0;
+    padding: 0.5em 1em 0.5em 0;
 }
 
-ul#LC_toolbar li{
-	border:1px solid white;
-	padding:0;
-	margin: 0;
-    float: left;
-	display:inline;
-	vertical-align:middle;
+ul.LC_funclist > li:first-child {
+    font-weight:bold; 
+    margin-left:0.8em;
 }
 
-/*
- This style is used for standard function lists, e.g. functions of Personal Information Page.
- It produces a horizontally aligned list with a bullet at the beginning of each function item.
- */
-.LC_fieldset_functions li {
-	float: right;
-	height: 35px;
-	background-color: blue; 
-	white-space: nowrap;
-	margin-left: 10px;	
-}
-
-a.LC_toolbarItem{
-	display:block;
-	padding:0;
-	margin:0;
-	height: 32px;
-	width: 32px;
-	color:white;
-	border:0 none;
-	background-repeat:no-repeat;
-	background-color:transparent;
+ul.LC_funclist + ul.LC_funclist {
+    /* 
+       left border as a seperator if we have more than
+       one list 
+    */
+    border-left: 1px solid $sidebg;
+    /* 
+       this hides the left border behind the border of the 
+       outer box if element is wrapped to the next 'line' 
+    */
+    margin-left: -1px;
 }
 
-ul.LC_functionslist li {
-  float: left;
+ul.LC_funclist li {
+  display: inline;
   white-space: nowrap;
-  height: 35px; /* at least as high as heighest list item */
-  margin: 0px 15px 15px 10px;
+  margin: 0 0 0 25px;
+  line-height: 150%;
 }
 
+.ui-accordion .LC_advanced_toggle {
+  float: right;
+  font-size: 90%;
+  padding: 0px 4px
+}
 
 END
 }
@@ -6075,8 +6530,8 @@ sub headtag {
     if (!$args->{'frameset'}) {
 	$result .= &Apache::lonhtmlcommon::htmlareaheaders();
     }
-    if ($args->{'force_register'}) {
-	$result .= &Apache::lonmenu::registerurl(1);
+    if ($args->{'force_register'} && $env{'request.noversionuri'} !~ m{^/res/adm/pages/}) {
+        $result .= Apache::lonxml::display_title();
     }
     if (!$args->{'no_nav_bar'} 
 	&& !$args->{'only_body'}
@@ -6102,7 +6557,7 @@ ADDMETA
     $result .= '<title> LON-CAPA '.$title.'</title>'
 	.'<link rel="stylesheet" type="text/css" href="'.$url.'" />'
 	.$head_extra;
-    return $result;
+    return $result.'</head>';
 }
 
 =pod
@@ -6137,10 +6592,6 @@ Inputs: none
 sub xml_begin {
     my $output='';
 
-    if ($env{'internal.start_page'}==1) {
-	&Apache::lonhtmlcommon::init_htmlareafields();
-    }
-
     if ($env{'browser.mathml'}) {
 	$output='<?xml version="1.0"?>'
             #.'<?xml-stylesheet type="text/css" href="/adm/MathML/mathml.css"?>'."\n"
@@ -6151,50 +6602,14 @@ 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;
 }
 
 =pod
 
-=item * &endheadtag()
-
-Returns a uniform </head> for LON-CAPA web pages.
-
-Inputs: none
-
-=cut
-
-sub endheadtag {
-    return '</head>';
-}
-
-=pod
-
-=item * &head()
-
-Returns a uniform complete <head>..</head> section for LON-CAPA web pages.
-
-Inputs:
-
-=over 4
-
-$title - optional title for the page
-
-$head_extra - optional extra HTML to put inside the <head>
-
-=back
-
-=cut
-
-sub head {
-    my ($title,$head_extra,$args) = @_;
-    return &headtag($title,$head_extra,$args).&endheadtag();
-}
-
-=pod
-
 =item * &start_page()
 
 Returns a complete <html> .. <body> section for LON-CAPA web pages.
@@ -6213,7 +6628,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
@@ -6227,21 +6642,17 @@ $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
-             no_inline_link -> if true and in remote mode, don't show the 
-                                    'Switch To Inline Menu' link
              no_auto_mt_title -> prevent &mt()ing the title arg
              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
 
@@ -6252,6 +6663,14 @@ $args - additional optional args support
 sub start_page {
     my ($title,$head_extra,$args) = @_;
     #&Apache::lonnet::logthis("start_page ".join(':',caller(0)));
+#SD
+#I don't see why we copy certain elements of %$args to %head_args
+#head args is passed to headtag() and this routine only reads those
+#keys that are needed. There doesn't happen any writes or any processing
+#of other keys.
+#proposal: just pass $args to headtag instead of \%head_args and delete 
+#marked lines
+#<- MARK
     my %head_args;
     foreach my $arg ('redirect','force_register','domain','function',
 		     'bgcolor','frameset','no_nav_bar','only_body',
@@ -6260,13 +6679,16 @@ sub start_page {
 	    $head_args{$arg} = $args->{$arg};
 	}
     }
+#MARK ->
 
     $env{'internal.start_page'}++;
     my $result;
+
     if (! exists($args->{'skip_phases'}{'head'}) ) {
-	$result.=
-	    &xml_begin().
-	    &headtag($title,$head_extra,\%head_args).&endheadtag();
+        $result .= 
+                  &xml_begin() . &headtag($title,$head_extra,\%head_args);
+#replace prev line by
+#                 &xml_begin() . &headtag($title, $head_extra, $args);
     }
     
     if (! exists($args->{'skip_phases'}{'body'}) ) {
@@ -6274,16 +6696,14 @@ 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);
+        }
     }
 
     if ($args->{'js_ready'}) {
@@ -6293,7 +6713,16 @@ 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 or in const space
+    return $result if    $args->{'only_body'} 
+                      || $env{'request.state'} eq 'construct';
+
+    #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
@@ -6313,28 +6742,6 @@ sub start_page {
     return $result;
 }
 
-
-=pod
-
-=item * &head()
-
-Returns a complete </body></html> section for LON-CAPA web pages.
-
-Inputs:         $args - additional optional args supported are:
-                 js_ready     -> return a string ready for being used in 
-                                 a javascript writeln
-                 html_encode  -> return a string ready for being used in 
-                                 a html attribute
-                 frameset     -> if true will start with a <frameset>
-                                 rather than <body>
-                 dicsussion   -> if true will get discussion from
-                                  lonxml::xmlend
-                                 (you can pass the target and parser arguments
-                                  through optional 'target' and 'parser' args
-                                  to this routine)
-
-=cut
-
 sub end_page {
     my ($args) = @_;
     $env{'internal.end_page'}++;
@@ -6424,15 +6831,26 @@ sub simple_error_page {
 
 {
     my @row_count;
+
+    sub start_data_table_count {
+        unshift(@row_count, 0);
+        return;
+    }
+
+    sub end_data_table_count {
+        shift(@row_count);
+        return;
+    }
+
     sub start_data_table {
 	my ($add_class) = @_;
 	my $css_class = (join(' ','LC_data_table',$add_class));
-	unshift(@row_count,0);
+	&start_data_table_count();
 	return '<table class="'.$css_class.'">'."\n";
     }
 
     sub end_data_table {
-	shift(@row_count);
+	&end_data_table_count();
 	return '</table>'."\n";;
     }
 
@@ -6440,14 +6858,14 @@ sub simple_error_page {
 	my ($add_class) = @_;
 	$row_count[0]++;
 	my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
-	$css_class = (join(' ',$css_class,$add_class));
+	$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');
 	return  '<tr class="'.$css_class.'">'."\n";;
     }
     
     sub continue_data_table_row {
 	my ($add_class) = @_;
 	my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
-	$css_class = (join(' ',$css_class,$add_class));
+	$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');;
 	return  '<tr class="'.$css_class.'">'."\n";;
     }
 
@@ -6471,6 +6889,11 @@ sub simple_error_page {
     sub end_data_table_header_row {
 	return '</tr>'."\n";;
     }
+
+    sub data_table_caption {
+        my $caption = shift;
+        return "<caption class=\"LC_caption\">$caption</caption>";
+    }
 }
 
 =pod
@@ -6537,14 +6960,17 @@ Returns either 'student','coordinator','
 
 ###############################################
 sub get_users_function {
-    my $function = 'student';
-    if ($env{'request.role'}=~/^(cc|in|ta|ep)/) {
+    my $function = 'norole';
+    if ($env{'request.role'}=~/^(st)/) {
+        $function='student';
+    }
+    if ($env{'request.role'}=~/^(cc|co|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';
     }
@@ -6555,6 +6981,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
@@ -6577,7 +7035,7 @@ sub check_user_status {
     my $active_chk = 'none';
     my $now = time;
     if (@uroles > 0) {
-        if (($role eq 'cc') || ($sec eq '') || (!defined($sec))) {
+        if (($role eq 'cc') || ($role eq 'co') || ($sec eq '') || (!defined($sec))) {
             $srchstr = '/'.$cdom.'/'.$crs.'_'.$role;
         } else {
             $srchstr = '/'.$cdom.'/'.$crs.'/'.$sec.'_'.$role;
@@ -7208,6 +7666,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 .= ' 
@@ -7251,12 +7710,17 @@ sub user_picker {
                 if ($cancreate) {
                     $new_user_create = '<p> <input type="submit" name="forcenew" value="'.&HTML::Entities::encode(&mt('Make new user "[_1]"',$srchterm),'<>&"').'" onclick="javascript:setSearch(\'1\','.$caller.');" /> </p>';
                 } else {
-                    my $helplink = ' href="javascript:helpMenu('."'display'".')"';
+                    my $helplink = 'javascript:helpMenu('."'display'".')';
                     my %usertypetext = (
                         official   => 'institutional',
                         unofficial => 'non-institutional',
                     );
-                    $new_user_create = '<br /><span class="LC_warning">'.&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.").' '.&mt('Contact the <a[_1]>helpdesk</a> for assistance.',$helplink).'</span><br /><br />';
+                    $new_user_create = '<p class="LC_warning">'
+                                      .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.")
+                                      .' '
+                                      .&mt('Please contact the [_1]helpdesk[_2] for assistance.'
+                                          ,'<a href="'.$helplink.'">','</a>')
+                                      .'</p><br />';
                 }
             }
         }
@@ -7293,6 +7757,7 @@ ENDSCRIPT
 
     my $output = <<"END_BLOCK";
 <script type="text/javascript">
+// <![CDATA[
 function validateEntry(callingForm) {
 
     var checkok = 1;
@@ -7361,28 +7826,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;
 }
 
@@ -7606,6 +8068,10 @@ sub get_institutional_codes {
     return;
 }
 
+sub get_standard_codeitems {
+    return ('Year','Semester','Department','Number','Section');
+}
+
 =pod
 
 =head1 Slot Helpers
@@ -8255,7 +8721,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());
@@ -8299,7 +8765,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] }))) {
@@ -8953,10 +9419,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), 
@@ -9126,6 +9593,8 @@ sub extract_categories {
                 my $trailstr;
                 if ($name eq 'instcode') {
                     $trailstr = &mt('Official courses (with institutional codes)');
+                } elsif ($name eq 'communities') {
+                    $trailstr = &mt('Communities');
                 } else {
                     $trailstr = $name;
                 }
@@ -9238,12 +9707,14 @@ cathash - reference to hash of categorie
 
 currcat - scalar with an & separated list of categories assigned to a course. 
 
+type    - scalar contains course type (Course or Community).
+
 Returns: $output (markup to be displayed) 
 
 =cut
 
 sub assign_categories_table {
-    my ($cathash,$currcat) = @_;
+    my ($cathash,$currcat,$type) = @_;
     my $output;
     if (ref($cathash) eq 'HASH') {
         my (@cats,@trails,%allitems,%idx,@jsarray,@path,$maxdepth);
@@ -9252,15 +9723,20 @@ sub assign_categories_table {
         if (@cats > 0) {
             my $itemcount = 0;
             if (ref($cats[0]) eq 'ARRAY') {
-                $output = &Apache::loncommon::start_data_table();
                 my @currcategories;
                 if ($currcat ne '') {
                     @currcategories = split('&',$currcat);
                 }
+                my $table;
                 for (my $i=0; $i<@{$cats[0]}; $i++) {
                     my $parent = $cats[0][$i];
-                    my $css_class = $itemcount%2?' class="LC_odd_row"':'';
                     next if ($parent eq 'instcode');
+                    if ($type eq 'Community') {
+                        next unless ($parent eq 'communities');
+                    } else {
+                        next if ($parent eq 'communities');
+                    }
+                    my $css_class = $itemcount%2?' class="LC_odd_row"':'';
                     my $item = &escape($parent).'::0';
                     my $checked = '';
                     if (@currcategories > 0) {
@@ -9268,18 +9744,26 @@ sub assign_categories_table {
                             $checked = ' checked="checked"';
                         }
                     }
-                    $output .= '<tr '.$css_class.'><td><span class="LC_nobreak">'.
-                               '<input type="checkbox" name="usecategory" value="'.
-                               $item.'"'.$checked.' />'.$parent.'</span>'.
-                               '<input type="hidden" name="catname" value="'.$parent.'" /></td>';
+                    my $parent_title = $parent;
+                    if ($parent eq 'communities') {
+                        $parent_title = &mt('Communities');
+                    }
+                    $table .= '<tr '.$css_class.'><td><span class="LC_nobreak">'.
+                              '<input type="checkbox" name="usecategory" value="'.
+                              $item.'"'.$checked.' />'.$parent_title.'</span>'.
+                              '<input type="hidden" name="catname" value="'.$parent.'" /></td>';
                     my $depth = 1;
                     push(@path,$parent);
-                    $output .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
+                    $table .= &assign_category_rows($itemcount,\@cats,$depth,$parent,\@path,\@currcategories);
                     pop(@path);
-                    $output .= '</tr><tr><td colspan="'.$maxdepth.'" class="LC_row_separator"></td></tr>';
+                    $table .= '</tr><tr><td colspan="'.$maxdepth.'" class="LC_row_separator"></td></tr>';
                     $itemcount ++;
                 }
-                $output .= &Apache::loncommon::end_data_table();
+                if ($itemcount) {
+                    $output = &Apache::loncommon::start_data_table().
+                              $table.
+                              &Apache::loncommon::end_data_table();
+                }
             }
         }
     }
@@ -9524,12 +10008,26 @@ sub check_clone {
     my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
     my $clonemsg;
     my $can_clone = 0;
-
+    my $lctype = lc($args->{'crstype'});
+    if ($lctype ne 'community') {
+        $lctype = 'course';
+    }
     if ($clonehome eq 'no_host') {
-        $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'});     
+        if ($args->{'crstype'} eq 'Community') {
+            $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
+        } else {
+            $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 ($args->{'crstype'} eq 'Community') {
+            if ($clonedesc{'type'} ne 'Community') {
+                 $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
+                return ($can_clone, $clonemsg, $cloneid, $clonehome);
+            }
+        }
+	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'],
@@ -9540,15 +10038,25 @@ sub check_clone {
             } elsif (grep(/^\*\:\Q$args->{'ccdomain'}\E$/,@cloners)) {
                 $can_clone = 1;
             } else {
+                my $ccrole = 'cc';
+                if ($args->{'crstype'} eq 'Community') {
+                    $ccrole = 'co';
+                }
 	        my %roleshash =
 		    &Apache::lonnet::get_my_roles($args->{'ccuname'},
 					 $args->{'ccdomain'},
-                                         'userroles',['active'],['cc'],
+                                         'userroles',['active'],[$ccrole],
 					 [$args->{'clonedomain'}]);
-	        if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
-		    $can_clone = 1;
-	        } else {
-                    $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+	        if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
+                    $can_clone = 1;
+                } elsif (&Apache::lonnet::is_course_owner($args->{'clonedomain'},$args->{'clonecourse'},$args->{'ccuname'},$args->{'ccdomain'})) {
+                    $can_clone = 1;
+                } else {
+                    if ($args->{'crstype'} eq 'Community') {
+                        $clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+                    } else {
+                        $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+                    }
 	        }
 	    }
         }
@@ -9557,7 +10065,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,$category) = @_;
     my $outcome;
     my $linefeed =  '<br />'."\n";
     if ($context eq 'auto') {
@@ -9595,18 +10103,27 @@ sub construct_course {
                                              $args->{'crscode'},
                                              $args->{'ccuname'}.':'.
                                              $args->{'ccdomain'},
-                                             $args->{'crstype'});
+                                             $args->{'crstype'},
+                                             $cnum,$context,$category);
 
     # Note: The testing routines depend on this being output; see 
     # Utils::Course. This needs to at least be output as a comment
     # if anyone ever decides to not show this, and Utils::Course::new
     # will need to be suitably modified.
     $outcome .= &mt('New LON-CAPA [_1] ID: [_2]',$crstype,$$courseid).$linefeed;
+    if ($$courseid =~ /^error:/) {
+        return (0,$outcome);
+    }
+
 #
 # Check if created correctly
 #
     ($$crsudom,$$crsunum)= &LONCAPA::split_courseid($$courseid);
     my $crsuhome=&Apache::lonnet::homeserver($$crsunum,$$crsudom);
+    if ($crsuhome eq 'no_host') {
+        $outcome .= &mt('Course creation failed, unrecognized course home server.').$linefeed;
+        return (0,$outcome);
+    }
     $outcome .= &mt('Created on').': '.$crsuhome.$linefeed;
 
 #
@@ -9625,6 +10142,10 @@ sub construct_course {
 	$cenv{'url'}=$oldcenv{'url'};
 # Restore title
 	$cenv{'description'}=$oldcenv{'description'};
+# Restore creation date, creator and creation context.
+        $cenv{'internal.created'}=$oldcenv{'internal.created'};
+        $cenv{'internal.creator'}=$oldcenv{'internal.creator'};
+        $cenv{'internal.creationcontext'}=$oldcenv{'internal.creationcontext'};
 # Mark as cloned
 	$cenv{'clonedfrom'}=$cloneid;
 # Need to clone grading mode
@@ -9871,7 +10392,7 @@ sub construct_course {
 	    $title=&mt('Syllabus');
             $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';
         } else {
-            $title=&mt('Navigate Contents');
+            $title=&mt('Table of Contents');
             $url='/adm/navmaps';
         }
 
@@ -9888,6 +10409,8 @@ sub construct_course {
 ############################################################
 ############################################################
 
+#SD
+# only Community and Course, or anything else?
 sub course_type {
     my ($cid) = @_;
     if (!defined($cid)) {
@@ -9904,11 +10427,21 @@ sub group_term {
     my $crstype = &course_type();
     my %names = (
                   'Course' => 'group',
-                  'Group' => 'team',
+                  'Community' => 'group',
                 );
     return $names{$crstype};
 }
 
+sub course_types {
+    my @types = ('official','unofficial','community');
+    my %typename = (
+                         official   => 'Official course',
+                         unofficial => 'Unofficial course',
+                         community  => 'Community',
+                   );
+    return (\@types,\%typename);
+}
+
 sub icon {
     my ($file)=@_;
     my $curfext = lc((split(/\./,$file))[-1]);
@@ -9968,7 +10501,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'};
@@ -10022,40 +10571,22 @@ 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);
     my ($tmp) = keys(%userenv);
     if ($tmp !~ /^(con_lost|error|no_such_host)/i) {
-	# default remote control to off
-	if ($userenv{'remote'} ne 'on') { $userenv{'remote'} = 'off'; }
     } else {
 	undef(%userenv);
     }
     if (($userenv{'interface'}) && (!$form->{'interface'})) {
 	$form->{'interface'}=$userenv{'interface'};
     }
-    $env{'environment.remote'}=$userenv{'remote'};
     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
 
@@ -10082,20 +10613,10 @@ sub init_user_environment {
 	    $initial_env{"browser.localres"}   = $form->{'localres'};
         }
 	
-	if ($public) {
-	    $initial_env{"environment.remote"} = "off";
-	}
 	if ($form->{'interface'}) {
 	    $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') {
@@ -10103,7 +10624,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');