--- loncom/interface/loncommon.pm	2008/12/14 00:33:35	1.715
+++ loncom/interface/loncommon.pm	2009/05/11 17:12:25	1.811
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.715 2008/12/14 00:33:35 raeburn Exp $
+# $Id: loncommon.pm,v 1.811 2009/05/11 17:12:25 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -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) {
@@ -509,6 +517,10 @@ sub coursebrowser_javascript {
             else {
                 if (formname == 'portform') {
                     url += '&setroles='+extra_element;
+                } else {
+                    if (formname == 'rules') {
+                        url += '&fixeddom='+extra_element; 
+                    }
                 }
             }     
         }
@@ -602,8 +614,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 {
@@ -710,6 +727,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 +828,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 = '';
@@ -903,9 +935,6 @@ sub help_open_topic {
     my ($topic, $text, $stayOnPage, $width, $height) = @_;
     $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;
@@ -923,19 +952,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\"><span style=\"color:#FFFFFF;font-size:10pt;\">$text</span></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 +976,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 {
@@ -1000,8 +1040,7 @@ sub help_open_menu {
     $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' ) {
+    if ($env{'environment.remote'} eq 'off' ) {
         $stayOnPage=1;
     }
     my $output;
@@ -1025,8 +1064,7 @@ sub top_nav_help {
     my ($text) = @_;
     $text = &mt($text);
     my $stay_on_page = 
-	($env{'browser.interface'}  eq 'textual' ||
-	 $env{'environment.remote'} eq 'off' );
+	($env{'environment.remote'} eq 'off' );
     my $link = ($stay_on_page) ? "javascript:helpMenu('display')"
 	                     : "javascript:helpMenu('open')";
     my $banner_link = &update_help_link(undef,undef,undef,undef,$stay_on_page);
@@ -1043,8 +1081,7 @@ sub help_menu_js {
     my ($text) = @_;
 
     my $stayOnPage = 
-	($env{'browser.interface'}  eq 'textual' ||
-	 $env{'environment.remote'} eq 'off' );
+	($env{'environment.remote'} eq 'off' );
 
     my $width = 620;
     my $height = 600;
@@ -1103,8 +1140,7 @@ sub help_open_bug {
     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' ) {
+    if ($env{'environment.remote'} eq 'off' ) {
 	$stayOnPage=1;
     }
     $width = 600 if (not defined $width);
@@ -1148,8 +1184,7 @@ sub help_open_faq {
     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' ) {
+    if ($env{'environment.remote'} eq 'off' ) {
 	$stayOnPage=1;
     }
     $width = 350 if (not defined $width);
@@ -1629,7 +1664,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};
@@ -1740,7 +1775,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 +1784,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;
@@ -1814,7 +1855,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))) {
@@ -2109,14 +2150,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 +2165,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 +2189,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 +2198,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 +2259,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 +2275,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 +2284,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 +2314,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 +2330,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 +2339,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 +2368,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 +2381,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 +2390,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 +2758,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
@@ -2736,6 +2814,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 {
@@ -2746,6 +2844,7 @@ sub messagewrapper {
 	'&amp;subject='.&escape($subject).'&amp;text='.&escape($text).'" '.
         'title="'.&mt('Send message').'">'.$link.'</a>';
 }
+
 # --------------------------------------------------------------- Notes Wrapper
 
 sub noteswrapper {
@@ -2753,6 +2852,7 @@ sub noteswrapper {
     return 
 "<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";
 }
+
 # ------------------------------------------------------------- Aboutme Wrapper
 
 sub aboutmewrapper {
@@ -2761,17 +2861,18 @@ 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)=@_;
     return qq{<a href="/public/$domain/$coursedir/syllabus">$linktext</a>};
 }
 
+# -----------------------------------------------------------------------------
+
 sub track_student_link {
     my ($linktext,$sname,$sdom,$target,$start) = @_;
     my $link ="/adm/trackstudent?";
@@ -2793,6 +2894,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
 
 
@@ -3030,6 +3152,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                     ##
 ###############################################################
@@ -3168,7 +3313,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) ||
@@ -3745,7 +3890,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' && 
@@ -4106,7 +4251,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),
@@ -4142,15 +4287,7 @@ 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') {
@@ -4174,7 +4311,7 @@ $realm&nbsp;
 </td>
 ENDROLE
 
-    my $titleinfo = '<span class="LC_title_bar_title">'.$title.'</span>';
+    my $titleinfo = '<h1>'.$title.'</h1>';
     if ($customtitle) {
         $titleinfo = $customtitle;
     }
@@ -4233,6 +4370,8 @@ ENDROLE
 	if ($notopbar) {
 	    $bodytag .= $titletable;
 	} else {
+        $bodytag .= qq|<div id="head_userinfo">$name ($role) <br/>
+            <em>$realm</em>$dc_info</div>|;
 	    if ($env{'request.state'} eq 'construct') {
                 $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg,
 							  $titletable);
@@ -4264,8 +4403,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
@@ -4382,6 +4521,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 ||
@@ -4415,45 +4556,61 @@ sub standard_css {
     my $lg_border_color	     = '#C8C8C8';
 
     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%; }
+body {
+   font-family: $sans;
+   line-height:130%;
+   font-size:0.83em;
+   color:$font;
+}
 
-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;
+a:link, a:visited { 
+  font-size:100%; 
 }
-table.thinborder tr td {
-  border-style: solid;
-  border-width: 1px;
-  border-color: $lg_border_color;
+
+a:focus { 
+  color: red;
+  background: yellow 
+}
+
+form, .inline { 
+   display: inline; 
+}
+
+.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;
 }
 
-form, .inline { display: inline; }
-.center { text-align: center; }
-.left { text-align:left; }
-.right {text-align:right;}
-.middle {vertical-align:middle;}
-.top {vertical-align:top;}
-.bottom {vertical-align:bottom;}
-.LC_filename {font-family: $mono; white-space:pre;}
 .LC_error {
   color: red;
   font-size: larger;
 }
+
 .LC_warning,
 .LC_diff_removed {
   color: red;
@@ -4464,25 +4621,70 @@ 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: 0px;
+  border: none;
+  vertical-align: middle;
 }
+
 .LC_indexer_icon {
-  border: 0px;
+  border: none;
   height: 22px;
 }
+
 .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: 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 {
@@ -4490,133 +4692,152 @@ table.LC_pastsubmission {
   margin: 2px;
 }
 
-table#LC_top_nav, table#LC_menubuttons,table#LC_nav_location {
+table#LC_top_nav,
+table#LC_menubuttons,
+table#LC_nav_location {
   width: 100%;
   background: $pgbg;
   border: 2px;
   border-collapse: separate;
-  padding: 0px;
+  padding: 0;
+}
+
+table#LC_title_bar a {
+  color: $fontmenu;
+}
+    
+table#LC_title_bar {
+  /*display: none;*/
 }
 
-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;
   border-style: solid;
   border-width: $border;
-
   background: $pgbg;
+  color: $fontmenu;
   font-family: $sans;
   border-collapse: collapse;
-  padding: 0px;
+  padding: 0;
 }
+
 table.LC_docs_path {
   width: 100%;
   border: 0;
   background: $pgbg;
   font-family: $sans;
   border-collapse: collapse;
-  padding: 0px;
+  padding: 0;
 }
 
 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;
+  color: $fontmenu;
   font: small $sans;
   text-align: right;
+  margin: 0;
 }
-span.LC_metadata {
-    font-family: $sans;
+
+table#LC_title_bar .LC_title_bar_name {
+  margin: 0;
 }
-span.LC_title_bar_title {
-  font: bold x-large $sans;
+
+table#LC_title_bar .LC_title_bar_role {
+  margin: 0;
 }
-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: 0;
 }
