--- loncom/interface/loncommon.pm	2009/07/13 17:34:29	1.859
+++ loncom/interface/loncommon.pm	2009/09/25 13:51:58	1.890
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.859 2009/07/13 17:34:29 bisitz Exp $
+# $Id: loncommon.pm,v 1.890 2009/09/25 13:51:58 droeschl Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -483,27 +483,17 @@ ENDAUTHORBRW
 
 sub coursebrowser_javascript {
     my ($domainfilter,$sec_element,$formname)=@_;
-    my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Group - for which you wish to add/modify a user role');
-   my $output = '
+    my $crs_or_grp_alert = &mt('Please select the type of LON-CAPA entity - Course or Community - for which you wish to add/modify a user role.');
+    my $id_functions = &javascript_index_functions();
+    my $output = '
 <script type="text/javascript" language="JavaScript">
 // <![CDATA[
     var stdeditbrowser;'."\n";
-   $output .= <<"ENDSTDBRW";
+
+    $output .= <<"ENDSTDBRW";
     function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
         var url = '/adm/pickcourse?';
-        var domainfilter = '';
-        var formid = getFormIdByName(formname);
-        if (formid > -1) {
-            var domid = getIndexByName(formid,udom);
-            if (domid > -1) {
-                if (document.forms[formid].elements[domid].type == 'select-one') {
-                    domainfilter=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;
-                }
-                if (document.forms[formid].elements[domid].type == 'hidden') {
-                    domainfilter=document.forms[formid].elements[domid].value;
-                }
-            }
-        }
+        var domainfilter = getDomainFromSelectbox(formname,udom);
         if (domainfilter != null) {
            if (domainfilter != '') {
                url += 'domainfilter='+domainfilter+'&';
@@ -529,10 +519,15 @@ sub coursebrowser_javascript {
                 }
             }     
         }
+        if (formname == 'ccrs') {
+            var ownername = document.forms[formid].ccuname.value;
+            var ownerdom =  document.forms[formid].ccdomain.options[document.forms[formid].ccdomain.selectedIndex].value;
+            url += '&cloner='+ownername+':'+ownerdom;
+        }
         if (multflag !=null && multflag != '') {
             url += '&multiple='+multflag;
         }
-        if (crstype == 'Course/Group') {
+        if (crstype == 'Course/Community') {
             if (formname == 'cu') {
                 crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
                 if (crstype == "") {
@@ -550,24 +545,7 @@ sub coursebrowser_javascript {
         stdeditbrowser = open(url,title,options,'1');
         stdeditbrowser.focus();
     }
-
-    function getFormIdByName(formname) {
-        for (var i=0;i<document.forms.length;i++) {
-            if (document.forms[i].name == formname) {
-                return i;
-            }
-        }
-        return -1; 
-    }
-
-    function getIndexByName(formid,item) {
-        for (var i=0;i<document.forms[formid].elements.length;i++) {
-            if (document.forms[formid].elements[i].name == item) {
-                return i;
-            }
-        }
-        return -1;
-    }
+$id_functions
 ENDSTDBRW
     if ($sec_element ne '') {
         $output .= &setsec_javascript($sec_element,$formname);
@@ -578,6 +556,109 @@ ENDSTDBRW
     return $output;
 }
 
+sub javascript_index_functions {
+    return <<"ENDJS";
+
+function getFormIdByName(formname) {
+    for (var i=0;i<document.forms.length;i++) {
+        if (document.forms[i].name == formname) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+function getIndexByName(formid,item) {
+    for (var i=0;i<document.forms[formid].elements.length;i++) {
+        if (document.forms[formid].elements[i].name == item) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+function getDomainFromSelectbox(formname,udom) {
+    var userdom;
+    var formid = getFormIdByName(formname);
+    if (formid > -1) {
+        var domid = getIndexByName(formid,udom);
+        if (domid > -1) {
+            if (document.forms[formid].elements[domid].type == 'select-one') {
+                userdom=document.forms[formid].elements[domid].options[document.forms[formid].elements[domid].selectedIndex].value;
+            }
+            if (document.forms[formid].elements[domid].type == 'hidden') {
+                userdom=document.forms[formid].elements[domid].value;
+            }
+        }
+    }
+    return userdom;
+}
+
+ENDJS
+
+}
+
+sub userbrowser_javascript {
+    my $id_functions = &javascript_index_functions();
+    return <<"ENDUSERBRW";
+
+function openuserbrowser(formname,uname,udom,ulast,ufirst,uemail,hideudom,crsdom,caller) {
+    var url = '/adm/pickuser?';
+    var userdom = getDomainFromSelectbox(formname,udom);
+    if (userdom != null) {
+       if (userdom != '') {
+           url += 'srchdom='+userdom+'&';
+       }
+    }
+    url += 'form=' + formname + '&unameelement='+uname+
+                                '&udomelement='+udom+
+                                '&ulastelement='+ulast+
+                                '&ufirstelement='+ufirst+
+                                '&uemailelement='+uemail+
+                                '&hideudomelement='+hideudom+
+                                '&coursedom='+crsdom;
+    if ((caller != null) && (caller != undefined)) {
+        url += '&caller='+caller;
+    }
+    var title = 'User_Browser';
+    var options = 'scrollbars=1,resizable=1,menubar=0';
+    options += ',width=700,height=600';
+    var stdeditbrowser = open(url,title,options,'1');
+    stdeditbrowser.focus();
+}
+
+function fix_domain (formname,udom,origdom,uname) {
+    var formid = getFormIdByName(formname);
+    if (formid > -1) {
+        var unameid = getIndexByName(formid,uname);
+        var domid = getIndexByName(formid,udom);
+        var hidedomid = getIndexByName(formid,origdom);
+        if (hidedomid > -1) {
+            var fixeddom = document.forms[formid].elements[hidedomid].value;
+            var unameval = document.forms[formid].elements[unameid].value;
+            if ((fixeddom != '') && (fixeddom != undefined) && (fixeddom != null) && (unameval != '') && (unameval != undefined) && (unameval != null)) {
+                if (domid > -1) {
+                    var slct = document.forms[formid].elements[domid];
+                    if (slct.type == 'select-one') {
+                        var i;
+                        for (i=0;i<slct.length;i++) {
+                            if (slct.options[i].value==fixeddom) { slct.selectedIndex=i; }
+                        }
+                    }
+                    if (slct.type == 'hidden') {
+                        slct.value = fixeddom;
+                    }
+                }
+            }
+        }
+    }
+    return;
+}
+
+$id_functions
+ENDUSERBRW
+}
+
 sub setsec_javascript {
     my ($sec_element,$formname) = @_;
     my $setsections = qq|
@@ -620,12 +701,16 @@ function setSect(sectionlist) {
 
 sub selectcourse_link {
    my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
+   my $linktext = &mt('Select Course');
+   if ($selecttype eq 'Community') {
+       $linktext = &mt('Select Community'); 
+   }
    return '<span class="LC_nobreak">'
          ."<a href='"
          .'javascript:opencrsbrowser("'.$form.'","'.$unameele
          .'","'.$udomele.'","'.$desc.'","'.$extra_element
          .'","'.$multflag.'","'.$selecttype.'");'
-         ."'>".&mt('Select Course').'</a>'
+         ."'>".$linktext.'</a>'
          .'</span>';
 }
 
@@ -635,6 +720,14 @@ sub selectauthor_link {
           &mt('Select Author').'</a>';
 }
 
+sub selectuser_link {
+    my ($form,$unameelem,$domelem,$lastelem,$firstelem,$emailelem,$hdomelem,
+        $coursedom,$linktext,$caller) = @_;
+    return '<a href="javascript:openuserbrowser('."'$form','$unameelem','$domelem',".
+           "'$lastelem','$firstelem','$emailelem','$hdomelem','$coursedom','$caller'".
+           ');">'.$linktext.'</a>';
+}
+
 sub check_uncheck_jscript {
     my $jscript = <<"ENDSCRT";
 function checkAll(field) {
@@ -1111,8 +1204,8 @@ sub help_menu_js {
 
     my $template .= <<"ENDTEMPLATE";
 <script type="text/javascript">
-// <!-- BEGIN LON-CAPA Internal
 // <![CDATA[
+// <!-- BEGIN LON-CAPA Internal
 var banner_link = '';
 function helpMenu(target) {
     var caller = this;
@@ -1137,8 +1230,8 @@ function writeHelp(caller) {
     caller.document.close()
     caller.focus()
 }
-// ]]>
 // END LON-CAPA Internal -->
+// ]]>
 </script>
 ENDTEMPLATE
     return $template;
@@ -1787,7 +1880,7 @@ sub select_level_form {
 
 =pod
 
-=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$autosubmit)
+=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)
 
 Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.  
@@ -1798,16 +1891,15 @@ selected");
 
 If the $showdomdesc flag is set, the domain name is followed by the domain description.
 
-If the $autosubmit flag is set, the form containing the domain selector will be auto-submitted by an onchange action.  
+The optional $onchange argumnet specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.  
 
 =cut
 
 #-------------------------------------------
 sub select_dom_form {
-    my ($defdom,$name,$includeempty,$showdomdesc,$autosubmit) = @_;
-    my $onchange;
-    if ($autosubmit) {
-        $onchange = ' onchange="this.form.submit()"';
+    my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;
+    if ($onchange) {
+        $onchange = ' onchange="'.$onchange.'"';
     }
     my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
     if ($includeempty) { @domains=('',@domains); }
@@ -2886,7 +2978,7 @@ sub syllabuswrapper {
 # -----------------------------------------------------------------------------
 
 sub track_student_link {
-    my ($linktext,$sname,$sdom,$target,$start) = @_;
+    my ($linktext,$sname,$sdom,$target,$start,$only_body) = @_;
     my $link ="/adm/trackstudent?";
     my $title = 'View recent activity';
     if (defined($sname) && $sname !~ /^\s*$/ &&
@@ -2900,6 +2992,7 @@ sub track_student_link {
         $target = '';
     }
     if ($start) { $link.='&amp;start='.$start; }
+    if ($only_body) { $link .= '&amp;only_body=1'; }
     $title = &mt($title);
     $linktext = &mt($linktext);
     return qq{<a href="$link" title="$title" $target>$linktext</a>}.
@@ -3766,7 +3859,7 @@ sub blockcheck {
                  ($env{'request.role'} !~ m{^st\./\Q$cdom\E/\Q$cnum\E}));
         next if ($no_userblock);
 
-        # Retrieve blocking times and identity of blocker for course
+        # Retrieve blocking times and identity of locker for course
         # of specified user, unless user has 'evb' privilege.
         
         my ($start,$end)=&get_blocks($setters,$activity,$cdom,$cnum);
@@ -3831,64 +3924,25 @@ sub parse_block_record {
     return ($setuname,$setudom,$title,$blocks);
 }
 
-sub build_block_table {
-    my ($startblock,$endblock,$setters) = @_;
-    my %lt = &Apache::lonlocal::texthash(
-        'cacb' => 'Currently active communication blocks',
-        'cour' => 'Course',
-        'dura' => 'Duration',
-        'blse' => 'Block set by'
-    );
-    my $output;
-    $output = '<br />'.$lt{'cacb'}.':<br />';
-    $output .= &start_data_table();
-    $output .= '
-<tr>
- <th>'.$lt{'cour'}.'</th>
- <th>'.$lt{'dura'}.'</th>
- <th>'.$lt{'blse'}.'</th>
-</tr>
-';
-    foreach my $course (keys(%{$setters})) {
-        my %courseinfo=&Apache::lonnet::coursedescription($course);
-        for (my $i=0; $i<@{$$setters{$course}{staff}}; $i++) {
-            my ($uname,$udom) = @{$$setters{$course}{staff}[$i]};
-            my $fullname = &plainname($uname,$udom);
-            if (defined($env{'user.name'}) && defined($env{'user.domain'})
-                && $env{'user.name'} ne 'public' 
-                && $env{'user.domain'} ne 'public') {
-                $fullname = &aboutmewrapper($fullname,$uname,$udom);
-            }
-            my ($openblock,$closeblock) = @{$$setters{$course}{times}[$i]};
-            $openblock = &Apache::lonlocal::locallocaltime($openblock);
-            $closeblock= &Apache::lonlocal::locallocaltime($closeblock);
-            $output .= &Apache::loncommon::start_data_table_row().
-                       '<td>'.$courseinfo{'description'}.'</td>'.
-                       '<td>'.$openblock.' to '.$closeblock.'</td>'.
-                       '<td>'.$fullname.'</td>'.
-                        &Apache::loncommon::end_data_table_row();
-        }
-    }
-    $output .= &end_data_table();
-}
 sub blocking_status {
-  my $blocked = blocking_status_print(@_);
   my ($activity,$uname,$udom) = @_;
-  if(!wantarray) {
-    return $blocked;
-  }
-  my $output;
-  my $querystring;
-  $querystring = "?activity=$activity";
-  if(defined($uname)) { 
-    $querystring .= "&uname=$uname";
-  }if(defined($udom)) {
-    $querystring .= "&udom=$udom";
-  }
+  my %setters;
 
-      $output .= <<"END_MYBLOCK";
-<script type="text/javascript">
-// <![CDATA[
+  # check for active blocking
+  my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
+
+  my $blocked = $startblock && $endblock ? 1 : 0;
+
+  # caller just wants to know whether a block is active
+  if (!wantarray) { return $blocked; }
+
+  # build a link to a popup window containing the details
+  my $querystring  = "?activity=$activity";
+  # $uname and $udom decide whose portfolio the user is trying to look at
+     $querystring .= "&amp;udom=$udom"      if $udom;
+     $querystring .= "&amp;uname=$uname"    if $uname;
+
+  my $output .= <<'END_MYBLOCK';
     function openWindow(url, wdwName, w, h, toolbar,scrollbar) {
         var options = "width=" + w + ",height=" + h + ",";
         options += "resizable=yes,scrollbars="+scrollbar+",status=no,";
@@ -3896,72 +3950,26 @@ sub blocking_status {
         var newWin = window.open(url, wdwName, options);
         newWin.focus();
     }
-
-// ]]>
-</script>
 END_MYBLOCK
+
+  $output = Apache::lonhtmlcommon::scripttag($output);
+  
   my $popupUrl = "/adm/blockingstatus/$querystring";
-  $output.="\n<img src='/res/adm/pages/emblem-readonly.png' /><a onclick='openWindow(\"$popupUrl\",\"Blocking Table\",600,300,\"no\",\"no\");return false;' href='/adm/blockingstatus/$querystring'>Blocking Table</a>";
+  my $text = mt('Communication Blocked');
+
+  $output .= <<"END_BLOCK";
+<div class='LC_comblock'>
+  <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring'
+  title='$text'>
+  <img class='LC_noBorder LC_middle' title='$text' src='/res/adm/pages/comblock.png' alt='$text'/></a>
+  <a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring' 
+  title='$text'>$text</a>
+</div>
+
+END_BLOCK
 
   return ($blocked, $output);
 }
-sub blocking_status_print {
-    my ($activity,$uname,$udom) = @_;
-    my %setters;
-    my ($blocked,$output,$ownitem,$is_course);
-    my ($startblock,$endblock)=&blockcheck(\%setters,$activity,$uname,$udom);
-    if ($startblock && $endblock) {
-        $blocked = 1;
-        if (wantarray) {
-            my $category;
-            if ($activity eq 'boards') {
-                $category = 'Discussion posts in this course';
-            } elsif ($activity eq 'blogs') {
-                $category = 'Blogs';
-            } elsif ($activity eq 'port') {
-                if (defined($uname) && defined($udom)) {
-                    if ($uname eq $env{'user.name'} &&
-                        $udom eq $env{'user.domain'}) {
-                        $ownitem = 1;
-                    }
-                }
-                $is_course = &Apache::lonnet::is_course($udom,$uname);
-                if ($ownitem) { 
-                    $category = 'Your portfolio files';  
-                } elsif ($is_course) {
-                    my $coursedesc;
-                    foreach my $course (keys(%setters)) {
-                        my %courseinfo =
-                             &Apache::lonnet::coursedescription($course);
-                        $coursedesc = $courseinfo{'description'};
-                    }
-                    $category = "Group portfolio in the course '$coursedesc'";
-                } else {
-                    $category = 'Portfolio files belonging to ';
-                    if ($env{'user.name'} eq 'public' && 
-                        $env{'user.domain'} eq 'public') {
-                        $category .= &plainname($uname,$udom);
-                    } else {
-                        $category .= &aboutmewrapper(&plainname($uname,$udom),$uname,$udom);  
-                    }
-                }
-            } elsif ($activity eq 'groups') {
-                $category = 'Groups in this course';
-            }
-            my $showstart = &Apache::lonlocal::locallocaltime($startblock);
-            my $showend = &Apache::lonlocal::locallocaltime($endblock);
-            $output = '<br />'.&mt('[_1] will be inaccessible between [_2] and [_3] because communication is being blocked.',$category,$showstart,$showend).'<br />';
-            if (!($activity eq 'port' && !($ownitem) && !($is_course))) { 
-                $output .= &build_block_table($startblock,$endblock,\%setters);
-            }
-        }
-    }
-    if (wantarray) {
-        return ($blocked,$output);
-    } else {
-        return $blocked;
-    }
-}
 
 ###############################################
 
@@ -4451,11 +4459,9 @@ sub bodytag {
             <em>$realm</em> $dc_info</div>| unless $env{'form.inhibitmenu'};
 
 	    if ($env{'request.state'} eq 'construct') {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg,
-							  $titletable);
+                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$titletable);
             } else {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$forcereg).
-		    $titletable;
+                $bodytag .= &Apache::lonmenu::menubuttons($forcereg).$titletable;
             }
         }
         return $bodytag;
@@ -4473,7 +4479,7 @@ sub bodytag {
 
     # Explicit link to get inline menu
     my $menu= ($no_inline_link?''
-	       :'<a href="/adm/remote?action=collapse">'.&mt('Switch to Inline Menu Mode').'</a>');
+	       :'<a href="/adm/remote?action=collapse" target="_top">'.&mt('Switch to Inline Menu Mode').'</a>');
     $bodytag .= qq|<div id="LC_nav_bar">$name $role
             <em>$realm</em> $dc_info </div>
             <ol class="LC_smallMenu LC_right">
@@ -4868,6 +4874,7 @@ table#LC_mainmenu td.LC_mainmenu_column
  margin: 0;
  padding: 0;
 }
+
 /* Preliminary fix to hide breadcrumbs inside remote control window */
 #LC_remote #LC_breadcrumbs {
     display:none;
@@ -4919,10 +4926,6 @@ td.LC_menubuttons_text {
   font-weight: bold;
 }
 
-.LC_roleslog_note {
-  font-size: small;
-}
-
 table.LC_data_table,
 table.LC_mail_list {
   border: 1px solid #000000;
@@ -4942,6 +4945,7 @@ table.LC_nested_outer {
   width: 100%;
 }
 
+table.LC_innerpickbox,
 table.LC_nested {
   border: none;
   border-collapse: collapse;
@@ -4952,13 +4956,19 @@ table.LC_nested {
 table.LC_data_table tr th, 
 table.LC_calendar tr th, 
 table.LC_mail_list tr th,
-table.LC_prior_tries tr th {
+table.LC_prior_tries tr th,
+table.LC_innerpickbox tr th {
   font-weight: bold;
   background-color: $data_table_head;
   color:$fontmenu;
   font-size:90%;
 }
 
+table.LC_innerpickbox tr th,
+table.LC_innerpickbox tr td {
+  vertical-align: top;
+}
+
 table.LC_data_table tr.LC_info_row > td {
   background-color: #CCCCCC;
   font-weight: bold;
@@ -4995,6 +5005,9 @@ table.LC_nested tr.LC_empty_row td {
   padding: 8px;
 }
 
+table.LC_caption {
+}
+
 table.LC_nested tr.LC_empty_row td {
   padding: 4ex
 }
@@ -5284,14 +5297,6 @@ table.LC_pick_box td.LC_pick_box_title {
   padding: 8px;
 }
 
-table.LC_pick_box td.LC_selfenroll_pick_box_title {
-  background: $tabbg;
-  font-weight: bold;
-  text-align: right;
-  width: 350px;
-  padding: 8px;
-}
-
 table.LC_pick_box td.LC_pick_box_value {
   text-align: left;
   padding: 8px;
@@ -5450,12 +5455,27 @@ div.LC_feedback_link {
 
 div.LC_feedback_link img {
   height: 22px;
+  vertical-align:middle;
 }
 
 div.LC_feedback_link a{
   text-decoration: none;
 }
 
+div.LC_comblock {
+  display:inline; 
+  color:$font;
+  font-size:90%;
+}
+
+div.LC_feedback_link div.LC_comblock {
+  padding-left:5px;
+}
+
+div.LC_feedback_link div.LC_comblock a {
+  color:$font;
+}
+
 span.LC_feedback_link {
   /* background: $feedback_link_bg; */
   font-size: larger;
@@ -5570,18 +5590,24 @@ table.LC_docs_documents td.LC_docs_docum
   padding: 4px;
 }
 
-.LC_docs_entry_move {
+div.LC_docs_entry_move {
   border: 1px solid #BBBBBB;
   background: #DDDDDD;
+  width: 22px;
   padding: 1px;
   margin: 0;
 }
 
-table.LC_data_table tr > td.LC_docs_entry_commands {
+table.LC_data_table tr > td.LC_docs_entry_commands,
+table.LC_data_table tr > td.LC_docs_entry_parameter {
   background: #DDDDDD;
   font-size: x-small;
 }
 
+.LC_docs_entry_parameter {
+  white-space: nowrap;
+}
+
 .LC_docs_copy {
   color: #000099;
 }
@@ -5603,12 +5629,6 @@ table.LC_data_table tr > td.LC_docs_entr
   font-size: x-small;
 }
 
-table.LC_data_table tr > td.LC_docs_entry_parameter {
-  background: #BBBBFF;
-  font-size: x-small;
-  white-space: nowrap;
-}
-
 table.LC_docs_adddocs td,
 table.LC_docs_adddocs th {
   border: 1px solid #BBBBBB;
@@ -5645,10 +5665,6 @@ table.LC_double_column tr td.LC_right_co
   vertical-align: top;
 }
 
-span.LC_role_level {
-  font-weight: bold;
-}
-
 div.LC_left_float {
   float: left;
   padding-right: 5%;
@@ -5932,24 +5948,13 @@ ul.LC_TabContent {
 	background: $sidebg;
 	border-bottom: solid 1px $lg_border_color;
 	list-style:none;
-	margin: -10px -10px 0 -10px;
+	margin: 0 -10px;
 	padding: 0;
 }
 
-ul.LC_TabContentBigger {
-        display:block;
-        list-style:none;
-        padding: 0;
-}
-
-
 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;
 }
 
 ul#LC_TabMainMenuContent li a {
@@ -5986,35 +5991,68 @@ ul.LC_TabContent li:hover, ul.LC_TabCont
 	padding-right: 16px;
 }
 
+#maincoursedoc {
+	clear:both;
+}
+
+ul.LC_TabContentBigger {
+        display:block;
+        list-style:none;
+        padding: 0;
+}
+
 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: #d9d9d9;
+        vertical-align:bottom;
+        height: 30px;
+        font-size:110%;
+        font-weight:bold;
+        color: #737373;
 }
 
-#maincoursedoc {
-	clear:both;
+
+ul.LC_TabContentBigger li a {
+        background:url('/adm/lonIcons/tabbgleft.gif') left bottom no-repeat;
+	height: 30px;
+	line-height: 30px;
+	text-align: center;
+	display: block;
+	text-decoration: none;
 }
 
-ul.LC_TabContentBigger li:hover, 
-ul.LC_TabContentBigger li.active {
-	background: #ffffff;
+ul.LC_TabContentBigger li:hover a, 
+ul.LC_TabContentBigger li.active a {
+	background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat;
 	color:$font;
+	text-decoration: underline;
 }
 
-ul.LC_TabContentBigger li, 
-ul.LC_TabContentBigger li a {
-	font-size:110%;
-	font-weight:bold;
-	color: #737373;
+
+ul.LC_TabContentBigger li b {
+	background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom;
+	display: block;
+	float: left;
+	padding: 0 30px;
+}
+
+ul.LC_TabContentBigger li:hover b,
+ul.LC_TabContentBigger li.active b {
+        background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;
+        color:$font;
+	border-bottom: 1px solid #FFFFFF;
+}
+
+
+ul.LC_CourseBreadcrumbs {
+  background: $sidebg;
+  line-height: 32px;
+  padding-left: 10px;
+  margin: 0 0 10px 0;
+  list-style-position: inside;
+
 }
 
 ol#LC_MenuBreadcrumbs, 
-ol#LC_PathBreadcrumbs, 
-ul#LC_CourseBreadcrumbs {
+ol#LC_PathBreadcrumbs {
 	padding-left: 10px;
 	margin: 0;
 	list-style-position: inside;
@@ -6022,13 +6060,13 @@ ul#LC_CourseBreadcrumbs {
 
 ol#LC_MenuBreadcrumbs li, 
 ol#LC_PathBreadcrumbs li, 
-ul#LC_CourseBreadcrumbs li {
+ul.LC_CourseBreadcrumbs li {
     display: inline;
     white-space: nowrap;
 }
 
 ol#LC_MenuBreadcrumbs li a,
-ul#LC_CourseBreadcrumbs li a {
+ul.LC_CourseBreadcrumbs li a {
 	text-decoration: none;
 	font-size:90%;
 }
@@ -6501,6 +6539,8 @@ $args - additional optional args support
              inherit_jsmath -> when creating popup window in a page,
                                     should it have jsmath forced on by the
                                     current page
+             bread_crumbs ->             Array containing breadcrumbs
+             bread_crumbs_components ->  if exists show it as headline else show only the breadcrumbs
 
 =back
 
@@ -6737,6 +6777,11 @@ sub simple_error_page {
     sub end_data_table_header_row {
 	return '</tr>'."\n";;
     }
+
+    sub data_table_caption {
+        my $caption = shift;
+        return "<caption class=\"LC_caption\">$caption</caption>";
+    }
 }
 
 =pod
@@ -7509,6 +7554,7 @@ sub user_picker {
         #       loncreateuser::print_user_query_page()
         #       has been completed.
         next if ($option eq 'alc');
+        next if (($option eq 'crs') && ($env{'form.form'} eq 'requestcrs'));  
         next if ($option eq 'crs' && !$env{'request.course.id'});
         if ($curr_selected{'srchin'} eq $option) {
             $srchinsel .= ' 
@@ -7673,24 +7719,20 @@ $newuserscript
 
 $new_user_create
 
-<table>
- <tr>
-  <td>$lt{'doma'}:</td>
-  <td>$domform</td>
-  </td>
- </tr>
- <tr>
-  <td>$lt{'usr'}:</td>
-  <td>$srchbysel
-      $srchtypesel 
-      <input type="text" size="15" name="srchterm" value="$srchterm" />
-      $srchinsel 
-  </td>
- </tr>
-</table>
-<br />
 END_BLOCK
 
+    $output .= &Apache::lonhtmlcommon::start_pick_box().
+               &Apache::lonhtmlcommon::row_title($lt{'doma'}).
+               $domform.
+               &Apache::lonhtmlcommon::row_closure().
+               &Apache::lonhtmlcommon::row_title($lt{'usr'}).
+               $srchbysel.
+               $srchtypesel. 
+               '<input type="text" size="15" name="srchterm" value="'.$srchterm.'" />'.
+               $srchinsel.
+               &Apache::lonhtmlcommon::row_closure(1). 
+               &Apache::lonhtmlcommon::end_pick_box().
+               '<br />';
     return $output;
 }
 
@@ -8607,7 +8649,7 @@ sub csv_print_select_table {
 	my ($value,$display,$defaultcol)=@{ $array_ref };
 	$r->print(&start_data_table_row().'<td>'.$display.'</td>');
 
-	$r->print('<td><select name=f'.$i.
+	$r->print('<td><select name="f'.$i.'"'.
 		  ' onchange="javascript:flip(this.form,'.$i.');">');
 	$r->print('<option value="none"></option>');
 	foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {
@@ -9261,10 +9303,11 @@ sub restore_settings {
 
 =item * &build_recipient_list()
 
-Build recipient lists for four types of e-mail:
+Build recipient lists for five types of e-mail:
 (a) Error Reports, (b) Package Updates, (c) lonstatus warnings/errors
-(d) Help requests, generated by
-lonerrorhandler.pm, CHECKRPMS, loncron, and lonsupportreq.pm respectively.
+(d) Help requests, (e) Course requests needing approval,  generated by
+lonerrorhandler.pm, CHECKRPMS, loncron, lonsupportreq.pm and
+loncoursequeueadmin.pm respectively.
 
 Inputs:
 defmail (scalar - email address of default recipient), 
@@ -9837,7 +9880,8 @@ sub check_clone {
         $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});     
     } else {
 	my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
-	if ($env{'request.role.domain'} eq $args->{'clonedomain'}) {
+	if (($env{'request.role.domain'} eq $args->{'clonedomain'}) && 
+            (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {
 	    $can_clone = 1;
 	} else {
 	    my %clonehash = &Apache::lonnet::get('environment',['cloners'],
@@ -9865,7 +9909,7 @@ sub check_clone {
 }
 
 sub construct_course {
-    my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context) = @_;
+    my ($args,$logmsg,$courseid,$crsudom,$crsunum,$udom,$uname,$context,$cnum,$category) = @_;
     my $outcome;
     my $linefeed =  '<br />'."\n";
     if ($context eq 'auto') {
@@ -9903,7 +9947,8 @@ sub construct_course {
                                              $args->{'crscode'},
                                              $args->{'ccuname'}.':'.
                                              $args->{'ccdomain'},
-                                             $args->{'crstype'});
+                                             $args->{'crstype'},
+                                             $cnum,$context,$category);
 
     # Note: The testing routines depend on this being output; see 
     # Utils::Course. This needs to at least be output as a comment
@@ -10212,7 +10257,7 @@ sub group_term {
     my $crstype = &course_type();
     my %names = (
                   'Course' => 'group',
-                  'Group' => 'team',
+                  'Community' => 'group',
                 );
     return $names{$crstype};
 }
@@ -10405,7 +10450,7 @@ sub init_user_environment {
                 &Apache::lonnet::usertools_access($username,$domain,$tool,'reload');
         }
 
-        foreach my $crstype ('official','unofficial') {
+        foreach my $crstype ('official','unofficial','community') {
             $userenv{'canrequest.'.$crstype} =
                 &Apache::lonnet::usertools_access($username,$domain,$crstype,
                                                   'reload','requestcourses');