--- loncom/interface/loncommon.pm	2009/09/25 13:51:58	1.890
+++ loncom/interface/loncommon.pm	2009/11/06 16:53:17	1.912
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.890 2009/09/25 13:51:58 droeschl Exp $
+# $Id: loncommon.pm,v 1.912 2009/11/06 16:53:17 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -482,8 +482,11 @@ 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 Community - for which you wish to add/modify a user role.');
+    my ($domainfilter,$sec_element,$formname,$role_element,$crstype) = @_;
+    my $wintitle = &mt('Course Browser');
+    if ($crstype ne '') {
+        $wintitle = &mt($crstype);
+    }
     my $id_functions = &javascript_index_functions();
     my $output = '
 <script type="text/javascript" language="JavaScript">
@@ -491,8 +494,9 @@ sub coursebrowser_javascript {
     var stdeditbrowser;'."\n";
 
     $output .= <<"ENDSTDBRW";
-    function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,crstype) {
+    function opencrsbrowser(formname,uname,udom,desc,extra_element,multflag,type,type_elem) {
         var url = '/adm/pickcourse?';
+        var formid = getFormIdByName(formname);
         var domainfilter = getDomainFromSelectbox(formname,udom);
         if (domainfilter != null) {
            if (domainfilter != '') {
@@ -519,6 +523,12 @@ sub coursebrowser_javascript {
                 }
             }     
         }
+        if (type != null && type != '') {
+            url += '&type='+type;
+        }
+        if (type_elem != null && type_elem != '') {
+            url += '&typeelement='+type_elem;
+        }
         if (formname == 'ccrs') {
             var ownername = document.forms[formid].ccuname.value;
             var ownerdom =  document.forms[formid].ccdomain.options[document.forms[formid].ccdomain.selectedIndex].value;
@@ -527,19 +537,7 @@ sub coursebrowser_javascript {
         if (multflag !=null && multflag != '') {
             url += '&multiple='+multflag;
         }
-        if (crstype == 'Course/Community') {
-            if (formname == 'cu') {
-                crstype = document.cu.crstype.options[document.cu.crstype.selectedIndex].value; 
-                if (crstype == "") {
-                    alert("$crs_or_grp_alert");
-                    return;
-                }
-            }
-        }
-        if (crstype !=null && crstype != '') {
-            url += '&type='+crstype;
-        }
-        var title = 'Course_Browser';
+        var title = '$wintitle';
         var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';
         stdeditbrowser = open(url,title,options,'1');
@@ -547,8 +545,8 @@ sub coursebrowser_javascript {
     }
 $id_functions
 ENDSTDBRW
-    if ($sec_element ne '') {
-        $output .= &setsec_javascript($sec_element,$formname);
+    if (($sec_element ne '') || ($role_element ne '')) {
+        $output .= &setsec_javascript($sec_element,$formname,$role_element);
     }
     $output .= '
 // ]]>
@@ -660,7 +658,28 @@ ENDUSERBRW
 }
 
 sub setsec_javascript {
-    my ($sec_element,$formname) = @_;
+    my ($sec_element,$formname,$role_element) = @_;
+    my (@courserolenames,@communityrolenames,$rolestr,$courserolestr,
+        $communityrolestr);
+    if ($role_element ne '') {
+        my @allroles = ('st','ta','ep','in','ad');
+        foreach my $crstype ('Course','Community') {
+            if ($crstype eq 'Community') {
+                foreach my $role (@allroles) {
+                    push(@communityrolenames,&Apache::lonnet::plaintext($role,$crstype));
+                }
+                push(@communityrolenames,&Apache::lonnet::plaintext('co'));
+            } else {
+                foreach my $role (@allroles) {
+                    push(@courserolenames,&Apache::lonnet::plaintext($role,$crstype));
+                }
+                push(@courserolenames,&Apache::lonnet::plaintext('cc'));
+            }
+        }
+        $rolestr = '"'.join('","',@allroles).'"';
+        $courserolestr = '"'.join('","',@courserolenames).'"';
+        $communityrolestr = '"'.join('","',@communityrolenames).'"';
+    }
     my $setsections = qq|
 function setSect(sectionlist) {
     var sectionsArray = new Array();
@@ -694,22 +713,65 @@ function setSect(sectionlist) {
         }
     }
 }
+
+function setRole(crstype) {
+|;
+    if ($role_element eq '') {
+        $setsections .= '    return;
+}
+';
+    } else {
+        $setsections .= qq|
+    var elementLength = document.$formname.$role_element.length;
+    var allroles = Array($rolestr);
+    var courserolenames = Array($courserolestr);
+    var communityrolenames = Array($communityrolestr);
+    if (elementLength != undefined) {
+        if (document.$formname.$role_element.options[5].value == 'cc') {
+            if (crstype == 'Course') {
+                return;
+            } else {
+                allroles[5] = 'co';
+                for (var i=0; i<6; i++) {
+                    document.$formname.$role_element.options[i].value = allroles[i];
+                    document.$formname.$role_element.options[i].text = communityrolenames[i];
+                }
+            }
+        } else {
+            if (crstype == 'Community') {
+                return;
+            } else {
+                allroles[5] = 'cc';
+                for (var i=0; i<6; i++) {
+                    document.$formname.$role_element.options[i].value = allroles[i];
+                    document.$formname.$role_element.options[i].text = courserolenames[i];
+                }
+            }
+        }
+    }
+    return;
+}
 |;
+    }
     return $setsections;
 }
 
-
 sub selectcourse_link {
-   my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype)=@_;
+   my ($form,$unameele,$udomele,$desc,$extra_element,$multflag,$selecttype,
+       $typeelement) = @_;
+   my $type = $selecttype;
    my $linktext = &mt('Select Course');
    if ($selecttype eq 'Community') {
-       $linktext = &mt('Select Community'); 
+       $linktext = &mt('Select Community');
+   } elsif ($selecttype eq 'Course/Community') {
+       $linktext = &mt('Select Course/Community');
+       $type = '';
    }
    return '<span class="LC_nobreak">'
          ."<a href='"
          .'javascript:opencrsbrowser("'.$form.'","'.$unameele
          .'","'.$udomele.'","'.$desc.'","'.$extra_element
-         .'","'.$multflag.'","'.$selecttype.'");'
+         .'","'.$multflag.'","'.$type.'","'.$typeelement.'");'
          ."'>".$linktext.'</a>'
          .'</span>';
 }
@@ -1108,7 +1170,7 @@ sub general_help {
     my $helptopic='Student_Intro';
     if ($env{'request.role'}=~/^(ca|au)/) {
 	$helptopic='Authoring_Intro';
-    } elsif ($env{'request.role'}=~/^cc/) {
+    } elsif ($env{'request.role'}=~/^(cc|co)/) {
 	$helptopic='Course_Coordination_Intro';
     } elsif ($env{'request.role'}=~/^dc/) {
         $helptopic='Domain_Coordination_Intro';
@@ -1880,7 +1942,7 @@ sub select_level_form {
 
 =pod
 
-=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange)
+=item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms)
 
 Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.  
@@ -1891,17 +1953,24 @@ selected");
 
 If the $showdomdesc flag is set, the domain name is followed by the domain description.
 
-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.  
+The optional $onchange argument specifies what should occur if the domain selector is changed, e.g., 'this.form.submit()' if the form is to be automatically submitted.
+
+The optional $incdoms is a reference to an array of domains which will be the only available options. 
 
 =cut
 
 #-------------------------------------------
 sub select_dom_form {
-    my ($defdom,$name,$includeempty,$showdomdesc,$onchange) = @_;
+    my ($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms) = @_;
     if ($onchange) {
         $onchange = ' onchange="'.$onchange.'"';
     }
-    my @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
+    my @domains;
+    if (ref($incdoms) eq 'ARRAY') {
+        @domains = sort {lc($a) cmp lc($b)} (@{$incdoms});
+    } else {
+        @domains = sort {lc($a) cmp lc($b)} (&Apache::lonnet::all_domains());
+    }
     if ($includeempty) { @domains=('',@domains); }
     my $selectdomain = "<select name=\"$name\" size=\"1\"$onchange>\n";
     foreach my $dom (@domains) {
@@ -2954,7 +3023,7 @@ sub messagewrapper {
 sub noteswrapper {
     my ($link,$un,$do)=@_;
     return 
-"<a href='/adm/email?recordftf=retrieve&recname=$un&recdom=$do'>$link</a>";
+"<a href='/adm/email?recordftf=retrieve&amp;recname=$un&amp;recdom=$do'>$link</a>";
 }
 
 # ------------------------------------------------------------- Aboutme Wrapper
@@ -2964,7 +3033,7 @@ sub aboutmewrapper {
     if (!defined($username)  && !defined($domain)) {
         return;
     }
-    return '<a href="/adm/'.$domain.'/'.$username.'/aboutme"'.
+    return '<a href="/adm/'.$domain.'/'.$username.'/aboutme?forcestudent=1"'.
 	($target?' target="$target"':'').' title="'.&mt("View this user's personal information page").'">'.$link.'</a>';
 }
 
@@ -3669,6 +3738,7 @@ sub findallcourses {
         if (!%roles) {
             %roles = (
                        cc => 1,
+                       co => 1,
                        in => 1,
                        ep => 1,
                        ta => 1,
@@ -4046,7 +4116,7 @@ sub determinedomain {
     my $domain=shift;
     if (! $domain) {
         # Determine domain if we have not been given one
-        $domain = $Apache::lonnet::perlvar{'lonDefDomain'};
+        $domain = &Apache::lonnet::default_login_domain();
         if ($env{'user.domain'}) { $domain=$env{'user.domain'}; }
         if ($env{'request.role.domain'}) { 
             $domain=$env{'request.role.domain'}; 
@@ -4396,6 +4466,9 @@ sub bodytag {
         if ($env{'request.role'} !~ /^cr/) {
             $role = &Apache::lonnet::plaintext($role,&course_type());
         }
+        if ($env{'request.course.sec'}) {
+            $role .= ('&nbsp;'x2).'-&nbsp;'.&mt('section:').'&nbsp;'.$env{'request.course.sec'};
+        }   
 	$realm = $env{'course.'.$env{'request.course.id'}.'.description'};
     } else {
         $role = &Apache::lonnet::plaintext($role);
@@ -4435,35 +4508,49 @@ sub bodytag {
         $dc_info = '('.$dc_info.')';
     }
 
-    $role = "($role)" if $role;
+    $role = '<span class="LC_nobreak">('.$role.')</span>' if $role;
     &get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['inhibitmenu']);
 
     if ($env{'environment.remote'} eq 'off') {
         # No Remote
-	if ($env{'request.state'} eq 'construct') {
-	    $forcereg=1;
-	}
+        if ($no_nav_bar) { return $bodytag; } 
 
-#    if ($env{'request.state'} eq 'construct') {
-#        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
-#    }
-
-        my $titletable = '<table id="LC_title_bar">'
-                        ."<tr><td> $titleinfo $dc_info</td>"
-                        .'</tr></table>';
+        if ($env{'request.state'} eq 'construct') { $forcereg=1; }
+
+        #    if ($env{'request.state'} eq 'construct') {
+        #        $titleinfo = &CSTR_pageheader(); #FIXME: Will be removed once all scripts have their own calls
+        #    }
 
-	if ($no_nav_bar) {
-	    $bodytag .= $titletable;
-	} else {
         $bodytag .= qq|<div id="LC_nav_bar">$name $role<br />
             <em>$realm</em> $dc_info</div>| unless $env{'form.inhibitmenu'};
 
-	    if ($env{'request.state'} eq 'construct') {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg,$titletable);
-            } else {
-                $bodytag .= &Apache::lonmenu::menubuttons($forcereg).$titletable;
-            }
+        if (   $env{'form.inhibitmenu'} eq 'yes' 
+            || $ENV{'REQUEST_URI'} eq '/adm/logout'
+            || $env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
+
+            return $bodytag;
+        }
+
+        $bodytag .= Apache::lonhtmlcommon::scripttag(
+            Apache::lonmenu::utilityfunctions(), 'start');
+
+        $bodytag .= Apache::lonmenu::primary_menu();
+
+        #don't show menus for public users
+        if($env{'user.name'} ne 'public' && $env{'user.domain'} ne 'public'){
+            $bodytag .= Apache::lonmenu::secondary_menu();
+            $bodytag .= Apache::lonmenu::serverform();
+            $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); 
+            $bodytag .= Apache::lonmenu::innerregister($forcereg) if $forcereg;
+        }else{
+            # this is to seperate menu from content when there's no secondary
+            # menu. Especially needed for public accessible ressources.
+            $bodytag .= '<hr style="clear:both" />';
+            $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end'); 
         }
+
+        #SD testing
+        #$bodytag .= Apache::lonmenu::menubuttons($forcereg);
         return $bodytag;
     }
 
@@ -4482,7 +4569,7 @@ sub bodytag {
 	       :'<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">
+            <ol class="LC_primary_menu LC_right">
                 <li>$menu</li>
             </ol>| unless $env{'form.inhibitmenu'};
     #
@@ -4629,52 +4716,47 @@ sub standard_css {
     my $mail_other_hover     = '#669999';
     my $table_header         = '#DDDDDD';
     my $feedback_link_bg     = '#BBBBBB';
-    my $lg_border_color	     = '#C8C8C8';
+    my $lg_border_color      = '#C8C8C8';
 
     my $border = ($env{'browser.type'} eq 'explorer' ||
-		  $env{'browser.type'} eq 'safari'     ) ? '0 2px 0 2px'
-	                                                 : '0 3px 0 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;
+  font-family: $sans;
+  line-height:130%;
+  font-size:0.83em;
+  color:$font;
 }
 
-a:link, a:visited { 
-  font-size:100%; 
+a:link,
+a:visited {
+  font-size:100%;
 }
 
-a:focus { 
+a:focus {
   color: red;
-  background: yellow 
-}
-
-hr {
-  clear: both;
-  color: $tabbg;
-  background-color: $tabbg;
-  height: 3px;
-  border: none;
+  background: yellow;
 }
 
-form, .inline { 
-   display: inline; 
+form, .inline {
+  display: inline;
 }
 
 .LC_right {
-   text-align:right;
+  text-align:right;
 }
 
 .LC_middle {
-   vertical-align:middle;
+  vertical-align:middle;
 }
 
 /* just for tests */
-.LC_400Box {width:400px; }
+.LC_400Box {
+  width:400px;
+}
 /* end */
 
 .LC_filename {
@@ -4734,35 +4816,35 @@ div.LC_confirm_box .LC_success img {
 }
 
 .LC_discussion {
-   background: $tabbg;
-   border: 1px solid black;
-   margin: 2px;
+  background: $tabbg;
+  border: 1px solid black;
+  margin: 2px;
 }
 
 .LC_disc_action_links_bar {
-   background: $tabbg;
-   border: none;
-   margin: 4px;
+  background: $tabbg;
+  border: none;
+  margin: 4px;
 }
 
 .LC_disc_action_left {
-   text-align: left;
+  text-align: left;
 }
 
 .LC_disc_action_right {
-   text-align: right;
+  text-align: right;
 }
 
 .LC_disc_new_item {
-   background: white;
-   border: 2px solid red;
-   margin: 2px;
+  background: white;
+  border: 2px solid red;
+  margin: 2px;
 }
 
 .LC_disc_old_item {
-   background: white;
-   border: 1px solid black;
-   margin: 2px;
+  background: white;
+  border: 1px solid black;
+  margin: 2px;
 }
 
 table.LC_pastsubmission {
@@ -4807,7 +4889,7 @@ table#LC_title_bar td {
   background: $tabbg;
 }
 
-table#LC_menubuttons img{
+table#LC_menubuttons img {
   border: none;
 }
 
@@ -4847,11 +4929,11 @@ table#LC_top_nav td.LC_top_nav_login {
 }
 
 .LC_breadcrumbs_component {
-    float: right;
-    margin: 0 1em;
+  float: right;
+  margin: 0 1em;
 }
 .LC_breadcrumbs_component img {
-    vertical-align: middle;
+  vertical-align: middle;
 }
 
 td.LC_table_cell_checkbox {
@@ -4859,41 +4941,44 @@ td.LC_table_cell_checkbox {
 }
 
 table#LC_mainmenu td.LC_mainmenu_column {
-    vertical-align: top;
+  vertical-align: top;
 }
 
 .LC_fontsize_small {
- font-size: 70%;
+  font-size: 70%;
 }
 
 #LC_breadcrumbs {
- clear:both;
- background: $sidebg;
- border-bottom: 1px solid $lg_border_color;
- line-height: 32px; 
- margin: 0;
- padding: 0;
+  clear:both;
+  background: $sidebg;
+  border-bottom: 1px solid $lg_border_color;
+  line-height: 2.5em;
+ /* SD working here
+ height: 2.5em;
+ overflow: hidden; */
+  margin: 0;
+  padding: 0;
 }
 
 /* Preliminary fix to hide breadcrumbs inside remote control window */
 #LC_remote #LC_breadcrumbs {
-    display:none;
+  display:none;
 }
 
 #LC_head_subbox {
- clear:both;
- background: #F8F8F8; /* $sidebg; */
- border-bottom: 1px solid $lg_border_color;
- margin: 0 0 10px 0;
- padding: 5px;
+  clear:both;
+  background: #F8F8F8; /* $sidebg; */
+  border-bottom: 1px solid $lg_border_color;
+  margin: 0 0 10px 0;
+  padding: 5px;
 }
 
 .LC_fontsize_medium {
- font-size: 85%;
+  font-size: 85%;
 }
 
 .LC_fontsize_large {
- font-size: 120%;
+  font-size: 120%;
 }
 
 .LC_menubuttons_inline_text {
@@ -4914,7 +4999,7 @@ table#LC_mainmenu td.LC_mainmenu_column
 }
 
 td.LC_menubuttons_text {
- 	color: $font;
+  color: $font;
 }
 
 .LC_current_location {
@@ -4953,8 +5038,8 @@ table.LC_nested {
   width: 100%;
 }
 
-table.LC_data_table tr th, 
-table.LC_calendar 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,
 table.LC_innerpickbox tr th {
@@ -4975,16 +5060,26 @@ table.LC_data_table tr.LC_info_row > td
   text-align: left;
 }
 
-table.LC_data_table tr.LC_odd_row > td,
+table.LC_data_table tr.LC_odd_row > td {
+  background-color: $data_table_light;
+  padding: 2px;
+  vertical-align: top;
+}
+
 table.LC_pick_box tr > td.LC_odd_row {
   background-color: $data_table_light;
+  vertical-align: top;
+}
+
+table.LC_data_table tr.LC_even_row > td {
+  background-color: $data_table_dark;
   padding: 2px;
+  vertical-align: top;
 }
 
-table.LC_data_table tr.LC_even_row > td,
 table.LC_pick_box tr > td.LC_even_row {
   background-color: $data_table_dark;
-  padding: 2px;
+  vertical-align: top;
 }
 
 table.LC_data_table tr.LC_data_table_highlight td {
@@ -5131,7 +5226,7 @@ table.LC_mail_list tr.LC_mail_other:hove
 
 table.LC_data_table tr > td.LC_browser_file,
 table.LC_data_table tr > td.LC_browser_file_published {
-  background: #CCFF88;
+  background: #AAEE77;
 }
 
 table.LC_data_table tr > td.LC_browser_file_locked,
@@ -5140,20 +5235,20 @@ table.LC_data_table tr > td.LC_browser_f
 }
 
 table.LC_data_table tr > td.LC_browser_file_obsolete {
-  background: #AAAAAA;
+  background: #888888;
 }
 
 table.LC_data_table tr > td.LC_browser_file_modified,
 table.LC_data_table tr > td.LC_browser_file_metamodified {
-  background: #FFFF77;
+  background: #F8F866;
 }
 
 table.LC_data_table tr.LC_browser_folder > td {
-  background: #CCCCFF;
+  background: #E0E8FF;
 }
 
 table.LC_data_table tr > td.LC_roles_is {
-/*  background: #77FF77; */
+  /* background: #77FF77; */
 }
 
 table.LC_data_table tr > td.LC_roles_future {
@@ -5201,7 +5296,8 @@ span.LC_parm_part {
   color: blue;
 }
 
-span.LC_parm_folder, span.LC_parm_symb {
+span.LC_parm_folder,
+span.LC_parm_symb {
   font-size: x-small;
   font-family: $mono;
   color: #AAAAAA;
@@ -5291,7 +5387,7 @@ table.LC_pick_box {
 table.LC_pick_box td.LC_pick_box_title {
   background: $sidebg;
   font-weight: bold;
-  text-align: right;
+  text-align: left;
   vertical-align: top;
   width: 184px;
   padding: 8px;
@@ -5329,40 +5425,6 @@ table.LC_pick_box td.LC_oddrow_value {
   background-color: $data_table_light;
 }
 
-table.LC_helpform_receipt {
-  width: 620px;
-  border-collapse: separate;
-  background: white;
-  border: 1px solid black;
-  border-spacing: 1px;
-}
-
-table.LC_helpform_receipt td.LC_pick_box_title {
-  background: $tabbg;
-  font-weight: bold;
-  text-align: right;
-  width: 184px;
-  padding: 8px;
-}
-
-table.LC_helpform_receipt td.LC_evenrow_value {
-  text-align: left;
-  padding: 8px;
-  background-color: $data_table_light;
-}
-
-table.LC_helpform_receipt td.LC_oddrow_value {
-  text-align: left;
-  padding: 8px;
-  background-color: $data_table_light;
-}
-
-table.LC_helpform_receipt td.LC_pick_box_separator {
-  padding: 0;
-  height: 1px;
-  background: black;
-}
-
 span.LC_helpform_receipt_cat {
   font-weight: bold;
 }
@@ -5458,12 +5520,12 @@ div.LC_feedback_link img {
   vertical-align:middle;
 }
 
-div.LC_feedback_link a{
+div.LC_feedback_link a {
   text-decoration: none;
 }
 
 div.LC_comblock {
-  display:inline; 
+  display:inline;
   color:$font;
   font-size:90%;
 }
@@ -5555,7 +5617,7 @@ table.LC_prior_option {
   border-collapse: collapse;
 }
 
-table.LC_prior_rank, 
+table.LC_prior_rank,
 table.LC_prior_match {
   border-collapse: collapse;
 }
@@ -5785,17 +5847,17 @@ div.LC_edit_problem_saves {
   padding-bottom: 5px;
 }
 
-img.stift{
+img.stift {
   border-width: 0;
   vertical-align: middle;
 }
 
-table#LC_mainmenu{
- margin-top:10px;
- width:80%;
+table#LC_mainmenu {
+  margin-top:10px;
+  width:80%;
 }
 
-table#LC_mainmenu td.LC_mainmenu_col_fieldset{
+table#LC_mainmenu td.LC_mainmenu_col_fieldset {
   vertical-align: top;
   width: 45%;
 }
@@ -5808,7 +5870,7 @@ table#LC_mainmenu td.LC_mainmenu_col_fie
 }
 
 div.LC_createcourse {
-    margin: 10px 10px 10px 10px;
+  margin: 10px 10px 10px 10px;
 }
 
 /* ---- Remove when done ----
@@ -5819,226 +5881,235 @@ div.LC_createcourse {
 # --------------------------*/
 
 a:hover,
-ol.LC_smallMenu a:hover,
+ol.LC_primary_menu a:hover,
 ol#LC_MenuBreadcrumbs a:hover,
 ol#LC_PathBreadcrumbs a:hover,
-ul#LC_TabMainMenuContent a:hover,
+ul#LC_secondary_menu a:hover,
 .LC_FormSectionClearButton input:hover
 ul.LC_TabContent   li:hover a {
-	color:#BF2317;
-        text-decoration:none;
+  color:#BF2317;
+  text-decoration:none;
 }
 
 h1 {
-	padding: 0;
-	line-height:130%;
+  padding: 0;
+  line-height:130%;
 }
 
-h2,h3,h4,h5,h6 {
-	margin: 5px 0 5px 0;
-	padding: 0;
-	line-height:130%;
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin: 5px 0 5px 0;
+  padding: 0;
+  line-height:130%;
 }
 
 .LC_hcell {
-        padding:3px 15px 3px 15px;
-        margin: 0;
-	background-color:$tabbg;
-	color:$fontmenu;
-	border-bottom:solid 1px $lg_border_color;
+  padding:3px 15px 3px 15px;
+  margin: 0;
+  background-color:$tabbg;
+  color:$fontmenu;
+  border-bottom:solid 1px $lg_border_color;
 }
 
 .LC_Box > .LC_hcell {
-    margin: 0 -10px 10px -10px;
+  margin: 0 -10px 10px -10px;
 }
 
 .LC_noBorder {
-        border: 0;
+  border: 0;
 }
 
 .LC_Right {
-        float: right;
-        margin: 0;
-        padding: 0;
+  float: right;
+  margin: 0;
+  padding: 0;
 }
 
 .LC_FormSectionClearButton input {
-        background-color:transparent;
-        border: none;
-        cursor:pointer;
-        text-decoration:underline;
+  background-color:transparent;
+  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; */
+  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 0;
-/*	overflow: hidden; */
+dl,
+ul,
+div,
+fieldset {
+  margin: 10px 10px 10px 0;
+  /* overflow: hidden; */
 }
 
 fieldset > legend {
-    font-weight: bold;
-    padding: 0 5px 0 5px;
+  font-weight: bold;
+  padding: 0 5px 0 5px;
 }
 
 #LC_nav_bar {
-    float: left;
-    margin: 0.2em 0 0 0;
+  float: left;
+  margin: 0.2em 0 0 0;
 }
 
-#LC_nav_bar em{
-    font-weight: bold;
-    font-style: normal;
+#LC_nav_bar em {
+  font-weight: bold;
+  font-style: normal;
 }
 
-ol.LC_smallMenu {
-    float: right;
-    margin: 0.2em 0 0 0;
+ol.LC_primary_menu {
+  float: right;
+  margin: 0.2em 0 0 0;
 }
 
 ol#LC_PathBreadcrumbs {
-	margin: 0;
+  margin: 0;
 }
 
-ol.LC_smallMenu li {
-	display: inline;
-	padding: 5px 5px 0 10px;
-	vertical-align: top;
+ol.LC_primary_menu li {
+  display: inline;
+  padding: 5px 5px 0 10px;
+  vertical-align: top;
 }
 
-ol.LC_smallMenu li img {
-	vertical-align: bottom;
+ol.LC_primary_menu li img {
+  vertical-align: bottom;
 }
 
-ol.LC_smallMenu a {
-	font-size: 90%;
-	color: RGB(80, 80, 80);
-	text-decoration: none;
+ol.LC_primary_menu a {
+  font-size: 90%;
+  color: RGB(80, 80, 80);
+  text-decoration: none;
 }
 
-ul#LC_TabMainMenuContent {
-    clear: both;
-    color: $fontmenu;
-    background: $tabbg;
-    list-style: none;
-    padding: 0;
-    margin: 0;
-    width: 100%;
+ul#LC_secondary_menu {
+  clear: both;
+  color: $fontmenu;
+  background: $tabbg;
+  list-style: none;
+  padding: 0;
+  margin: 0;
+  width: 100%;
 }
 
-ul#LC_TabMainMenuContent li {
-    font-weight: bold;
-    line-height: 1.8em;
-    padding: 0 0.8em; 
-    border-right: 1px solid black;
-    display: inline;
-    vertical-align: middle;
+ul#LC_secondary_menu li {
+  font-weight: bold;
+  line-height: 1.8em;
+  padding: 0 0.8em;
+  border-right: 1px solid black;
+  display: inline;
+  vertical-align: middle;
 }
 
 ul.LC_TabContent {
-	display:block;
-	background: $sidebg;
-	border-bottom: solid 1px $lg_border_color;
-	list-style:none;
-	margin: 0 -10px;
-	padding: 0;
+  display:block;
+  background: $sidebg;
+  border-bottom: solid 1px $lg_border_color;
+  list-style:none;
+  margin: 0 -10px;
+  padding: 0;
 }
 
 ul.LC_TabContent li,
 ul.LC_TabContentBigger li {
-	float:left;
+  float:left;
 }
 
-ul#LC_TabMainMenuContent li a {
-    color: $fontmenu;
-	text-decoration: none;
+ul#LC_secondary_menu li a {
+  color: $fontmenu;
+  text-decoration: none;
 }
 
 ul.LC_TabContent {
-	min-height:1.5em;
+  min-height:1.5em;
 }
 
 ul.LC_TabContent li {
-	vertical-align:middle;
-	padding: 0 10px 0 10px;
-	background-color:$tabbg;
-	border-bottom:solid 1px $lg_border_color;
+  vertical-align:middle;
+  padding: 0 10px 0 10px;
+  background-color:$tabbg;
+  border-bottom:solid 1px $lg_border_color;
 }
 
 ul.LC_TabContent .right {
-	float:right;
+  float:right;
 }
 
-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 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 2px #FFFFFF;
-	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 2px #FFFFFF;
+  padding-right: 16px;
 }
 
 #maincoursedoc {
-	clear:both;
+  clear:both;
 }
 
 ul.LC_TabContentBigger {
-        display:block;
-        list-style:none;
-        padding: 0;
+  display:block;
+  list-style:none;
+  padding: 0;
 }
 
 ul.LC_TabContentBigger li {
-        vertical-align:bottom;
-        height: 30px;
-        font-size:110%;
-        font-weight:bold;
-        color: #737373;
+  vertical-align:bottom;
+  height: 30px;
+  font-size:110%;
+  font-weight:bold;
+  color: #737373;
 }
 
 
 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;
+  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 a, 
+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;
+  background:url('/adm/lonIcons/tabbgleft.gif') left top no-repeat;
+  color:$font;
+  text-decoration: underline;
 }
 
 
 ul.LC_TabContentBigger li b {
-	background: url('/adm/lonIcons/tabbgright.gif') no-repeat right bottom;
-	display: block;
-	float: left;
-	padding: 0 30px;
+  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;
+  background:url('/adm/lonIcons/tabbgright.gif') right top no-repeat;
+  color:$font;
+  border-bottom: 1px solid #FFFFFF;
 }
 
 
@@ -6051,53 +6122,57 @@ ul.LC_CourseBreadcrumbs {
 
 }
 
-ol#LC_MenuBreadcrumbs, 
+ol#LC_MenuBreadcrumbs,
 ol#LC_PathBreadcrumbs {
-	padding-left: 10px;
-	margin: 0;
-	list-style-position: inside;
+  padding-left: 10px;
+  margin: 0;
+  list-style-position: inside;
+    /* SD working here
+    white-space: nowrap; */
 }
 
-ol#LC_MenuBreadcrumbs li, 
-ol#LC_PathBreadcrumbs li, 
+ol#LC_MenuBreadcrumbs li,
+ol#LC_PathBreadcrumbs li,
 ul.LC_CourseBreadcrumbs li {
-    display: inline;
-    white-space: nowrap;
+  display: inline;
+  white-space: nowrap;
+    /* SD working here
+    white-space: normal; */
 }
 
 ol#LC_MenuBreadcrumbs li a,
 ul.LC_CourseBreadcrumbs li a {
-	text-decoration: none;
-	font-size:90%;
+  text-decoration: none;
+  font-size:90%;
 }
 
 ol#LC_PathBreadcrumbs li a {
-	text-decoration:none;
-	font-size:100%;
-	font-weight:bold;
+  text-decoration:none;
+  font-size:100%;
+  font-weight:bold;
 }
 
 .LC_Box {
-    border: solid 1px $lg_border_color;
-    padding: 0 10px 10px 10px;
+  border: solid 1px $lg_border_color;
+  padding: 0 10px 10px 10px;
 }
 
 .LC_AboutMe_Image {
-	float:left;
-	margin-right:10px;
+  float:left;
+  margin-right:10px;
 }
 
 .LC_Clear_AboutMe_Image {
-	clear:left;
+  clear:left;
 }
 
 dl.LC_ListStyleClean dt {
-	padding-right: 5px;
-	display: table-header-group;
+  padding-right: 5px;
+  display: table-header-group;
 }
 
 dl.LC_ListStyleClean dd {
-	display: table-row;
+  display: table-row;
 }
 
 .LC_ListStyleClean,
@@ -6105,11 +6180,11 @@ dl.LC_ListStyleClean dd {
 .LC_ListStyleNormal,
 .LC_ListStyle_Border,
 .LC_ListStyleSpecial {
-	/*display:block;	*/
-	list-style-position: inside;
-	list-style-type: none;
-	overflow: hidden;
-	padding: 0;
+  /* display:block; */
+  list-style-position: inside;
+  list-style-type: none;
+  overflow: hidden;
+  padding: 0;
 }
 
 .LC_ListStyleSimple li,
@@ -6118,202 +6193,202 @@ dl.LC_ListStyleClean dd {
 .LC_ListStyleNormal dd,
 .LC_ListStyleSpecial li,
 .LC_ListStyleSpecial dd {
-	margin: 0;
-	padding: 5px 5px 5px 10px;
-	clear: both;
+  margin: 0;
+  padding: 5px 5px 5px 10px;
+  clear: both;
 }
 
 .LC_ListStyleClean li,
 .LC_ListStyleClean dd {
-	padding-top: 0;
-	padding-bottom: 0;
+  padding-top: 0;
+  padding-bottom: 0;
 }
 
 .LC_ListStyleSimple dd,
 .LC_ListStyleSimple li {
-	border-bottom: solid 1px $lg_border_color;
+  border-bottom: solid 1px $lg_border_color;
 }
 
 .LC_ListStyleSpecial li,
 .LC_ListStyleSpecial dd {
-	list-style-type: none;
-	background-color: RGB(220, 220, 220);
-	margin-bottom: 4px;
+  list-style-type: none;
+  background-color: RGB(220, 220, 220);
+  margin-bottom: 4px;
 }
 
 table.LC_SimpleTable {
-	margin:5px;
-	border:solid 1px $lg_border_color;
+  margin:5px;
+  border:solid 1px $lg_border_color;
 }
 
 table.LC_SimpleTable tr {
-	padding: 0;
-	border:solid 1px $lg_border_color;
+  padding: 0;
+  border:solid 1px $lg_border_color;
 }
 
 table.LC_SimpleTable thead {
-	 background:rgb(220,220,220);
+  background:rgb(220,220,220);
 }
 
 div.LC_columnSection {
-	display: block;
-	clear: both;
-	overflow: hidden;
-	margin: 0;
+  display: block;
+  clear: both;
+  overflow: hidden;
+  margin: 0;
 }
 
 div.LC_columnSection>* {
-	float: left;
-	margin: 10px 20px 10px 0;
-	overflow:hidden;
+  float: left;
+  margin: 10px 20px 10px 0;
+  overflow:hidden;
 }
 
 .LC_loginpage_container {
-	text-align:left;
-	margin : 0 auto;
-	width:90%;
-	padding: 10px;
-	height: auto;
-	background-color:#FFFFFF;
-	border:1px solid #CCCCCC;
+  text-align:left;
+  margin : 0 auto;
+  width:90%;
+  padding: 10px;
+  height: auto;
+  background-color:#FFFFFF;
+  border:1px solid #CCCCCC;
 }
 
 
 .LC_loginpage_loginContainer {
-	float:left;
-	width: 182px;
-	padding: 2px;
-	border:1px solid #CCCCCC;
-	background-color:$loginbg;
+  float:left;
+  width: 182px;
+  padding: 2px;
+  border:1px solid #CCCCCC;
+  background-color:$loginbg;
 }
 
 .LC_loginpage_loginContainer h2 {
-	margin-top: 0;
-	display:block;
-	background:$bgcol;
-	color:$textcol;
-	padding-left:5px;
+  margin-top: 0;
+  display:block;
+  background:$bgcol;
+  color:$textcol;
+  padding-left:5px;
 }
 
 .LC_loginpage_loginInfo {
-	float:left;
-	width:182px;
-	border:1px solid #CCCCCC;
-	padding:2px;
+  float:left;
+  width:182px;
+  border:1px solid #CCCCCC;
+  padding:2px;
 }
 
 .LC_loginpage_space {
-	clear: both;
-	margin-bottom: 20px;
-	border-bottom: 1px solid #CCCCCC;
+  clear: both;
+  margin-bottom: 20px;
+  border-bottom: 1px solid #CCCCCC;
 }
 
 .LC_loginpage_floatLeft {
-	float: left;
-	width: 200px;
-	margin: 0;
+  float: left;
+  width: 200px;
+  margin: 0;
 }
 
 table em {
-	font-weight: bold;
-	font-style: normal;
+  font-weight: bold;
+  font-style: normal;
 }
 
 table.LC_tableBrowseRes,
 table.LC_tableOfContent {
-        border:none;
-	border-spacing: 1px;
-	padding: 3px;
-	background-color: #FFFFFF;
-	font-size: 90%;
+  border:none;
+  border-spacing: 1px;
+  padding: 3px;
+  background-color: #FFFFFF;
+  font-size: 90%;
 }
 
-table.LC_tableOfContent{
-    border-collapse: collapse;
+table.LC_tableOfContent {
+  border-collapse: collapse;
 }
 
 table.LC_tableBrowseRes a,
 table.LC_tableOfContent a {
-        background-color: transparent;
-	text-decoration: none;
+  background-color: transparent;
+  text-decoration: none;
 }
 
 table.LC_tableBrowseRes tr.LC_trOdd,
-table.LC_tableOfContent tr.LC_trOdd{
-	background-color: #EEEEEE;
+table.LC_tableOfContent tr.LC_trOdd {
+  background-color: #EEEEEE;
 }
 
 table.LC_tableOfContent img {
-	border: none;
-	height: 1.3em;
-	vertical-align: text-bottom;
-	margin-right: 0.3em;
+  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);
+  background-image:url(/res/adm/pages/open-first-problem.gif);
 }
 
 a#LC_content_toolbar_launchnav {
-	background-image:url(/res/adm/pages/start-navigation.gif);
+  background-image:url(/res/adm/pages/start-navigation.gif);
 }
 
 a#LC_content_toolbar_closenav {
-	background-image:url(/res/adm/pages/close-navigation.gif);
+  background-image:url(/res/adm/pages/close-navigation.gif);
 }
 
 a#LC_content_toolbar_everything {
-	background-image:url(/res/adm/pages/show-all.gif);
+  background-image:url(/res/adm/pages/show-all.gif);
 }
 
 a#LC_content_toolbar_uncompleted {
-	background-image:url(/res/adm/pages/show-incomplete-problems.gif);
+  background-image:url(/res/adm/pages/show-incomplete-problems.gif);
 }
 
 #LC_content_toolbar_clearbubbles {
-	background-image:url(/res/adm/pages/mark-discussionentries-read.gif);
+  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 ;
+  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);
+  background-image:url(/res/adm/pages/open-all-folders.gif);
 }
 
 ul#LC_toolbar li a:hover {
-	background-position: bottom center;
+  background-position: bottom center;
 }
 
 ul#LC_toolbar {
-	padding: 0;
-	margin: 2px;
-	list-style:none;
-	position:relative;
-	background-color:white;
+  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;
-} 
+  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;
+  display:block;
+  padding: 0;
+  margin: 0;
+  height: 32px;
+  width: 32px;
+  color:white;
+  border: none;
+  background-repeat:no-repeat;
+  background-color:transparent;
 }
 
 ul.LC_funclist li {
@@ -6746,14 +6821,14 @@ sub simple_error_page {
 	my ($add_class) = @_;
 	$row_count[0]++;
 	my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
-	$css_class = (join(' ',$css_class,$add_class));
+	$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');
 	return  '<tr class="'.$css_class.'">'."\n";;
     }
     
     sub continue_data_table_row {
 	my ($add_class) = @_;
 	my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
-	$css_class = (join(' ',$css_class,$add_class));
+	$css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');;
 	return  '<tr class="'.$css_class.'">'."\n";;
     }
 
@@ -6852,7 +6927,7 @@ sub get_users_function {
     if ($env{'request.role'}=~/^(st)/) {
         $function='student';
     }
-    if ($env{'request.role'}=~/^(cc|in|ta|ep)/) {
+    if ($env{'request.role'}=~/^(cc|co|in|ta|ep)/) {
         $function='coordinator';
     }
     if ($env{'request.role'}=~/^(su|dc|ad|li)/) {
@@ -6923,7 +6998,7 @@ sub check_user_status {
     my $active_chk = 'none';
     my $now = time;
     if (@uroles > 0) {
-        if (($role eq 'cc') || ($sec eq '') || (!defined($sec))) {
+        if (($role eq 'cc') || ($role eq 'co') || ($sec eq '') || (!defined($sec))) {
             $srchstr = '/'.$cdom.'/'.$crs.'_'.$role;
         } else {
             $srchstr = '/'.$cdom.'/'.$crs.'/'.$sec.'_'.$role;
@@ -9875,11 +9950,24 @@ sub check_clone {
     my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom);
     my $clonemsg;
     my $can_clone = 0;
-
+    my $lctype = lc($args->{'type'});
+    if ($lctype ne 'community') {
+        $lctype = 'course';
+    }
     if ($clonehome eq 'no_host') {
-        $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});     
+        if ($args->{'type'} eq 'Community') {
+            $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
+        } else {
+            $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
+        }     
     } else {
 	my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1});
+        if ($args->{'type'} eq 'Community') {
+            if ($clonedesc{'type'} ne 'Community') {
+                 $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'});
+                return ($can_clone, $clonemsg, $cloneid, $clonehome);
+            }
+        }
 	if (($env{'request.role.domain'} eq $args->{'clonedomain'}) && 
             (&Apache::lonnet::allowed('ccc',$env{'request.role.domain'}))) {
 	    $can_clone = 1;
@@ -9892,15 +9980,23 @@ sub check_clone {
             } elsif (grep(/^\*\:\Q$args->{'ccdomain'}\E$/,@cloners)) {
                 $can_clone = 1;
             } else {
+                my $ccrole = 'cc';
+                if ($args->{'type'} eq 'Community') {
+                    $ccrole = 'co';
+                }
 	        my %roleshash =
 		    &Apache::lonnet::get_my_roles($args->{'ccuname'},
 					 $args->{'ccdomain'},
-                                         'userroles',['active'],['cc'],
+                                         'userroles',['active'],[$ccrole],
 					 [$args->{'clonedomain'}]);
-	        if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':cc'}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
+	        if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) {
 		    $can_clone = 1;
 	        } else {
-                    $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+                    if ($args->{'type'} eq 'Community') {
+                        $clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+                    } else {
+                        $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'});
+                    }
 	        }
 	    }
         }
@@ -10262,6 +10358,16 @@ sub group_term {
     return $names{$crstype};
 }
 
+sub course_types {
+    my @types = ('official','unofficial','community');
+    my %typename = (
+                         official   => 'Official course',
+                         unofficial => 'Unofficial course',
+                         community  => 'Community',
+                   );
+    return (\@types,\%typename);
+}
+
 sub icon {
     my ($file)=@_;
     my $curfext = lc((split(/\./,$file))[-1]);