--- loncom/interface/loncommon.pm	2008/10/02 14:05:45	1.689
+++ loncom/interface/loncommon.pm	2009/04/24 13:02:09	1.794
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.689 2008/10/02 14:05:45 bisitz Exp $
+# $Id: loncommon.pm,v 1.794 2009/04/24 13:02:09 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -271,7 +271,7 @@ BEGIN {
         }
     }
     &Apache::lonnet::logthis(
-              "<font color=yellow>INFO: Read file types</font>");
+             "<span style='color:yellow;'>INFO: Read file types</span>");
     $readit=1;
     }  # end of unless($readit) 
     
@@ -406,9 +406,9 @@ sub studentbrowser_javascript {
          || ($env{'request.role'}=~/^(au|dc|su)/)
           ) { return ''; }  
    return (<<'ENDSTDBRW');
-<script type="text/javascript" language="Javascript" >
+<script type="text/javascript" language="Javascript">
     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,6 +422,7 @@ 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';
@@ -433,26 +434,33 @@ 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 '';
 }
 
 sub authorbrowser_javascript {
     return <<"ENDAUTHORBRW";
-<script type="text/javascript">
+<script type="text/javascript" language="JavaScript">
 var stdeditbrowser;
 
 function openauthorbrowser(formname,udom) {
@@ -473,7 +481,7 @@ 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 = '
-<script type="text/javascript">
+<script type="text/javascript" language="JavaScript">
     var stdeditbrowser;'."\n";
    $output .= <<"ENDSTDBRW";
     function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
@@ -602,8 +610,13 @@ function setSect(sectionlist) {
 
 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>";
+   return '<span class="LC_nobreak">'
+         ."<a href='"
+         .'javascript:opencrsbrowser("'.$form.'","'.$unameele
+         .'","'.$udomele.'","'.$desc.'","'.$extra_element
+         .'","'.$multflag.'","'.$selecttype.'");'
+         ."'>".&mt('Select Course').'</a>'
+         .'</span>';
 }
 
 sub selectauthor_link {
@@ -677,7 +690,7 @@ sub select_datelocale {
             if ($id ne '') {
                 my $en_terr = $locale->{'en_territory'};
                 my $native_terr = $locale->{'native_territory'};
-                my @languages = &preferred_languages();
+                my @languages = &Apache::lonlocal::preferred_languages();
                 if (grep(/^en$/,@languages) || !@languages) {
                     if ($en_terr ne '') {
                         $locale_names{$id} = '('.$en_terr.')';
@@ -710,6 +723,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(...)
@@ -796,7 +824,7 @@ sub linked_select_forms {
     my $first = "document.$formname.$firstselectname";
     # output the javascript to do the changing
     my $result = '';
-    $result.="<script type=\"text/javascript\">\n";
+    $result.='<script type="text/javascript" language="JavaScript">'."\n";
     $result.="var select2data = new Object();\n";
     $" = '","';
     my $debug = '';
@@ -923,19 +951,23 @@ sub help_open_topic {
     }
 
     # Add the text
-    if ($text ne "") {
-	$template .= 
-            "<table bgcolor='#3333AA' cellspacing='1' cellpadding='1' border='0'><tr>".
-            "<td bgcolor='#5555FF'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
+    if ($text ne "") {	
+	$template.='<span class="LC_help_open_topic">'
+                  .'<a target="_top" href="'.$link.'">'
+                  .$text.'</a>';
     }
 
-    # Add the graphic
+    # (Always) Add the graphic
     my $title = &mt('Online Help');
     my $helpicon=&lonhttpdurl("/adm/help/help.png");
-    $template .= <<"ENDTEMPLATE";
- <a target="_top" href="$link" title="$title"><img src="$helpicon" border="0" alt="(Help: $topic)" /></a>
-ENDTEMPLATE
-    if ($text ne '') { $template.='</td></tr></table>' };
+    $template.=' <a target="_top" href="'.$link.'" title="'.$title.'">'
+              .'<img src="'.$helpicon.'" border="0"'
+              .' alt="'.&mt('Help: [_1]',$topic).'"'
+              .' title="'.$title.'"' 
+              .' /></a>';
+    if ($text ne "") {	
+        $template.='</span>';
+    }
     return $template;
 
 }
@@ -943,24 +975,31 @@ ENDTEMPLATE
 # This is a quicky function for Latex cheatsheet editing, since it 
 # appears in at least four places
 sub helpLatexCheatsheet {
-    my $other = shift;
+    my ($topic,$text,$not_author) = @_;
+    my $out;
     my $addOther = '';
-    if ($other) {
-	$addOther = Apache::loncommon::help_open_topic($other, shift,
-						       undef, undef, 600) .
-							   '</td><td>';
-    }
-    return '<table><tr><td>'.
-	$addOther .
-	&Apache::loncommon::help_open_topic("Greek_Symbols",&mt('Greek Symbols'),
-					    undef,undef,600)
-	.'</td><td>'.
-	&Apache::loncommon::help_open_topic("Other_Symbols",&mt('Other Symbols'),
-					    undef,undef,600)
-	.'</td><td>'.
-	&Apache::loncommon::help_open_topic("Authoring_Output_Tags",&mt('Output Tags'),
-	                                    undef,undef,600)
-	.'</td></tr></table>';
+    if ($topic) {
+	$addOther = '<span>'.&Apache::loncommon::help_open_topic($topic,&mt($text),
+							       undef, undef, 600).
+								   '</span> ';
+    }
+    $out = '<span>' # Start cheatsheet
+	  .$addOther
+          .'<span>'
+	  .&Apache::loncommon::help_open_topic('Greek_Symbols',&mt('Greek Symbols'),
+					       undef,undef,600)
+	  .'</span> <span>'
+	  .&Apache::loncommon::help_open_topic('Other_Symbols',&mt('Other Symbols'),
+					       undef,undef,600)
+	  .'</span>';
+    unless ($not_author) {
+        $out .= ' <span>'
+	       .&Apache::loncommon::help_open_topic('Authoring_Output_Tags',&mt('Output Tags'),
+	                                            undef,undef,600)
+	       .'</span>';
+    }
+    $out .= '</span>'; # End cheatsheet
+    return $out;
 }
 
 sub general_help {
@@ -1128,7 +1167,7 @@ sub help_open_bug {
     {
 	$template .= 
   "<table bgcolor='#AA3333' cellspacing='1' cellpadding='1' border='0'><tr>".
-  "<td bgcolor='#FF5555'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
+  "<td bgcolor='#FF5555'><a target=\"_top\" href=\"$link\"><span style=\"color:#FFFFFF;font-size:10pt;\">$text</span></a>";
     }
 
     # Add the graphic
@@ -1173,7 +1212,7 @@ sub help_open_faq {
     {
 	$template .= 
   "<table bgcolor='#337733' cellspacing='1' cellpadding='1' border='0'><tr>".
-  "<td bgcolor='#448844'><a target=\"_top\" href=\"$link\"><font color='#FFFFFF' size='2'>$text</font></a>";
+  "<td bgcolor='#448844'><a target=\"_top\" href=\"$link\"><span style=\"color:#FFFFFF; font-size:10pt;\">$text</span></a>";
     }
 
     # Add the graphic
@@ -1629,7 +1668,7 @@ sub multiple_select_form {
             $size = scalar(keys(%$hash));
         }
     }
-    $output.="\n<select name='$name' size='$size' multiple='1'>";
+    $output.="\n".'<select name="'.$name.'" size="'.$size.'" multiple="multiple">';
     my @order;
     if (ref($order) eq 'ARRAY')  {
         @order = @{$order};
@@ -1686,17 +1725,17 @@ sub select_form {
 sub display_filter {
     if (!$env{'form.show'}) { $env{'form.show'}=10; }
     if (!$env{'form.displayfilter'}) { $env{'form.displayfilter'}='currentfolder'; }
-    return '<nobr><label>'.&mt('Records [_1]',
+    return '<span class="LC_nobreak"><label>'.&mt('Records [_1]',
 			       &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,
 							   (&mt('all'),10,20,50,100,1000,10000))).
-	   '</label></nobr> <nobr>'.
+	   '</label></span> <span class="LC_nobreak">'.
            &mt('Filter [_1]',
 	   &select_form($env{'form.displayfilter'},
 			'displayfilter',
 			('currentfolder' => 'Current folder/page',
 			 'containing' => 'Containing phrase',
 			 'none' => 'None'))).
-			 '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></nobr>';
+			 '<input type="text" name="containingphrase" size="30" value="'.&HTML::Entities::encode($env{'form.containingphrase'}).'" /></span>';
 }
 
 sub gradeleveldescription {
@@ -1740,7 +1779,7 @@ sub select_level_form {
 
 =pod
 
-=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc)
+=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit)
 
 Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.  
@@ -1749,16 +1788,22 @@ See loncreateuser.pm for an example invo
 If the $includeempty flag is set, it also includes an empty choice ("no domain
 selected");
 
-If the $showdomdesc flag is set, the domain name is followed by the domain description. 
+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.  
 
 =cut
 
 #-------------------------------------------
 sub select_dom_form {
-    my ($defdom,$name,$includeempty,$showdomdesc) = @_;
+    my ($defdom,$name,$includeempty,$showdomdesc,$autosubmit) = @_;
+    my $onchange;
+    if ($autosubmit) {
+        $onchange = ' onchange="this.form.submit()"';
+    }
     my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     if ($includeempty) { @domains=('',@domains); }
-    my $selectdomain = "<select name=\"$name\" size=\"1\">\n";
+    my $selectdomain = "<select name=\"$name\" size=\"1\"$onchange>\n";
     foreach my $dom (@domains) {
         $selectdomain.="<option value=\"$dom\" ".
             ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom;
@@ -2109,14 +2154,14 @@ sub authform_kerberos {
         $autharg,$jscall);
     my ($authnum,%can_assign) =  &get_assignable_auth($in{'domain'});
     if ($in{'kerb_def_auth'} eq 'krb5') {
-       $check5 = ' checked="on"';
+       $check5 = ' checked="checked"';
     } else {
-       $check4 = ' checked="on"';
+       $check4 = ' checked="checked"';
     }
     $krbarg = $in{'kerb_def_dom'};
     if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'krb') {
-            $krbcheck = ' checked="on"';
+            $krbcheck = ' checked="checked"';
             if (defined($in{'mode'})) {
                 if ($in{'mode'} eq 'modifyuser') {
                     $krbcheck = '';
@@ -2124,10 +2169,10 @@ sub authform_kerberos {
             }
             if (defined($in{'curr_kerb_ver'})) {
                 if ($in{'curr_krb_ver'} eq '5') {
-                    $check5 = ' checked="on"';
+                    $check5 = ' checked="checked"';
                     $check4 = '';
                 } else {
-                    $check4 = ' checked="on"';
+                    $check4 = ' checked="checked"';
                     $check5 = '';
                 }
             }
@@ -2148,7 +2193,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'}) {
@@ -2157,7 +2202,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" />';
                 }
             }
         }
@@ -2218,7 +2263,7 @@ sub authform_internal{
     if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'int') {
             if ($can_assign{'int'}) {
-                $intcheck = 'checked="on" ';
+                $intcheck = 'checked="checked" ';
                 if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {
                         $intcheck = '';
@@ -2234,7 +2279,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'}) {
@@ -2243,7 +2288,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" />';
                 }
             }
         }
@@ -2273,7 +2318,7 @@ sub authform_local{
     if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'loc') {
             if ($can_assign{'loc'}) {
-                $loccheck = 'checked="on" ';
+                $loccheck = 'checked="checked" ';
                 if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {
                         $loccheck = '';
@@ -2289,7 +2334,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'}) {
@@ -2298,7 +2343,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" />';
                 }
             }
         }
@@ -2327,7 +2372,7 @@ sub authform_filesystem{
     if (defined($in{'curr_authtype'})) {
         if ($in{'curr_authtype'} eq 'fsys') {
             if ($can_assign{'fsys'}) {
-                $fsyscheck = 'checked="on" ';
+                $fsyscheck = 'checked="checked" ';
                 if (defined($in{'mode'})) {
                     if ($in{'mode'} eq 'modifyuser') {
                         $fsyscheck = '';
@@ -2340,7 +2385,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'}) {
@@ -2349,7 +2394,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" />';
                 }
             }
         }
@@ -2717,6 +2762,43 @@ sub flush_email_cache {
     &Apache::lonnet::devalidate_cache_new('emailscache',$id);
 }
 
+# -------------------------------------------------------------------- getlangs
+
+=pod
+
+=item * &getlangs($uname,$udom)
+
+Gets a user's language preference and returns it as a hash with key:
+language.
+
+=cut
+
+
+sub getlangs {
+    my ($uname,$udom) = @_;
+    if (!$udom)  { $udom =$env{'user.domain'}; }
+    if (!$uname) { $uname=$env{'user.name'};   }
+    my $id=$uname.':'.$udom;
+    my ($langs,$cached)=&Apache::lonnet::is_cached_new('userlangs',$id);
+    if ($cached) {
+        return %{$langs};
+    } else {
+        my %loadlangs=&Apache::lonnet::get('environment',['languages'],
+                                           $udom,$uname);
+        &Apache::lonnet::do_cache_new('userlangs',$id,\%loadlangs);
+        return %loadlangs;
+    }
+}
+
+sub flush_langs_cache {
+    my ($uname,$udom)=@_;
+    if (!$udom)  { $udom =$env{'user.domain'}; }
+    if (!$uname) { $uname=$env{'user.name'};   }
+    return if ($udom eq 'public' && $uname eq 'public');
+    my $id=$uname.':'.$udom;
+    &Apache::lonnet::devalidate_cache_new('userlangs',$id);
+}
+
 # ------------------------------------------------------------------ Screenname
 
 =pod
@@ -2761,17 +2843,14 @@ sub aboutmewrapper {
         return;
     }
     return '<a href="/adm/'.$domain.'/'.$username.'/aboutme"'.
-	($target?' target="$target"':'').' title="'.&mt("View this user's personal page").'">'.$link.'</a>';
+	($target?' target="$target"':'').' title="'.&mt("View this user's personal information page").'">'.$link.'</a>';
 }
 
 # ------------------------------------------------------------ Syllabus Wrapper
 
 
 sub syllabuswrapper {
-    my ($linktext,$coursedir,$domain,$fontcolor)=@_;
-    if ($fontcolor) { 
-        $linktext='<font color="'.$fontcolor.'">'.$linktext.'</font>'; 
-    }
+    my ($linktext,$coursedir,$domain)=@_;
     return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>};
 }
 
@@ -2796,6 +2875,27 @@ sub track_student_link {
 	&help_open_topic('View_recent_activity');
 }
 
+sub slot_reservations_link {
+    my ($linktext,$sname,$sdom,$target) = @_;
+    my $link ="/adm/slotrequest?command=showresv&amp;origin=aboutme";
+    my $title = 'View slot reservation history';
+    if (defined($sname) && $sname !~ /^\s*$/ &&
+        defined($sdom)  && $sdom  !~ /^\s*$/) {
+        $link .= "&amp;uname=$sname&amp;udom=$sdom";
+        $title .= ' of this student';
+    }
+    if (defined($target) && $target !~ /^\s*$/) {
+        $target = qq{target="$target"};
+    } else {
+        $target = '';
+    }
+    $title = &mt($title);
+    $linktext = &mt($linktext);
+    return qq{<a href="$link" title="$title" $target>$linktext</a>};
+# FIXME uncomment when help item created: &help_open_topic('Slot_Reservation_History');
+
+}
+
 # ===================================================== Display a student photo
 
 
@@ -2998,7 +3098,7 @@ sub fileextensions {
 
 sub display_languages {
     my %languages=();
-    foreach my $lang (&preferred_languages()) {
+    foreach my $lang (&Apache::lonlocal::preferred_languages()) {
 	$languages{$lang}=1;
     }
     &get_unprocessed_cgi($ENV{'QUERY_STRING'},['displaylanguage']);
@@ -3010,59 +3110,9 @@ sub display_languages {
     return %languages;
 }
 
-sub preferred_languages {
-    my @languages=();
-    if (($env{'request.role.adv'}) && ($env{'form.languages'})) {
-        @languages=(@languages,split(/\s*(\,|\;|\:)\s*/,$env{'form.languages'}));
-    }
-    if ($env{'course.'.$env{'request.course.id'}.'.languages'}) {
-	@languages=(@languages,split(/\s*(\,|\;|\:)\s*/,
-	         $env{'course.'.$env{'request.course.id'}.'.languages'}));
-    }
-
-    if ($env{'environment.languages'}) {
-	@languages=(@languages,
-		    split(/\s*(\,|\;|\:)\s*/,$env{'environment.languages'}));
-    }
-    my $browser=$ENV{'HTTP_ACCEPT_LANGUAGE'};
-    if ($browser) {
-	my @browser = 
-	    map { (split(/\s*;\s*/,$_))[0] } (split(/\s*,\s*/,$browser));
-	push(@languages,@browser);
-    }
-
-    foreach my $domtype ($env{'user.domain'},$env{'request.role.domain'},
-                         $Apache::lonnet::perlvar{'lonDefDomain'}) {
-        if ($domtype ne '') {
-            my %domdefs = &Apache::lonnet::get_domain_defaults($domtype);
-            if ($domdefs{'lang_def'} ne '') {
-                push(@languages,$domdefs{'lang_def'});
-            }
-        }
-    }
-    return &get_genlanguages(@languages);
-}
-
-sub get_genlanguages {
-    my (@languages) = @_;
-# turn "en-ca" into "en-ca,en"
-    my @genlanguages;
-    foreach my $lang (@languages) {
-        unless ($lang=~/\w/) { next; }
-        push(@genlanguages,$lang);
-        if ($lang=~/(\-|\_)/) {
-            push(@genlanguages,(split(/(\-|\_)/,$lang))[0]);
-        }
-    }
-    #uniqueify the languages list
-    my %count;
-    @genlanguages = map { $count{$_}++ == 0 ? $_ : () } @genlanguages;
-    return @genlanguages;
-}
-
 sub languages {
     my ($possible_langs) = @_;
-    my @preferred_langs = &preferred_languages();
+    my @preferred_langs = &Apache::lonlocal::preferred_languages();
     if (!ref($possible_langs)) {
 	if( wantarray ) {
 	    return @preferred_langs;
@@ -3083,6 +3133,29 @@ sub languages {
     return $preferred_possibilities[0];
 }
 
+sub user_lang {
+    my ($touname,$toudom,$fromcid) = @_;
+    my @userlangs;
+    if (($fromcid ne '') && ($env{'course.'.$fromcid.'.languages'} ne '')) {
+        @userlangs=(@userlangs,split(/\s*(\,|\;|\:)\s*/,
+                    $env{'course.'.$fromcid.'.languages'}));
+    } else {
+        my %langhash = &getlangs($touname,$toudom);
+        if ($langhash{'languages'} ne '') {
+            @userlangs = split(/\s*(\,|\;|\:)\s*/,$langhash{'languages'});
+        } else {
+            my %domdefs = &Apache::lonnet::get_domain_defaults($toudom);
+            if ($domdefs{'lang_def'} ne '') {
+                @userlangs = ($domdefs{'lang_def'});
+            }
+        }
+    }
+    my @languages=&Apache::lonlocal::get_genlanguages(@userlangs);
+    my $user_lh = Apache::localize->get_handle(@languages);
+    return $user_lh;
+}
+
+
 ###############################################################
 ##               Student Answer Attempts                     ##
 ###############################################################
@@ -3221,7 +3294,7 @@ sub relative_to_absolute {
     }
     $thisdir=~s-/[^/]*$--;
     foreach my $link (@rlinks) {
-	unless (($link=~/^http:\/\//i) ||
+	unless (($link=~/^https?\:\/\//i) ||
 		($link=~/^\//) ||
 		($link=~/^javascript:/i) ||
 		($link=~/^mailto:/i) ||
@@ -3798,7 +3871,7 @@ sub blocking_status {
                              &Apache::lonnet::coursedescription($course);
                         $coursedesc = $courseinfo{'description'};
                     }
-                    $category = "Group files in the course '$coursedesc'";
+                    $category = "Group portfolio in the course '$coursedesc'";
                 } else {
                     $category = 'Portfolio files belonging to ';
                     if ($env{'user.name'} eq 'public' && 
@@ -3930,7 +4003,14 @@ sub get_domainconf {
         if (ref($domconfig{'login'}) eq 'HASH') {
             if (keys(%{$domconfig{'login'}})) {
                 foreach my $key (keys(%{$domconfig{'login'}})) {
-                    $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};
+                    if (ref($domconfig{'login'}{$key}) eq 'HASH') {
+                        foreach my $img (keys(%{$domconfig{'login'}{$key}})) {
+                            $designhash{$udom.'.login.'.$key.'_'.$img} = 
+                                $domconfig{'login'}{$key}{$img};
+                        }
+                    } else {
+                        $designhash{$udom.'.login.'.$key}=$domconfig{'login'}{$key};
+                    }
                 }
             } else {
                 $legacy{'login'} = 1;
@@ -4220,7 +4300,7 @@ $realm&nbsp;
 </td>
 ENDROLE
 
-    my $titleinfo = '<span class="LC_title_bar_title">'.$title.'</span>';
+    my $titleinfo = '<h1>'.$title.'</h1>';
     if ($customtitle) {
         $titleinfo = $customtitle;
     }
@@ -4263,7 +4343,7 @@ ENDROLE
 		.'<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)."<font size=\"+1\">$lastitem</font></b></tt><br />"
+		.&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();
@@ -4310,8 +4390,8 @@ ENDROLE
     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><td>$upperleft</td>
+    <td>$messages&nbsp;</td>
 </tr>
 <tr><td>$titleinfo $dc_info $menu</td>
 $roleinfo
@@ -4428,6 +4508,7 @@ sub standard_css {
     my $img    = &designparm($function.'.img',   $domain);
     my $tabbg  = &designparm($function.'.tabbg', $domain);
     my $font   = &designparm($function.'.font',  $domain);
+#second colour for later usage
     my $sidebg = &designparm($function.'.sidebg',$domain);
     my $pgbg_or_bgcolor =
 	         $bgcolor ||
@@ -4437,6 +4518,10 @@ 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;
@@ -4454,6 +4539,7 @@ sub standard_css {
     my $mail_other_hover     = '#669999';
     my $table_header         = '#DDDDDD';
     my $feedback_link_bg     = '#BBBBBB';
+    my $lg_border_color	     = '#C8C8C8';
 
     my $border = ($env{'browser.type'} eq 'explorer' ||
 		  $env{'browser.type'} eq 'safari'     ) ? '0px 2px 0px 2px'
@@ -4461,23 +4547,50 @@ sub standard_css {
 
 
     return <<END;
-h1, h2, h3, th { font-family: $sans }
-a:focus { color: red; background: yellow } 
-table.thinborder,
+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;
 }
 table.thinborder tr td {
   border-style: solid;
-  border-width: 1px
+  border-width: 1px;
+  border-color: $lg_border_color;
 }
 
 form, .inline { display: inline; }
-.center { text-align: center; }
-.LC_filename {font-family: $mono; white-space:pre;}
+
+.LC_right {text-align:right;}
+.LC_middle {vertical-align:middle;}
+
+/* just for tests */
+.LC_400Box {width:400px; }
+/* end */
+
+.LC_filename {
+  font-family: $mono;
+  white-space:pre;
+}
+
+.LC_fileicon {
+  border: none;
+  height: 1.3em;
+  vertical-align: text-bottom;
+  margin-right: 0.3em;
+  text-decoration:none;
+}
+
 .LC_error {
   color: red;
   font-size: larger;
@@ -4497,8 +4610,10 @@ form, .inline { display: inline; }
 }
 
 .LC_icon {
-  border: 0px;
+  border: none;
+  vertical-align: middle;
 }
+
 .LC_indexer_icon {
   border: 0px;
   height: 22px;
@@ -4506,11 +4621,44 @@ form, .inline { display: inline; }
 .LC_docs_spacer {
   width: 25px;
   height: 1px;
-  border: 0px;
+  border: none;
 }
 
 .LC_internal_info {
-  color: #999;
+  color: #999999;
+}
+
+.LC_discussion {
+   background: $tabbg;
+   border: 1px solid black;
+   margin: 2px;
+}
+
+.LC_disc_action_links_bar {
+   background: $tabbg;
+   font-family: $sans;
+   border: 0px;
+   margin: 2px;
+}
+
+.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 {
@@ -4526,7 +4674,7 @@ table#LC_top_nav, table#LC_menubuttons,t
   padding: 0px;
 }
 
-table#LC_title_bar, table.LC_breadcrumbs, 
+table#LC_title_bar, table.LC_breadcrumbs,
 table#LC_title_bar.LC_with_remote {
   width: 100%;
   border-color: $pgbg;
@@ -4538,7 +4686,6 @@ table#LC_title_bar.LC_with_remote {
   border-collapse: collapse;
   padding: 0px;
 }
-
 table.LC_docs_path {
   width: 100%;
   border: 0;
@@ -4551,43 +4698,35 @@ table.LC_docs_path {
 table#LC_title_bar td {
   background: $tabbg;
 }
-table#LC_title_bar td.LC_title_bar_who {
+table#LC_title_bar .LC_title_bar_who {
   background: $tabbg;
   color: $font;
   font: small $sans;
   text-align: right;
+  margin: 0px;
 }
-span.LC_metadata {
-    font-family: $sans;
+table#LC_title_bar .LC_title_bar_name {
+  margin: 0px;
 }
-span.LC_title_bar_title {
-  font: bold x-large $sans;
+table#LC_title_bar .LC_title_bar_role {
+  margin: 0px;
 }
-table#LC_title_bar td.LC_title_bar_domain_logo {
-  background: $sidebg;
-  text-align: right;
-  padding: 0px;
+table#LC_title_bar .LC_title_bar_realm {
+  margin: 0px;
 }
-table#LC_title_bar td.LC_title_bar_role_logo {
-  background: $sidebg;
-  padding: 0px;
+span.LC_metadata {
+    font-family: $sans;
 }
 
-table#LC_menubuttons_mainmenu {
-  width: 100%;
-  border: 0px;
-  border-spacing: 1px;
-  padding: 0px 1px;
-  margin: 0px;
-  border-collapse: separate;
-}
-table#LC_menubuttons img, table#LC_menubuttons_mainmenu img {
+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;
 }
 table#LC_top_nav td a, div#LC_top_nav a {
   color: $font;
@@ -4632,16 +4771,32 @@ table#LC_mainmenu td.LC_mainmenu_column
     vertical-align: top;
 }
 
+.LC_fontsize_small
+{
+ font-size: 70%;
+}
+
+.LC_fontsize_medium
+{
+ font-size: 85%;
+}
+
+.LC_fontsize_large
+{
+ font-size: 120%;
+}
+
 .LC_menubuttons_inline_text {
   color: $font;
   font-family: $sans;
-  font-size: smaller;
+  font-size: 90%;
+  padding-left:3px;
 }
 
 .LC_menubuttons_link {
   text-decoration: none;
 }
-#2008--9-5: new menu style sheet.Changed category
+/*2008--9-5: new menu style sheet.Changed category*/
 .LC_menubuttons_category {
   color: $font;
   background: $pgbg;
@@ -4651,13 +4806,10 @@ table#LC_mainmenu td.LC_mainmenu_column
 }
 
 td.LC_menubuttons_text {
-  width: 90%;
-  color: $font;
-  font-family: $sans;
+ 	color: $font;
 }
 
-td.LC_menubuttons_img {
-}
+
 
 .LC_current_location {
   font-family: $sans;
@@ -4669,34 +4821,6 @@ td.LC_menubuttons_img {
   font-weight: bold;
 }
 
-.LC_rolesmenu_is {
-  font-family: $sans;
-}
-
-.LC_rolesmenu_selected {
-  font-family: $sans;
-}
-
-.LC_rolesmenu_future {
-  font-family: $sans;
-}
-
-
-.LC_rolesmenu_will {
-  font-family: $sans;
-}
-
-.LC_rolesmenu_will_not {
-  font-family: $sans;
-}
-
-.LC_rolesmenu_expired {
-  font-family: $sans;
-}
-
-.LC_rolesinfo {
-  font-family: $sans;
-}
 
 .LC_dropadd_labeltext {
   font-family: $sans;
@@ -4709,7 +4833,11 @@ td.LC_menubuttons_img {
 }
 
 .LC_roleslog_note {
-  font-size: smaller;
+  font-size: small;
+}
+
+.LC_mail_functions {
+    font-weight: bold;
 }
 
 table.LC_aboutme_port {
@@ -4742,16 +4870,24 @@ table.LC_data_table tr th, table.LC_cale
 table.LC_prior_tries tr th {
   font-weight: bold;
   background-color: $data_table_head;
-  font-size: smaller;
+  font-size:90%;
+}
+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_data_table tr.LC_odd_row > td,
+table.LC_pick_box tr > td.LC_odd_row,
 table.LC_aboutme_port tr td {
   background-color: $data_table_light;
   padding: 2px;
 }
 table.LC_data_table tr.LC_even_row > td,
+table.LC_pick_box tr > td.LC_even_row,
 table.LC_aboutme_port tr.LC_even_row td {
   background-color: $data_table_dark;
+  padding: 2px;
 }
 table.LC_data_table tr.LC_data_table_highlight td {
   background-color: $data_table_darker;
@@ -4774,7 +4910,7 @@ table.LC_nested tr.LC_empty_row td {
 table.LC_nested_outer tr th {
   font-weight: bold;
   background-color: $data_table_head;
-  font-size: smaller;
+  font-size: small;
   border-bottom: 1px solid #000000;
 }
 table.LC_nested_outer tr td.LC_subheader {
@@ -4785,7 +4921,7 @@ table.LC_nested_outer tr td.LC_subheader
   text-align: right;
 }
 table.LC_nested tr.LC_info_row td {
-  background-color: #CCC;
+  background-color: #CCCCCC;
   font-weight: bold;
   font-size: small;
   text-align: center;
@@ -4795,7 +4931,7 @@ table.LC_nested_outer tr th.LC_left_item
   text-align: left;
 }
 table.LC_nested td {
-  background-color: #FFF;
+  background-color: #FFFFFF;
   font-size: small;
 }
 table.LC_nested_outer tr th.LC_right_item,
@@ -4806,18 +4942,18 @@ table.LC_nested tr td.LC_right_item {
 }
 
 table.LC_nested tr.LC_odd_row td {
-  background-color: #EEE;
+  background-color: #EEEEEE;
 }
 
 table.LC_createuser {
 }
 
 table.LC_createuser tr.LC_section_row td {
-  font-size: smaller;
+  font-size: small;
 }
 
 table.LC_createuser tr.LC_info_row td  {
-  background-color: #CCC;
+  background-color: #CCCCCC;
   font-weight: bold;
   text-align: center;
 }
@@ -4839,13 +4975,16 @@ table.LC_calendar tr td.LC_calendar_day_
 table.LC_calendar tr td.LC_calendar_day_current {
   background-color: $data_table_highlight;
 }
-
 table.LC_mail_list tr.LC_mail_new {
   background-color: $mail_new;
 }
 table.LC_mail_list 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 {
   background-color: $mail_read;
 }
@@ -4864,76 +5003,47 @@ table.LC_mail_list tr.LC_mail_other {
 table.LC_mail_list tr.LC_mail_other:hover {
   background-color: $mail_other_hover;
 }
-table.LC_mail_list tr.LC_mail_even {
-}
-table.LC_mail_list tr.LC_mail_odd {
-}
 
-
-table#LC_portfolio_actions {
-  width: auto;
-  background: $pgbg;
-  border: 0px;
-  border-spacing: 2px 2px;
-  padding: 0px;
-  margin: 0px;
-  border-collapse: separate;
-}
-table#LC_portfolio_actions td.LC_label {
-  background: $tabbg;
-  text-align: right;
+table.LC_data_table tr > td.LC_browser_file,
+table.LC_data_table tr > td.LC_browser_file_published {
+  background: #CCFF88;
 }
-table#LC_portfolio_actions td.LC_value {
-  background: $tabbg;
+table.LC_data_table tr > td.LC_browser_file_locked,
+table.LC_data_table tr > td.LC_browser_file_unpublished {
+  background: #FFAA99;
 }
-
-table#LC_cstr_controls {
-  width: 100%;
-  border-collapse: collapse;
+table.LC_data_table tr > td.LC_browser_file_obsolete {
+  background: #AAAAAA;
 }
-table#LC_cstr_controls tr td {
-  border: 4px solid $pgbg;
-  padding: 4px;
-  text-align: center;
-  background: $tabbg;
+table.LC_data_table tr > td.LC_browser_file_modified,
+table.LC_data_table tr > td.LC_browser_file_metamodified {
+  background: #FFFF77;
 }
-table#LC_cstr_controls tr th {
-  border: 4px solid $pgbg;
-  background: $table_header;
-  text-align: center;
-  font-family: $sans;
-  font-size: smaller;
+table.LC_data_table tr.LC_browser_folder > td {
+  background: #CCCCFF;
 }
 
-table#LC_browser {
- 
-}
-table#LC_browser tr th {
-  background: $table_header;
-}
-table#LC_browser tr td {
-  padding: 2px;
+table.LC_data_table tr > td.LC_roles_is {
+/*  background: #77FF77; */
 }
-table#LC_browser tr.LC_browser_file,
-table#LC_browser tr.LC_browser_file_published {
-  background: #CCFF88;
+table.LC_data_table tr > td.LC_roles_future {
+  background: #FFFF77;
 }
-table#LC_browser tr.LC_browser_file_locked,
-table#LC_browser tr.LC_browser_file_unpublished {
-  background: #FFAA99;
+table.LC_data_table tr > td.LC_roles_will {
+  background: #FFAA77;
 }
-table#LC_browser tr.LC_browser_file_obsolete {
-  background: #AAAAAA;
+table.LC_data_table tr > td.LC_roles_expired {
+  background: #FF7777;
 }
-table#LC_browser tr.LC_browser_file_modified,
-table#LC_browser tr.LC_browser_file_metamodified {
-  background: #FFFF77;
+table.LC_data_table tr > td.LC_roles_will_not {
+  background: #AAFF77;
 }
-table#LC_browser tr.LC_browser_folder {
-  background: #CCCCFF;
+table.LC_data_table tr > td.LC_roles_selected {
+  background: #11CC55;
 }
+
 span.LC_current_location {
-  font-size: x-large;
+  font-size:larger;
   background: $pgbg;
 }
 
@@ -4960,7 +5070,7 @@ span.LC_parm_folder, span.LC_parm_symb {
 }
 
 td.LC_parm_overview_level_menu, td.LC_parm_overview_map_menu,
-td.LC_parm_overview_parm_selectors, td.LC_parm_overview_parm_restrictions {
+td.LC_parm_overview_parm_selectors,td.LC_parm_overview_restrictions  {
   border: 1px solid black;
   border-collapse: collapse;
 }
@@ -5032,6 +5142,7 @@ table.LC_pick_box td.LC_pick_box_title {
   background: $tabbg;
   font-weight: bold;
   text-align: right;
+  vertical-align: top;
   width: 184px;
   padding: 8px;
 }
@@ -5171,7 +5282,7 @@ table.LC_descriptive_input td.LC_descrip
 div.LC_feedback_link {
   clear: both;
   background: white;
-  width: 100%;  
+  width: 100%;
 }
 span.LC_feedback_link {
   background: $feedback_link_bg;
@@ -5202,7 +5313,7 @@ table.LC_prior_tries td {
   background: #FFAAAA ! important;
   color: black;
 }
-.LC_answer_not_charged_try, 
+.LC_answer_not_charged_try,
 .LC_answer_no_grade,
 .LC_answer_late {
   background: #FFFFAA;
@@ -5220,8 +5331,6 @@ table.LC_prior_tries td {
   background: orange;
   color: black;
 }
-
-
 span.LC_prior_numerical,
 span.LC_prior_string,
 span.LC_prior_custom,
@@ -5249,6 +5358,7 @@ table.LC_prior_match tr td {
   border: 1px solid #000000;
 }
 
+td.LC_nobreak,
 span.LC_nobreak {
   white-space: nowrap;
 }
@@ -5267,19 +5377,10 @@ table.LC_docs_documents {
   border-width: 0px;
   border-collapse: collapse;
 }
-
 table.LC_docs_documents td.LC_docs_document {
   border: 2px solid black;
   padding: 4px;
 }
-
-.LC_docs_course_commands div {
-  float: left;
-  border: 4px solid #AAAAAA;
-  padding: 4px;
-  background: #DDDDCC;
-}
-
 .LC_docs_entry_move {
   border: 0px;
   border-collapse: collapse;
@@ -5352,7 +5453,7 @@ table.LC_double_column tr td.LC_left_col
 
 table.LC_double_column tr td.LC_right_col {
   top: 2px;
-  right: 2px; 
+  right: 2px;
   width: 47%;
   vertical-align: top;
 }
@@ -5377,23 +5478,6 @@ div.LC_clear_float_footer {
 }
 
 
-div.LC_grade_select_mode {
-  font-family: $sans;
-}
-div.LC_grade_select_mode div div {
-  margin: 5px;
-}
-div.LC_grade_select_mode_selector {
-  margin: 5px;
-  float: left;
-}
-div.LC_grade_select_mode_selector_header {
-  font: bold medium $sans;
-}
-div.LC_grade_select_mode_type {
-  clear: left;
-}
-
 div.LC_grade_show_user {
   margin-top: 20px;
   border: 1px solid black;
@@ -5401,7 +5485,8 @@ div.LC_grade_show_user {
 div.LC_grade_user_name {
   background: #DDDDEE;
   border-bottom: 1px solid black;
-  font: bold large $sans;
+  font-weight: bold;
+  font-size: large;
 }
 div.LC_grade_show_user_odd_row div.LC_grade_user_name {
   background: #DDEEDD;
@@ -5420,7 +5505,8 @@ div.LC_grade_show_problem_header,
 div.LC_grade_submissions_header,
 div.LC_grade_message_center_header,
 div.LC_grade_assign_header {
-  font: bold large $sans;
+  font-weight: bold;
+  font-size: large;
 }
 div.LC_grade_show_problem_problem,
 div.LC_grade_submissions_body,
@@ -5431,7 +5517,8 @@ div.LC_grade_assign_body {
   background: #FFFFFF;
 }
 span.LC_grade_check_note {
-  font: normal medium $sans;
+  font-weight: normal;
+  font-size: medium;
   display: inline;
   position: absolute;
   right: 1em;
@@ -5441,12 +5528,13 @@ table.LC_scantron_action {
   width: 100%;
 }
 table.LC_scantron_action tr th {
-  font: normal bold $sans;
+  font-weight:bold;
+  font-style:normal;
 }
-
-div.LC_edit_problem_header, 
+.LC_edit_problem_header,
 div.LC_edit_problem_footer {
-  font: normal medium $sans;
+  font-weight: normal;
+  font-size:  medium;
   margin: 2px;
 }
 div.LC_edit_problem_header,
@@ -5463,12 +5551,14 @@ div.LC_edit_problem_header_edit_row {
   margin-bottom: 5px;
 }
 div.LC_edit_problem_header_title {
-  font: larger bold $sans;
+  font-weight: bold;
+  font-size: larger;
   background: $tabbg;
   padding: 3px;
 }
 table.LC_edit_problem_header_title {
-  font: larger bold $sans;
+  font-size: larger;
+  font-weight:  bold;
   width: 100%;
   border-color: $pgbg;
   border-style: solid;
@@ -5516,10 +5606,472 @@ table#LC_mainmenu td.LC_mainmenu_col_fie
   font-size: small;
   font-weight: bold;
 }
-fieldset#LC_mainmenu_fieldset {
-  margin:0px 10px 10px 0px;
+div.LC_createcourse {
+    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.
+# --------------------------*/
+
+a:hover,
+ol.LC_smallMenu a:hover,
+ol#LC_MenuBreadcrumbs a:hover,
+ol#LC_PathBreadcrumbs a:hover,
+ul#LC_TabMainMenuContent a:hover,
+.LC_FormSectionClearButton input:hover
+ul.LC_TabContent   li:hover a{
+	color:#BF2317;
+        text-decoration:none;
+}
+
+h1 {
+	padding:5px 10px 5px 20px;
+	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;
+}
+.LC_noBorder {
+        border:0px;
+}
+
+
+/* Main Header with discription of Person, Course, etc. */
+
+.LC_Right {
+        float: right;
+        margin: 0px;
+        padding: 0px;
+}
+
+.LC_FormSectionClearButton input {
+        background-color:transparent;
+        border:0px;
+        cursor:pointer;
+        text-decoration:underline;
+}
+
+.LC_help_open_topic {
+        color: #FFFFFF;
+        background-color: #EEEEFF;
+        margin: 1px;
+        padding: 4px;
+        border: 1px solid #000033;
+        white-space: nowrap;
+/*		vertical-align: middle; */
+}
+
+dl,ul,div,fieldset {
+	margin: 10px 10px 10px 0px;
+	overflow:hidden;
+}
+ol.LC_smallMenu, ol#LC_PathBreadcrumbs {
+	margin: 0px;
+}
+
+ol.LC_smallMenu li {
+	display: inline;
+	padding: 5px 5px 0px 10px;
+	vertical-align: top;
+}
+
+ol.LC_smallMenu li img {
+	vertical-align: bottom;
+}
+
+ol.LC_smallMenu a {
+	font-size: 90%;
+	color: RGB(80, 80, 80);
+	text-decoration: none;
+}
+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;
+}
+ul.LC_TabContent {
+	min-height:1.6em;
+}
+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;
+}
+
+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;
+}
+.LC_BoxPadding
+{
+	padding: 10px;
+}
+.LC_ContentBoxSpecial
+{
+	border: solid 1px $lg_border_color;
+}
+.LC_ContentBoxSpecialContactInfo
+{
+	border: solid 1px $lg_border_color;
+	max-width:25%;
+	min-width:25%;
+}
+.LC_AboutMe_Image
+{
+	float:left;
+	margin-right:10px;
+}
+.LC_Clear_AboutMe_Image
+{
+	clear:left;
+}
+dl.LC_ListStyleClean dt {
+	padding-right: 5px;
+	display: table-header-group;
+}
+
+dl.LC_ListStyleClean dd {
+	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_ListStyleSimple li,
+.LC_ListStyleSimple dd,
+.LC_ListStyleNormal li,
+.LC_ListStyleNormal dd,
+.LC_ListStyleSpecial li,
+.LC_ListStyleSpecial dd
+	{
+	margin: 0px;
+	padding: 5px 5px 5px 10px;
+	clear: both;
+}
+
+.LC_ListStyleClean li,
+.LC_ListStyleClean dd {
+	padding-top: 0px;
+	padding-bottom: 0px;
+}
+
+.LC_ListStyleSimple dd,
+.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;
+}
+
+table.LC_SimpleTable {
+	margin:5px;
+	border:solid 1px $lg_border_color;
+	}
+
+table.LC_SimpleTable tr {
+	padding:0px;
+	border:solid 1px $lg_border_color;
+}
+table.LC_SimpleTable thead{
+	 background:rgb(220,220,220);
+}
+
+div.LC_columnSection {
+	display: block;
+	clear: both;
+	overflow: hidden;
+	margin:0px;
+}
+
+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:90%;
+	padding: 10px;
+	height: auto;
+	background-color:#FFFFFF;
+	border:1px solid #CCCCCC;
+}
+
+
+.LC_loginpage_loginContainer {
+	float:left;
+	width: 182px;
+	padding: 2px;
+	border:1px solid #CCCCCC;
+	background-color:$loginbg;
+}
+
+.LC_loginpage_loginContainer h2{
+	margin-top:0;
+	display:block;
+	background:$bgcol;
+	color:$textcol;
+	padding-left:5px;
+}
+
+.LC_loginpage_loginInfo {
+	float:left;
+	width:182px;
+	border:1px solid #CCCCCC;
+	padding:2px;
+}
+
+.LC_loginpage_space {
+	clear: both;
+	margin-bottom: 20px;
+	border-bottom: 1px solid #CCCCCC;
+}
+
+.LC_loginpage_floatLeft {
+	float: left;
+	width: 200px;
+	margin: 0;
+}
+
+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_tableOfContent{
+    border-collapse: collapse;
+}
+
+table.LC_tableBrowseRes a,
+table.LC_tableOfContent a {
+        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;
+}
+
+a#LC_content_toolbar_firsthomework{
+	background-image:url(/res/adm/pages/open-first-problem.gif);
+}
+
+a#LC_content_toolbar_launchnav{
+	background-image:url(/res/adm/pages/start-navigation.gif);
+}
+
+a#LC_content_toolbar_closenav{
+	background-image:url(/res/adm/pages/close-navigation.gif);
+}
+
+a#LC_content_toolbar_everything{
+	background-image:url(/res/adm/pages/show-all.gif);
+}
+
+a#LC_content_toolbar_uncompleted{
+	background-image:url(/res/adm/pages/show-incomplete-problems.gif);
+}
+
+#LC_content_toolbar_clearbubbles{
+	background-image:url(/res/adm/pages/mark-discussionentries-read.gif);
+}
+
+a#LC_content_toolbar_changefolder{
+	background : url(/res/adm/pages/close-all-folders.gif) top center ;
+}
+
+a#LC_content_toolbar_changefolder_toggled{
+	background-image:url(/res/adm/pages/open-all-folders.gif);
+}
+
+ul#LC_toolbar li a:hover{
+	background-position: bottom center;
+}
+
+ul#LC_toolbar{
+	padding:0;
+	margin: 2px;
+	list-style:none;
+	position:relative;
+	background-color:white;
+}
 
+ul#LC_toolbar li{
+	border:1px solid white;
+	padding:0;
+	margin: 0;
+    float: left;
+	display:inline;
+	vertical-align:middle;
 }
+
+
+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_functionslist li {
+  float: left;
+  white-space: nowrap;
+  height: 35px; /* at least as high as heighest list item */
+  margin: 0px 15px 15px 10px;
+}
+
+
 END
 }
 
@@ -5783,10 +6335,28 @@ sub start_page {
     }
 
     if ($args->{'js_ready'}) {
-	$result = &js_ready($result);
+		$result = &js_ready($result);
     }
     if ($args->{'html_encode'}) {
-	$result = &html_encode($result);
+		$result = &html_encode($result);
+    }
+
+	#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
+		if (exists($args->{'bread_crumbs'}) and ref($args->{'bread_crumbs'}) eq 'ARRAY') {         
+			foreach my $crumb (@{$args->{'bread_crumbs'}}){
+				&Apache::lonhtmlcommon::add_breadcrumb($crumb);
+			}
+		}
+
+		#if bread_crumbs_component exists show it as headline else show only the breadcrumbs
+		if(exists($args->{'bread_crumbs_component'})){
+			$result .= &Apache::lonhtmlcommon::breadcrumbs($args->{'bread_crumbs_component'});
+		}else{
+			$result .= &Apache::lonhtmlcommon::breadcrumbs();
+		}
     }
     return $result;
 }
@@ -5934,7 +6504,7 @@ sub simple_error_page {
     }
 
     sub start_data_table_empty_row {
-	$row_count[0]++;
+#	$row_count[0]++;
 	return  '<tr class="LC_empty_row" >'."\n";;
     }
 
@@ -6536,6 +7106,8 @@ If the user's status includes multiple t
 the largest default quota which applies to the user determines the
 default quota returned.
 
+=back
+
 =cut
 
 ###############################################
@@ -6548,21 +7120,37 @@ sub default_quota {
                                             ['quotas'],$udom);
     if (ref($quotahash{'quotas'}) eq 'HASH') {
         if ($inststatus ne '') {
-            my @statuses = split(/:/,$inststatus);
+            my @statuses = map { &unescape($_); } split(/:/,$inststatus);
             foreach my $item (@statuses) {
-                if ($quotahash{'quotas'}{$item} ne '') {
-                    if ($defquota eq '') {
-                        $defquota = $quotahash{'quotas'}{$item};
-                        $settingstatus = $item;
-                    } elsif ($quotahash{'quotas'}{$item} > $defquota) {
-                        $defquota = $quotahash{'quotas'}{$item};
-                        $settingstatus = $item;
+                if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
+                    if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') {
+                        if ($defquota eq '') {
+                            $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};
+                            $settingstatus = $item;
+                        } elsif ($quotahash{'quotas'}{'defaultquota'}{$item} > $defquota) {
+                            $defquota = $quotahash{'quotas'}{'defaultquota'}{$item};
+                            $settingstatus = $item;
+                        }
+                    }
+                } else {
+                    if ($quotahash{'quotas'}{$item} ne '') {
+                        if ($defquota eq '') {
+                            $defquota = $quotahash{'quotas'}{$item};
+                            $settingstatus = $item;
+                        } elsif ($quotahash{'quotas'}{$item} > $defquota) {
+                            $defquota = $quotahash{'quotas'}{$item};
+                            $settingstatus = $item;
+                        }
                     }
                 }
             }
         }
         if ($defquota eq '') {
-            $defquota = $quotahash{'quotas'}{'default'};
+            if (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
+                $defquota = $quotahash{'quotas'}{'defaultquota'}{'default'};
+            } else {
+                $defquota = $quotahash{'quotas'}{'default'};
+            }
             $settingstatus = 'default';
         }
     } else {
@@ -6998,6 +7586,7 @@ sub personal_data_fieldtitles {
                         middlename => 'Middle Name',
                         generation => 'Generation',
                         gen => 'Generation',
+                        inststatus => 'Affiliation',
                    );
     return %fieldtitles;
 }
@@ -7067,8 +7656,57 @@ sub get_institutional_codes {
 
 =pod
 
+=head1 Slot Helpers
+
+=over 4
+
+=item * sorted_slots()
+
+Sorts an array of slot names in order of slot start time (earliest first). 
+
+Inputs:
+
+=over 4
+
+slotsarr  - Reference to array of unsorted slot names.
+
+slots     - Reference to hash of hash, where outer hash keys are slot names.
+
+=back
+
+Returns:
+
+=over 4
+
+sorted   - An array of slot names sorted by the start time of the slot.
+
 =back
 
+=back
+
+=cut
+
+
+sub sorted_slots {
+    my ($slotsarr,$slots) = @_;
+    my @sorted;
+    if ((ref($slotsarr) eq 'ARRAY') && (ref($slots) eq 'HASH')) {
+        @sorted =
+            sort {
+                     if (ref($slots->{$a}) && ref($slots->{$b})) {
+                         return $slots->{$a}{'starttime'} <=> $slots->{$b}{'starttime'}
+                     }
+                     if (ref($slots->{$a})) { return -1;}
+                     if (ref($slots->{$b})) { return 1;}
+                     return 0;
+                 } @{$slotsarr};
+    }
+    return @sorted;
+}
+
+
+=pod
+
 =head1 HTTP Helpers
 
 =over 4
@@ -7358,9 +7996,9 @@ sub upload_embedded {
                                    '&nbsp;<a href="'.$url.'">'.
                                    $orig_uploaded_filename.'</a><br />';
                     } else {
-                        $output .= '<font size="+2">'.
+                        $output .= '<span class=\"LC_fontsize_large\">'.
                                    &mt('View embedded file: [_1]','<a href="'.$url.'">'.
-                                   $orig_uploaded_filename.'</a>').'</font><br />';
+                                   $orig_uploaded_filename.'</a>').'</span><br />';
                     }
                 }
                 close($fh);
@@ -7619,7 +8257,7 @@ sub upfile_select_html {
 #                 xml   => &mt('HTML/XML'),
                  );
     my $Str = '<input type="file" name="upfile" size="50" />'.
-        '<br />Type: <select name="upfiletype">';
+        '<br />'.&mt('Type').': <select name="upfiletype">';
     foreach my $type (sort(keys(%Types))) {
         $Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n";
     }
@@ -8363,9 +9001,10 @@ sub restore_settings {
 
 =item * &build_recipient_list()
 
-Build recipient lists for three types of e-mail:
-(a) Error Reports, (b) Package Updates, (c) Help requests, generated by
-lonerrorhandler.pm, CHECKRPMS and lonsupportreq.pm respectively.
+Build recipient lists for four 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.
 
 Inputs:
 defmail (scalar - email address of default recipient), 
@@ -8389,17 +9028,21 @@ sub build_recipient_list {
     my %domconfig =
          &Apache::lonnet::get_dom('configuration',['contacts'],$defdom);
     if (ref($domconfig{'contacts'}) eq 'HASH') {
-        if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') {
-            my @contacts = ('adminemail','supportemail');
-            foreach my $item (@contacts) {
-                if ($domconfig{'contacts'}{$mailing}{$item}) {
-                    my $addr = $domconfig{'contacts'}{$item}; 
-                    if (!grep(/^\Q$addr\E$/,@recipients)) {
-                        push(@recipients,$addr);
+        if (exists($domconfig{'contacts'}{$mailing})) {
+            if (ref($domconfig{'contacts'}{$mailing}) eq 'HASH') {
+                my @contacts = ('adminemail','supportemail');
+                foreach my $item (@contacts) {
+                    if ($domconfig{'contacts'}{$mailing}{$item}) {
+                        my $addr = $domconfig{'contacts'}{$item}; 
+                        if (!grep(/^\Q$addr\E$/,@recipients)) {
+                            push(@recipients,$addr);
+                        }
                     }
+                    $otheremails = $domconfig{'contacts'}{$mailing}{'others'};
                 }
-                $otheremails = $domconfig{'contacts'}{$mailing}{'others'};
             }
+        } elsif ($origmail ne '') {
+            push(@recipients,$origmail);
         }
     } elsif ($origmail ne '') {
         push(@recipients,$origmail);
@@ -8670,7 +9313,7 @@ sub assign_categories_table {
                     my $checked = '';
                     if (@currcategories > 0) {
                         if (grep(/^\Q$item\E$/,@currcategories)) {
-                            $checked = ' checked="checked" ';
+                            $checked = ' checked="checked"';
                         }
                     }
                     $output .= '<tr '.$css_class.'><td><span class="LC_nobreak">'.
@@ -8736,7 +9379,7 @@ sub assign_category_rows {
                     if (ref($currcategories) eq 'ARRAY') {
                         if (@{$currcategories} > 0) {
                             if (grep(/^\Q$item\E$/,@{$currcategories})) {
-                                $checked = ' checked="checked" ';
+                                $checked = ' checked="checked"';
                             }
                         }
                     }
@@ -9043,7 +9686,9 @@ sub construct_course {
                    'policy.email',
                    'comment.email',
                    'pch.users.denied',
-                   'plc.users.denied'],
+                   'plc.users.denied',
+                   'hidefromcat',
+                   'categories'],
                    $$crsudom,$$crsunum);
     }
 
@@ -9271,10 +9916,10 @@ sub construct_course {
         $outcome .= ($fatal?$errtext:'read ok').' - ';
         my $title; my $url;
         if ($args->{'firstres'} eq 'syl') {
-	    $title='Syllabus';
+	    $title=&mt('Syllabus');
             $url='/public/'.$$crsudom.'/'.$$crsunum.'/syllabus';
         } else {
-            $title='Navigate Contents';
+            $title=&mt('Navigate Contents');
             $url='/adm/navmaps';
         }
 
@@ -9328,28 +9973,14 @@ sub icon {
     return &lonhttpdurl($iconname);
 } 
 
-sub lonhttpd_port {
-    my $lonhttpd_port=$Apache::lonnet::perlvar{'lonhttpdPort'};
-    if (!defined($lonhttpd_port)) { $lonhttpd_port='8080'; }
-    # IE doesn't like a secure page getting images from a non-secure
-    # port (when logging we haven't parsed the browser type so default
-    # back to secure
-    if ((!exists($env{'browser.type'}) || $env{'browser.type'} eq 'explorer')
-	&& $ENV{'SERVER_PORT'} == 443) {
-	return 443;
-    }
-    return $lonhttpd_port;
-
-}
-
 sub lonhttpdurl {
+#
+# Had been used for "small fry" static images on separate port 8080.
+# Modify here if lightweight http functionality desired again.
+# Currently eliminated due to increasing firewall issues.
+#
     my ($url)=@_;
-
-    my $lonhttpd_port = &lonhttpd_port();
-    if ($lonhttpd_port == 443) {
-	return 'https://'.$ENV{'SERVER_NAME'}.$url;
-    }
-    return 'http://'.$ENV{'SERVER_NAME'}.':'.$lonhttpd_port.$url;
+    return $url;
 }
 
 sub connection_aborted {
@@ -9515,6 +10146,17 @@ sub init_user_environment {
 	    }
 	}
 
+        foreach my $tool ('aboutme','blog','portfolio') {
+            $userenv{'availabletools.'.$tool} = 
+                &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
+        }
+
+        foreach my $crstype ('official','unofficial') {
+            $userenv{'canrequest.'.$crstype} =
+                &Apache::lonnet::usertools_access($username,$domain,$crstype,
+                                                  'reload','requestcourses');
+        }
+
 	$env{'user.environment'} = "$lonids/$cookie.id";
 	
 	if (tie(my %disk_env,'GDBM_File',"$lonids/$cookie.id",
@@ -9527,8 +10169,8 @@ sub init_user_environment {
 	    }
 	    untie(%disk_env);
 	} else {
-	    &Apache::lonnet::logthis("<font color=\"blue\">WARNING: ".
-			   'Could not create environment storage in lonauth: '.$!.'</font>');
+	    &Apache::lonnet::logthis("<span style=\"color:blue;\">WARNING: ".
+			   'Could not create environment storage in lonauth: '.$!.'</span>');
 	    return 'error: '.$!;
 	}
     }
@@ -9553,7 +10195,7 @@ sub _add_to_env {
 # --- Get the symbolic name of a problem and the url
 sub get_symb {
     my ($request,$silent) = @_;
-    (my $url=$env{'form.url'}) =~ s-^http://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
+    (my $url=$env{'form.url'}) =~ s-^https?\://($ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'})--;
     my $symb=($env{'form.symb'} ne '' ? $env{'form.symb'} : (&Apache::lonnet::symbread($url)));
     if ($symb eq '') {
         if (!$silent) {
@@ -9580,11 +10222,13 @@ sub get_annotation {
 }
 
 sub clean_symb {
-    my ($symb) = @_;
+    my ($symb,$delete_enc) = @_;
 
     &Apache::lonenc::check_decrypt(\$symb);
     my $enc = $env{'request.enc'};
-    delete($env{'request.enc'});
+    if ($delete_enc) {
+        delete($env{'request.enc'});
+    }
 
     return ($symb,$enc);
 }