-table#LC_title_bar td.LC_title_bar_role_logo {
-  background: $sidebg;
-  padding: 0px;
+
+span.LC_metadata {
+  font-family: $sans;
 }
 
 table#LC_menubuttons img{
-  border: 0px;
+  border: none;
 }
+
 table#LC_top_nav td {
   background: $tabbg;
-  border: 0px;
+  border: none;
   font-size: small;
   vertical-align:top;
   padding:2px 5px 2px 5px;
 }
-table#LC_top_nav td a, div#LC_top_nav a {
+
+table#LC_top_nav td a,
+div#LC_top_nav a {
   color: $font;
   font-family: $sans;
 }
+
 table#LC_top_nav td.LC_top_nav_logo {
   background: $tabbg;
   text-align: left;
   white-space: nowrap;
   width: 31px;
 }
+
 table#LC_top_nav td.LC_top_nav_logo img {
-  border: 0px;
+  border: none;
   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_breadcrumbs td, table.LC_docs_path td  {
+
+table.LC_breadcrumbs td,
+table.LC_docs_path td  {
   background: $tabbg;
-  color: $font;
+  color: $fontmenu;
   font-family: $sans;
   font-size: smaller;
 }
+
 table.LC_breadcrumbs td.LC_breadcrumbs_component,
 table.LC_docs_path td.LC_docs_path_component {
   background: $tabbg;
-  color: $font;
+  color: $fontmenu;
   font-family: $sans;
   font-size: larger;
   text-align: right;
 }
+
 td.LC_table_cell_checkbox {
   text-align: center;
 }
+
 table#LC_mainmenu td.LC_mainmenu_column {
     vertical-align: top;
 }
 
-.LC_fontsize_small
-{
+.LC_fontsize_small {
  font-size: 70%;
 }
 
-.LC_fontsize_medium
-{
+.LC_fontsize_medium {
  font-size: 85%;
 }
 
-.LC_fontsize_large
-{
+.LC_fontsize_large {
  font-size: 120%;
 }
 
-.LC_fontcolor_red
-{
- color: #FF0000;
-}
-
 .LC_menubuttons_inline_text {
   color: $font;
   font-family: $sans;
@@ -4627,7 +4848,7 @@ table#LC_mainmenu td.LC_mainmenu_column
 .LC_menubuttons_link {
   text-decoration: none;
 }
-/*2008--9-5: new menu style sheet.Changed category*/
+
 .LC_menubuttons_category {
   color: $font;
   background: $pgbg;
@@ -4637,22 +4858,20 @@ table#LC_mainmenu td.LC_mainmenu_column
 }
 
 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;
@@ -4671,62 +4890,69 @@ td.LC_menubuttons_text {
     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,
+table.LC_mail_list {
   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_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_data_table tr th, 
+table.LC_calendar tr th, 
+table.LC_mail_list tr th,
 table.LC_prior_tries tr th {
   font-weight: bold;
   background-color: $data_table_head;
+  color:$fontmenu;
   font-size:90%;
 }
+
 table.LC_data_table tr.LC_info_row > td {
-  background-color: #CCC;
+  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,
+table.LC_pick_box tr > td.LC_odd_row {
   background-color: $data_table_light;
   padding: 2px;
 }
+
 table.LC_data_table tr.LC_even_row > td,
-table.LC_pick_box tr > td.LC_even_row,
-table.LC_aboutme_port tr.LC_even_row td {
+table.LC_pick_box tr > td.LC_even_row {
   background-color: $data_table_dark;
   padding: 2px;
 }
+
 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;
@@ -4735,15 +4961,19 @@ table.LC_nested tr.LC_empty_row td {
   text-align: center;
   padding: 8px;
 }
+
 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;
@@ -4751,20 +4981,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: #CCC;
+  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: #FFF;
+  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,
@@ -4773,7 +5007,7 @@ 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 {
@@ -4784,7 +5018,7 @@ table.LC_createuser tr.LC_section_row td
 }
 
 table.LC_createuser tr.LC_info_row td  {
-  background-color: #CCC;
+  background-color: #CCCCCC;
   font-weight: bold;
   text-align: center;
 }
@@ -4793,16 +5027,20 @@ table.LC_calendar {
   border: 1px solid #000000;
   border-collapse: collapse;
 }
+
 table.LC_calendar_pickdate {
   font-size: xx-small;
 }
+
 table.LC_calendar tr td {
   border: 1px solid #000000;
   vertical-align: top;
 }
+
 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;
 }
@@ -4810,47 +5048,60 @@ table.LC_calendar tr td.LC_calendar_day_
 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;
 }
+
 table.LC_mail_list tr.LC_mail_read:hover {
   background-color: $mail_read_hover;
 }
+
 table.LC_mail_list tr.LC_mail_replied {
   background-color: $mail_replied;
 }
+
 table.LC_mail_list tr.LC_mail_replied:hover {
   background-color: $mail_replied_hover;
 }
+
 table.LC_mail_list tr.LC_mail_other {
   background-color: $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_data_table tr > td.LC_browser_file,
 table.LC_data_table tr > td.LC_browser_file_published {
   background: #CCFF88;
 }
+
 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;
 }
+
 table.LC_data_table tr > td.LC_browser_file_modified,
 table.LC_data_table tr > td.LC_browser_file_metamodified {
   background: #FFFF77;
 }
+
 table.LC_data_table tr.LC_browser_folder > td {
   background: #CCCCFF;
 }
@@ -4858,18 +5109,23 @@ table.LC_data_table tr.LC_browser_folder
 table.LC_data_table tr > td.LC_roles_is {
 /*  background: #77FF77; */
 }
+
 table.LC_data_table tr > td.LC_roles_future {
   background: #FFFF77;
 }
+
 table.LC_data_table tr > td.LC_roles_will {
   background: #FFAA77;
 }
+
 table.LC_data_table tr > td.LC_roles_expired {
   background: #FF7777;
 }
+
 table.LC_data_table tr > td.LC_roles_will_not {
   background: #AAFF77;
 }
+
 table.LC_data_table tr > td.LC_roles_selected {
   background: #11CC55;
 }
@@ -4883,58 +5139,70 @@ 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 {
   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_parm_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;
@@ -4942,11 +5210,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;
@@ -4956,27 +5226,33 @@ 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;
   font-weight: bold;
   text-align: right;
+  vertical-align: top;
   width: 184px;
   padding: 8px;
 }
+
 table.LC_pick_box td.LC_selfenroll_pick_box_title {
   background: $tabbg;
   font-weight: bold;
@@ -4989,28 +5265,34 @@ 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;
@@ -5018,6 +5300,7 @@ table.LC_helpform_receipt {
   border: 1px solid black;
   border-spacing: 1px;
 }
+
 table.LC_helpform_receipt td.LC_pick_box_title {
   background: $tabbg;
   font-weight: bold;
@@ -5025,51 +5308,61 @@ table.LC_helpform_receipt td.LC_pick_box
   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;
+  padding: 0;
   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 {
@@ -5077,12 +5370,15 @@ table.LC_notify_front_page {
   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;
@@ -5090,35 +5386,38 @@ table.LC_notify_front_page td {
   background: $tabbg;
   vertical-align: middle;
   margin: 2ex 0ex 2ex 0ex;
+  padding: 3px;
 }
+
 .LC_topic_bar span {
   vertical-align: middle;
 }
+
 .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;
-  width: 100%;  
+  width: 100%;
 }
+
 span.LC_feedback_link {
   background: $feedback_link_bg;
   font-size: larger;
 }
+
 span.LC_message_link {
   background: $feedback_link_bg;
   font-size: larger;
@@ -5137,33 +5436,49 @@ table.LC_prior_tries td {
 }
 
 .LC_answer_correct {
-  background: #AAFFAA;
-  color: black;
+  background: lightgreen;
+  font-family: $sans;
+  color: darkgreen;
+  padding: 6px;
 }
+
 .LC_answer_charged_try {
-  background: #FFAAAA ! important;
-  color: black;
+  background: #FFAAAA;
+  font-family: $sans;
+  color: darkred;
+  padding: 6px;
 }
-.LC_answer_not_charged_try, 
+
+.LC_answer_not_charged_try,
 .LC_answer_no_grade,
 .LC_answer_late {
-  background: #FFFFAA;
+  background: lightyellow;
+  font-family: $sans;
   color: black;
+  padding: 6px;
 }
+
 .LC_answer_previous {
-  background: #AAAAFF;
-  color: black;
+  background: lightblue;
+  font-family: $sans;
+  color: darkblue;
+  padding: 6px;
 }
+
 .LC_answer_no_message {
   background: #FFFFFF;
+  font-family: $sans;
   color: black;
+  padding: 6px;
 }
+
 .LC_answer_unknown {
   background: orange;
+  font-family: $sans;
   color: black;
+  padding: 6px;
 }
 
-
 span.LC_prior_numerical,
 span.LC_prior_string,
 span.LC_prior_custom,
@@ -5182,15 +5497,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 {
   white-space: nowrap;
 }
@@ -5206,7 +5525,7 @@ span.LC_cusr_subheading {
 
 table.LC_docs_documents {
   background: #BBBBBB;
-  border-width: 0px;
+  border-width: 0;
   border-collapse: collapse;
 }
 
@@ -5215,15 +5534,8 @@ table.LC_docs_documents td.LC_docs_docum
   padding: 4px;
 }
 
-.LC_docs_course_commands div {
-  float: left;
-  border: 4px solid #AAAAAA;
-  padding: 4px;
-  background: #DDDDCC;
-}
-
 .LC_docs_entry_move {
-  border: 0px;
+  border: none;
   border-collapse: collapse;
 }
 
@@ -5236,15 +5548,19 @@ table.LC_docs_documents td.LC_docs_docum
   background: #DDDDDD;
   font-size: x-small;
 }
+
 .LC_docs_copy {
   color: #000099;
 }
+
 .LC_docs_cut {
   color: #550044;
 }
+
 .LC_docs_rename {
   color: #009900;
 }
+
 .LC_docs_remove {
   color: #990000;
 }
@@ -5258,6 +5574,7 @@ table.LC_docs_documents td.LC_docs_docum
 .LC_docs_editor td.LC_docs_entry_icon {
   background: #FFFFBB;
 }
+
 .LC_docs_editor td.LC_docs_entry_parameter {
   background: #BBBBFF;
   font-size: x-small;
@@ -5274,12 +5591,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;
@@ -5294,7 +5612,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;
 }
@@ -5318,17 +5636,18 @@ div.LC_clear_float_footer {
   clear: both;
 }
 
-
 div.LC_grade_show_user {
   margin-top: 20px;
   border: 1px solid black;
 }
+
 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 div.LC_grade_user_name {
   background: #DDEEDD;
 }
@@ -5342,6 +5661,7 @@ div.LC_grade_assign {
   width: 99%;
   background: #FFFFFF;
 }
+
 div.LC_grade_show_problem_header,
 div.LC_grade_submissions_header,
 div.LC_grade_message_center_header,
@@ -5349,6 +5669,7 @@ div.LC_grade_assign_header {
   font-weight: bold;
   font-size: large;
 }
+
 div.LC_grade_show_problem_problem,
 div.LC_grade_submissions_body,
 div.LC_grade_message_center_body,
@@ -5357,6 +5678,7 @@ div.LC_grade_assign_body {
   width: 99%;
   background: #FFFFFF;
 }
+
 span.LC_grade_check_note {
   font-weight: normal;
   font-size: medium;
@@ -5368,16 +5690,19 @@ span.LC_grade_check_note {
 table.LC_scantron_action {
   width: 100%;
 }
+
 table.LC_scantron_action tr th {
   font-weight:bold;
   font-style:normal;
 }
-.LC_edit_problem_header, 
+
+.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,
@@ -5386,17 +5711,20 @@ 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;
@@ -5404,42 +5732,44 @@ table.LC_edit_problem_header_title {
   border-color: $pgbg;
   border-style: solid;
   border-width: $border;
-
   background: $tabbg;
   border-collapse: collapse;
-  padding: 0px
+  padding: 0;
 }
 
 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;
+  border: none;
 }
+
 img.stift{
-  border-width:0;
-  vertical-align:middle;
+  border-width: 0;
+  vertical-align: middle;
 }
 
 table#LC_mainmenu{
  margin-top:10px;
  width:80%;
-
 }
 
 table#LC_mainmenu td.LC_mainmenu_col_fieldset{
   vertical-align: top;
   width: 45%;
 }
+
 .LC_mainmenu_fieldset_category {
   color: $font;
   background: $pgbg;
@@ -5448,6 +5778,10 @@ table#LC_mainmenu td.LC_mainmenu_col_fie
   font-weight: bold;
 }
 
+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.
@@ -5456,253 +5790,352 @@ table#LC_mainmenu td.LC_mainmenu_col_fie
 # --------------------------*/
 
 a:hover,
-ol.smallMenu a:hover,
-ol#MenuBreadcrumbs a:hover,
-ul#TabMainMenuContent a:hover,
-.FormSectionClearButton input: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 0px;
+h1 {
+	padding:5px 10px 5px 20px;
 	line-height:130%;
 }
 
-h2,h3,h4,h5,h6
-{
-margin:5px 0px 5px 0px;
-line-height:130%;
+h2,h3,h4,h5,h6 {
+	margin: 5px 0 5px 0;
+	padding: 0;
+	line-height:130%;
 }
-.hcell{
+
+.LC_hcell {
         padding:3px 15px 3px 15px;
-        margin:0px;
+        margin: 0;
 	background-color:$tabbg;
-	border-bottom:solid 1px $lg_border_color;       
+	color:$fontmenu;
+	border-bottom:solid 1px $lg_border_color;
 }
-.noBorder {
-        border:0px;
+
+.LC_noBorder {
+        border: 0;
 }
-/*
-.bgLightGrey { background:URL(images/TabMenuBG.png) repeat-x left top; }
-.bgLightGreyYellow {background-color:#EFECE0;}
-*/
 
 
 /* Main Header with discription of Person, Course, etc. */
-.HeadRight {
-	text-align: right;
-	float: right;
-	margin: 0px;
-	padding: 0px;
-        right:0;
-        position:absolute;
-        overflow:hidden;
-}
-
-p {
-	padding: 10px;
 
+.LC_Right {
+        float: right;
+        margin: 0;
+        padding: 0;
 }
-.FormSectionClearButton input {
+
+.LC_FormSectionClearButton input {
         background-color:transparent;
-        border:0px;
+        border: none;
         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;
+	margin: 10px 10px 10px 0;
+/*	overflow: hidden; */
 }
-ol.smallMenu {
-	margin: 0px;
+
+#head_userinfo {
+    float: left;
+    margin: 0;
 }
 
-ol.smallMenu li {
+#head_userinfo em{
+    font-weight: bold;
+    font-style: normal;
+}
+
+ol.LC_smallMenu {
+    float: right;
+}
+
+ol.LC_smallMenu, ol#LC_PathBreadcrumbs {
+	margin: 0;
+}
+
+ol.LC_smallMenu li {
 	display: inline;
-	padding: 5px 5px 0px 10px;
+	padding: 5px 5px 0 10px;
 	vertical-align: top;
 }
 
-ol.smallMenu li img {
+ol.LC_smallMenu li img {
 	vertical-align: bottom;
 }
 
-ol.smallMenu a {
+ol.LC_smallMenu a {
 	font-size: 90%;
 	color: RGB(80, 80, 80);
 	text-decoration: none;
 }
 
-ol#TabMainMenuContent {
-	
-	margin: 0px 0px 10px 0px;
-	padding: 0px;
+ul#LC_TabMainMenuContent {
+    clear: both;
+    color: $fontmenu;
+    background: $tabbg;
+    list-style: none;
+    padding: 0;
+    margin: 0;
+    float:left;
+    width: 100%;
 }
 
-ol#TabMainMenuContent li {
+ul#LC_TabMainMenuContent li {
+    float: left;
+    font-weight: bold;
+    line-height: 1.8em;
+    padding: 0 0.8em; 
+    border-right: 1px solid black;
+    display: inline;
+    vertical-align: middle;
+}
+
+ul.LC_TabContent ,
+ul.LC_TabContentBigger {
+	display:block;
+	list-style:none;
+	margin: 0;
+	padding: 0;
+}
+
+ul.LC_TabContent li,
+ul.LC_TabContentBigger li {
 	display: inline;
-	vertical-align: bottom;
-	border-bottom: solid 1px RGB(175, 175, 175);
-	border-right: solid 1px RGB(175, 175, 175);
-	padding: 5px 15px 5px 15px;
-	margin-right:4px;
-	line-height: 140%;
-	font-weight: bold;
-	overflow:hidden;
-/*	background: RGB(211, 206, 205) URL(images/TabMenuBG.png) repeat-x left top;*/
+	border-right: solid 1px $lg_border_color;
+	float:left;
+	line-height:140%;
+	white-space:nowrap;
 }
 
-ol#TabMainMenuContent li a{
-	color: RGB(47, 47, 47);
+ul#LC_TabMainMenuContent li a {
+    color: $fontmenu;
 	text-decoration: none;
 }
 
-ol#TabMainMenuContent div.columnSection {
-	margin-bottom: 0px;
+ul.LC_TabContent {
+	min-height:1.6em;
+}
+
+ul.LC_TabContent li {
+	vertical-align:middle;
+	padding: 0 10px 0 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;
 }
 
-ol#MenuBreadcrumbs, ol#PathBreadcrumbs {
+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;
+	margin: 0 0 30px 0;
 	padding-left: 10px;
 	list-style-position: inside;
-/*	background: RGB(211, 206, 205) URL(images/TabMenuBG.png) repeat-x left
-		top;*/
+	background: url(/adm/lonIcons/lightGreyBG.png) repeat-x left top;
 }
 
-ol#MenuBreadcrumbs li, ol#PathBreadcrumbs li {
-/*	background: url(images/pfeil_white.png) no-repeat left center;*/
+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;
+	padding: 0 0 0 10px;
+/*	vertical-align: bottom; */
 	overflow:hidden;
 }
 
-ol#MenuBreadcrumbs li a {
+ol#LC_MenuBreadcrumbs li a, ul.LC_CourseBreadcrumbs li a {
 	text-decoration: none;
 	font-size:90%;
 }
-ol#PathBreadcrumbs li a{
+
+ol#LC_PathBreadcrumbs li a {
 	text-decoration:none;
 	font-size:100%;
 	font-weight:bold;
 }
 
-.ContentBoxSpecial
-{
+.LC_BoxPadding {
+	padding: 10px;
+}
+
+.LC_ContentBoxSpecial {
 	border: solid 1px $lg_border_color;
 }
-.ContentBox {
-	padding:10px;
+
+.LC_ContentBoxSpecialContactInfo {
+	border: solid 1px $lg_border_color;
+	max-width:25%;
+	min-width:25%;
 }
-.PopUp
-{
-	padding:10px;
-	border-left:solid 1px $lg_border_color;
- 	border-top:solid 1px $lg_border_color;
-	border-bottom:outset 1px $lg_border_color;
-	border-right:outset 1px $lg_border_color;
-	display:none;
-	position:absolute;
-	right:0;
-	background-color:white;
-	z-index:5;
+
+.LC_AboutMe_Image {
+	float:left;
+	margin-right:10px;
 }
 
-dl.ListStyleClean dt {
+.LC_Clear_AboutMe_Image {
+	clear:left;
+}
+
+dl.LC_ListStyleClean dt {
 	padding-right: 5px;
 	display: table-header-group;
 }
 
-dl.ListStyleClean dd {
+dl.LC_ListStyleClean dd {
 	display: table-row;
 }
 
-.ListStyleClean,
-.ListStyleSimple,
-.ListStyleNormal,
-.ListStyleNormal_Border,
-.ListStyleSpecial
-	{
+.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;
+	padding: 0;
 }
 
-.ListStyleSimple li,
-.ListStyleSimple dd,
-.ListStyleNormal li,
-.ListStyleNormal dd,
-.ListStyleSpecial li,
-.ListStyleSpecial dd
-	{
-	margin: 0px;
+.LC_ListStyleSimple li,
+.LC_ListStyleSimple dd,
+.LC_ListStyleNormal li,
+.LC_ListStyleNormal dd,
+.LC_ListStyleSpecial li,
+.LC_ListStyleSpecial dd {
+	margin: 0;
 	padding: 5px 5px 5px 10px;
 	clear: both;
 }
 
-.ListStyleClean li,
-.ListStyleClean dd {
-	padding-top: 0px;
-	padding-bottom: 0px;
+.LC_ListStyleClean li,
+.LC_ListStyleClean dd {
+	padding-top: 0;
+	padding-bottom: 0;
 }
 
-.ListStyleSimple dd,
-.ListStyleSimple li{
+.LC_ListStyleSimple dd,
+.LC_ListStyleSimple li {
 	border-bottom: solid 1px $lg_border_color;
 }
 
-.ListStyleSpecial li,
-.ListStyleSpecial dd {
+.LC_ListStyleSpecial li,
+.LC_ListStyleSpecial dd {
 	list-style-type: none;
 	background-color: RGB(220, 220, 220);
 	margin-bottom: 4px;
 }
 
-table.SimpleTable {
+table.LC_SimpleTable {
 	margin:5px;
 	border:solid 1px $lg_border_color;
-	}
+}
 
-table.SimpleTable tr {
-	padding:0px;
+table.LC_SimpleTable tr {
+	padding: 0;
 	border:solid 1px $lg_border_color;
 }
-table.SimpleTable thead{
+
+table.LC_SimpleTable thead {
 	 background:rgb(220,220,220);
 }
 
-div.columnSection {
+div.LC_columnSection {
 	display: block;
 	clear: both;
 	overflow: hidden;
-	margin:0px;
+	margin: 0;
 }
 
-div.columnSection>* {
+div.LC_columnSection>* {
 	float: left;
-	margin: 10px 20px 10px 0px;
-	overflow:hidden;	
+	margin: 10px 20px 10px 0;
+	overflow:hidden;
 }
-div.columnSection > .ContentBox,
-div.columnSection > .ContentBoxSpecial
-	{
-	width: 400px;
-	
+
+.ContentBoxSpecialTemplate {
+        border: solid 1px $lg_border_color;
+}
+
+.ContentBoxTemplate {
+        padding:10px;
+}
+
+div.LC_columnSection > .ContentBoxTemplate,
+div.LC_columnSection > .ContentBoxSpecialTemplate {
+        width: 600px;
+}
+
+.clear {
+	clear: both;
+	line-height: 0;
+	font-size: 0;
+	height: 0;
 }
 
 .LC_loginpage_container {
 	text-align:left;
 	margin : 0 auto;
-	width:65%;
+	width:90%;
 	padding: 10px;
 	height: auto;
 	background-color:#FFFFFF;
@@ -5713,48 +6146,145 @@ div.columnSection > .ContentBoxSpecial
 .LC_loginpage_loginContainer {
 	float:left;
 	width: 182px;
+	padding: 2px;
 	border:1px solid #CCCCCC;
 	background-color:$loginbg;
 }
 
-.LC_loginpage_loginContainer h1{
-	margin-top:0;
+.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%;
+	width:182px;
 	border:1px solid #CCCCCC;
-	padding:10px;
-}
-
-.LC_loginpage_loginDomain {
-	margin-right:20px;
-	width:20%;
-	float:left;
-	padding:10px;
+	padding:2px;
 }
 
 .LC_loginpage_space {
-	clear:both;
-	margin-bottom:20px;
+	clear: both;
+	margin-bottom: 20px;
 	border-bottom: 1px solid #CCCCCC;
 }
 
-.LC_loginpage_fieldset{
-	border: 1px solid #CCCCCC;
-	margin: 0 auto;
+.LC_loginpage_floatLeft {
+	float: left;
+	width: 200px;
+	margin: 0;
 }
 
-.LC_loginpage_legend{
-	padding: 2px;
-	margin: 0px;
-	font-size:14px;
-	font-weight:bold;
+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: 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: 0 15px 15px 10px;
 }
 
 
@@ -6027,15 +6557,23 @@ sub start_page {
 		$result = &html_encode($result);
     }
 
-	if (exists $args->{'bread_crumbs'}) {
+	#Breadcrumbs
+    if (exists($args->{'bread_crumbs'}) or exists($args->{'bread_crumbs_component'})) {
 		&Apache::lonhtmlcommon::clear_breadcrumbs();
-		my $temp = $args->{'bread_crumbs'};
-		foreach my $crumb (@$temp){
-			&Apache::lonhtmlcommon::add_breadcrumb($crumb);
+		#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);
+			}
 		}
-		$result .= &Apache::lonhtmlcommon::breadcrumbs();
-    }
 
+		#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;
 }
 
@@ -6784,6 +7322,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
 
 ###############################################
@@ -6796,7 +7336,7 @@ 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 (ref($quotahash{'quotas'}{'defaultquota'}) eq 'HASH') {
                     if ($quotahash{'quotas'}{'defaultquota'}{$item} ne '') {
@@ -6975,12 +7515,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 />';
                 }
             }
         }
@@ -7262,6 +7807,7 @@ sub personal_data_fieldtitles {
                         middlename => 'Middle Name',
                         generation => 'Generation',
                         gen => 'Generation',
+                        inststatus => 'Affiliation',
                    );
     return %fieldtitles;
 }
@@ -7331,8 +7877,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
@@ -7883,7 +8478,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";
     }
@@ -7971,7 +8566,7 @@ sub csv_print_select_table {
               &end_data_table_header_row()."\n");
     foreach my $array_ref (@$d) {
 	my ($value,$display,$defaultcol)=@{ $array_ref };
-	$r->print(&start_data_table_row().'<tr><td>'.$display.'</td>');
+	$r->print(&start_data_table_row().'<td>'.$display.'</td>');
 
 	$r->print('<td><select name=f'.$i.
 		  ' onchange="javascript:flip(this.form,'.$i.');">');
@@ -8627,9 +9222,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), 
@@ -8653,17 +9249,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);
@@ -8934,7 +9534,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">'.
@@ -9000,7 +9600,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"';
                             }
                         }
                     }
@@ -9307,7 +9907,9 @@ sub construct_course {
                    'policy.email',
                    'comment.email',
                    'pch.users.denied',
-                   'plc.users.denied'],
+                   'plc.users.denied',
+                   'hidefromcat',
+                   'categories'],
                    $$crsudom,$$crsunum);
     }
 
@@ -9765,6 +10367,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",
@@ -9803,7 +10416,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) {
@@ -9830,11 +10443,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);
 }