--- loncom/interface/londocs.pm	2009/07/14 17:33:43	1.381
+++ loncom/interface/londocs.pm	2011/07/04 16:47:03	1.455
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.381 2009/07/14 17:33:43 bisitz Exp $
+# $Id: londocs.pm,v 1.455 2011/07/04 16:47:03 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -35,6 +35,7 @@ use Apache::Constants qw(:common :http);
 use Apache::imsexport;
 use Apache::lonnet;
 use Apache::loncommon;
+use Apache::lonhtmlcommon;
 use LONCAPA::map();
 use Apache::lonratedt();
 use Apache::lonxml;
@@ -116,17 +117,22 @@ sub authorhosts {
 
 sub dumpbutton {
     my ($home,$other,%outhash)=&authorhosts();
-    my $type = &Apache::loncommon::course_type();
+    my $crstype = &Apache::loncommon::course_type();
     if ($home+$other==0) { return ''; }
     if ($home) {
-	return '<input type="submit" name="dumpcourse" value="'.
-	    &mt('Dump '.$type.' DOCS to Construction Space').'" />'.
-	    &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs').'<br />';
-    } else {
-	return '<div>'.
-     &mt('Dump '.$type.
-	 ' DOCS to Construction Space: available on other servers').
-	 '</div>';
+        my $link =
+            "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"dumpcourse\", \""
+           .&mt('Dump '.$crstype.' Documents to Construction Space')
+           ."\")'>"
+           .&mt('Dump '.$crstype.' Documents to Construction Space')
+           .'</a>';
+        return
+            $link.' '
+           .&Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs')
+           .'<br />';
+    } else {
+        return
+            &mt('Dump '.$crstype.' Documents to Construction Space: available on other servers');
     }
 }
 
@@ -140,10 +146,10 @@ sub clean {
 
 sub dumpcourse {
     my ($r) = @_;
-    my $type = &Apache::loncommon::course_type();
-    $r->print(&Apache::loncommon::start_page('Dump '.$type.' DOCS to Construction Space').
+    my $crstype = &Apache::loncommon::course_type();
+    $r->print(&Apache::loncommon::start_page('Dump '.$crstype.' Documents to Construction Space').
 	      '<form name="dumpdoc" action="" method="post">');
-    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$type.' DOCS to Construction Space'));
+    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Dump '.$crstype.' Documents to Construction Space'));
     my ($home,$other,%outhash)=&authorhosts();
     unless ($home) { return ''; }
     my $origcrsid=$env{'request.course.id'};
@@ -254,17 +260,15 @@ sub dumpcourse {
 	$r->print(&Apache::loncommon::end_data_table());
 	&untiehash();
 	$r->print(
-  '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $type DOCS").'" /></p></form>');
+  '<p><input type="submit" name="dumpcourse" value="'.&mt("Dump $crstype Documents").'" /></p></form>');
     }
 }
 
 
 
 sub exportbutton {
-    my $type = &Apache::loncommon::course_type();
-    return '<input type="submit" name="exportcourse"'
-          .' value="'.&mt('IMS Export').'"'
-          .' title="'.&mt('Export '.$type.' to IMS Package').'" />'.
+    my $crstype = &Apache::loncommon::course_type();
+    return "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>".
     &Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />';
 }
 
@@ -272,18 +276,29 @@ sub exportbutton {
 
 sub exportcourse {
     my $r=shift;
-    my $type = &Apache::loncommon::course_type();
+    my $crstype = &Apache::loncommon::course_type();
     my %discussiontime = &Apache::lonnet::dump('discussiontimes',
                                                $env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'});
     my $numdisc = keys(%discussiontime);
+    my $numprobs = 0;
     my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {
-        $r->print(&Apache::loncommon::start_page('Export '.$type.' to IMS Package').
+        $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package').
                   '<h2>'.&mt('IMS Export Failed').'</h2>'.
-                  '<div class="LC_error">'.
-                  &mt('Unable to retrieve information about course contents').
-                  '</div><a href="/adm/coursedocs">'.&mt('Return to Course Editor').'</a>');
-        &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
+                  '<div class="LC_error">');
+        if ($crstype eq 'Community') {
+            $r->print(&mt('Unable to retrieve information about community contents'));
+        } else {
+            $r->print(&mt('Unable to retrieve information about course contents'));
+        }
+        $r->print('</div><a href="/adm/coursedocs">');
+        if ($crstype eq 'Community') {
+            $r->print(&mt('Return to Community Editor'));
+        } else {
+            $r->print(&mt('Return to Course Editor'));
+        }
+        $r->print('</a>');
+        &Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
         return;
     }
     my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef);
@@ -296,6 +311,7 @@ sub exportcourse {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['archive','discussion']);
 
+        my $format = $env{'form.format'};
         my @exportitems = &Apache::loncommon::get_env_multiple('form.archive');
         my @discussions = &Apache::loncommon::get_env_multiple('form.discussion');
         if (@exportitems == 0 && @discussions == 0) {
@@ -317,9 +333,10 @@ sub exportcourse {
             my $imsresources;
             my $tempexport;
             my $copyresult;
-            my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport);
+            my $testbank;
+            my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport,$format,\$testbank);
             if ($manifestok) {
-                &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest);
+                &build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest,$format,$testbank);
                 close($ims_manifest);
 
 #Create zip file in prtspool
@@ -332,20 +349,20 @@ sub exportcourse {
                 open(OUTPUT, "zip -r $imszip *  2> /dev/null |");
                 close(OUTPUT);
                 chdir $cwd;
+                $outcome .= '<p>'
+                           .&mt('[_1]Your IMS package[_2] is ready for download.'
+                               ,'<a href="'.$imszipfile.'">','</a>')
+                           .'</p>';
                 if ($copyresult) {
                     $outcome .= '<p class="LC_error">'
                                .&mt('The following errors occurred during export - [_1]'
                                    ,$copyresult)
                                .'</p>';
                 }
-                $outcome .= '<p>'
-                           .&mt('[_1]Your IMS package[_2] is ready for download.'
-                               ,'<a href="'.$imszipfile.'">','</a>')
-                           .'</p>';
             } else {
                 $outcome = '<p class="LC_error">'
                           .&mt('Unfortunately you will not be able to retrieve'
-                              .' an IMS archive of this posts at this time,'
+                              .' an IMS archive of your course at this time,'
                               .' because there was a problem creating a'
                               .' manifest file.')
                           .'</p>'
@@ -354,29 +371,31 @@ sub exportcourse {
                           .'</a></p>';
             }
         }
-        $r->print(&Apache::loncommon::start_page('Export '.$type.' to IMS Package'));
+        $r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package'));
 	$r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
         $r->print($outcome);
         $r->print(&Apache::loncommon::end_page());
     } else {
-        my $display;
-        $display = '<form name="exportdoc" action="" method="post">'."\n";
-        $display .= '<p>'
-                   .&mt('Choose which items you wish to export from your '.$type.'.')
-                   .'</p>';
-        $display .= '<div class="LC_columnSection"><fieldset>'.
+        my $display='<form name="exportdoc" action="" method="post">'."\n".
+                    '<p>'.
+                    &mt('Choose which items you wish to export from your '.$crstype.'.').
+                    '</p>'.
+                    '<div class="LC_columnSection"><fieldset>'.
                     '<legend>'.&mt('Content items').'</legend>'.
                     '<input type="button" value="'.&mt('check all').'" '.
                     'onclick="javascript:checkAll(document.exportdoc.archive)" />'.
                     '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
-                    ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>'.
-                    '<fieldset>'.
-                    '<legend>'.&mt('Discussion posts').'</legend>'.
-                    '<input type="button" value="'.&mt('check all').'"'.
-                    ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.
-                    '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
-                    ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" />'.
-                    '</fieldset></div>';
+                    ' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>';
+        if ($numdisc > 0) {
+            $display .= '<fieldset>'.
+                        '<legend>'.&mt('Discussion posts').'</legend>'.
+                        '<input type="button" value="'.&mt('check all').'"'.
+                        ' onclick="javascript:checkAll(document.exportdoc.discussion)" />'.
+                        '&nbsp;&nbsp;<input type="button" value="'.&mt('uncheck all').'"'.
+                        ' onclick="javascript:uncheckAll(document.exportdoc.discussion)" />'.
+                        '</fieldset>';
+        }
+        $display .= '</div>';
         my $curRes;
         my $depth = 0;
         my $count = 0;
@@ -387,15 +406,11 @@ sub exportcourse {
         my $lastcontainer = $startcount;
         $display .= &Apache::loncommon::start_data_table()
                    .&Apache::loncommon::start_data_table_header_row()
-                   .'<th>'.&mt('Export content item?').'</th>'
-                   .'<th>';
+                   .'<th>'.&mt('Export content item?').'</th>';
         if ($numdisc > 0) {
-            $display .= &mt('Export discussion posts?');
-        } else {
-             $display .= '&nbsp;';
+            $display .= '<th>'.&mt('Export discussion posts?').'</th>';
         }
-        $display .= '</th>'
-                   .&Apache::loncommon::end_data_table_header_row();
+        $display .= &Apache::loncommon::end_data_table_header_row();
         while ($curRes = $it->next()) {
             if (ref($curRes)) {
                 $count ++;
@@ -416,37 +431,35 @@ sub exportcourse {
                         $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                     }
                 }
+                my $currelem = $count+$boards+$startcount;
                 $display .= &Apache::loncommon::start_data_table_row()
                            .'<td>'."\n"
                            .'<input type="checkbox" name="archive" value="'.$count.'" ';
                 if (($curRes->is_sequence()) || ($curRes->is_page())) {
-                    my $checkitem = $count + $boards + $startcount;
-                    $display .= 'onclick="javascript:propagateCheck('."'$checkitem'".')"';
+                    $lastcontainer = $currelem;
+                    $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';
+                } elsif ($curRes->is_problem()) {
+                    $numprobs ++; 
                 }
                 $display .= ' />'."\n";
                 for (my $i=0; $i<$depth; $i++) {
-                    $display .= '<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />'
-                               .'<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />'."\n";
+                    $display .= ('<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />' x2)."\n";
                 }
                 if ($curRes->is_sequence()) {
                     $display .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" />&nbsp;'."\n";
-                    $lastcontainer = $count + $startcount + $boards;
                 } elsif ($curRes->is_page()) {
                     $display .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" />&nbsp;'."\n";
-                    $lastcontainer = $count + $startcount + $boards;
                 }
-                my $currelem = $count+$boards+$startcount;
                 $children{$parent{$depth}} .= $currelem.':';
                 $display .= '&nbsp;'.$curRes->title().'</td>'."\n";
 
                 # Existing discussion posts?
                 if ($discussiontime{$ressymb} > 0) {
                     $boards ++;
-                    $currelem = $count+$boards+$startcount;
                     $display .= '<td align="right">'
                                .'<input type="checkbox" name="discussion" value="'.$count.'" />'
                                .'</td>'."\n";
-                } else {
+                } elsif ($numdisc > 0) {
                     $display .= '<td>&nbsp;</td>'."\n";
                 }
                 $display .= &Apache::loncommon::end_data_table_row();
@@ -508,9 +521,19 @@ function containerCheck(item) {
 // ]]>
 </script>
         |;
-	$r->print(&Apache::loncommon::start_page('Export '.$type.' to IMS Package',
+	$r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package',
 						 $scripttag));
 	$r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export'));
+        if ($numprobs > 0) {
+            $display .= '<p><span class="LC_nobreak">'.
+                        &mt('Export format for LON-CAPA problems:').
+                        '<label><input type="radio" name="format" value="xml" checked="checked" />'.
+                        '&nbsp;'.&mt('XML').'</label>'.('&nbsp;' x3).
+                        '<label><input type="radio" name="format" value="html" />'.
+                        '&nbsp;'.&mt('HTML').'</label>'.('&nbsp;' x3).
+                        '<label><input type="radio" name="format" value="plaintext" />'.
+                        '&nbsp;'.&mt('Text').'</label></span></p>';
+        }
 	$r->print($display.
                   '<p><input type="hidden" name="finishexport" value="1" />'.
                   '<input type="submit" name="exportcourse" value="'.
@@ -519,7 +542,7 @@ function containerCheck(item) {
 }
 
 sub create_ims_store {
-    my ($now,$manifestok,$outcome,$tempexport) = @_;
+    my ($now,$manifestok,$outcome,$tempexport,$format,$testbank) = @_;
     $$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports';
     my $ims_manifest;
     if (!-e $$tempexport) {
@@ -563,7 +586,11 @@ sub create_ims_store {
 '  <organizations default="ORG-'.$env{'request.course.id'}.'-'.$now.'">'."\n".
 '    <organization identifier="ORG-'.$env{'request.course.id'}.'-'.$now.'"'.
 ' structure="hierarchical">'."\n".
-'      <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>'
+'      <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>';
+        if ($format eq 'plaintext') {
+            my $testbankfilename = $$tempexport.'/testbank.txt';
+            $$testbank = Apache::File->new('>'.$testbankfilename);
+        }
     } else {
         $$outcome .= 'An error occurred opening the IMS manifest file.<br />'
 ;
@@ -572,7 +599,8 @@ sub create_ims_store {
 }
 
 sub build_package {
-    my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,$ims_manifest) = @_;
+    my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult,
+        $ims_manifest,$format,$testbank) = @_;
 # first iterator to look for dependencies
     my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef);
     my $curRes;
@@ -611,6 +639,7 @@ sub build_package {
     $count = 0;
     my $imsresources;
     my $pkgdepth;
+    my $currdirpath = 'Top';
     while ($curRes = $it->next()) {
         if ($curRes == $it->BEGIN_MAP()) {
             $prevdepth = $depth;
@@ -648,10 +677,27 @@ sub build_package {
               '<title>'.$curRes->title().'</title>';
                 print $ims_manifest "\n".$itementry;
 
-                unless ($curRes->is_sequence()) {
+                if ($curRes->is_sequence()) {
+                    $currdirpath = 'Top';
+                    my $pcslist = $curRes->map_hierarchy();
+                    if ($pcslist ne '') {
+                        foreach my $pc (split(/,/,$pcslist)) {
+                            my $res = $navmap->getByMapPc($pc);
+                            if (ref($res)) {
+                                my $encloser = $res->title();
+                                if ($encloser) {
+                                    if ($currdirpath) {
+                                        $currdirpath .= ' -> ';
+                                    }
+                                    $currdirpath .= $encloser;
+                                }
+                            }
+                        }
+                    }
+                } else {
                     my $content_file;
                     my @hrefs = ();
-                    &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport);
+                    &process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport,$format,$currdirpath,$testbank);
                     if ($content_file) {
                         $imsresources .= "\n".
                      '   <resource identifier="RES-'.$env{'request.course.id'}.'-'.$count.
@@ -712,7 +758,7 @@ sub get_dependencies {
 }
 
 sub process_content {
-    my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport) = @_;
+    my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport,$format,$currdirpath,$testbank) = @_;
     my $content_type;
     my $message;
     my @uploads = ();
@@ -769,10 +815,15 @@ sub process_content {
             $canedit= 1;
         }
 # only include problem code where current user is author
-        if ($canedit) {
-            $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
-        } else {
-            $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');
+        if (($format eq 'html') || ($format eq 'plaintext')) {
+            my $title = $curRes->title;
+            $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,$format,$currdirpath,$title,$testbank);
+        } elsif ($format eq 'xml') {
+            if ($canedit) {
+                $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource');
+            } else {
+                $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit');
+            }
         }
     } elsif ($symb =~ m-uploaded/$cdom/$cnum-) {
         $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded');
@@ -792,7 +843,8 @@ sub process_content {
 }
 
 sub replicate_content {
-    my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller) = @_;
+    my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller,$currdirpath,
+        $title,$testbank) = @_;
     my ($map,$ind,$url);
     if ($caller eq 'templateupload') {
         $url = $symb;
@@ -836,10 +888,70 @@ sub replicate_content {
                 } else {
                     $$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n";
                 }
-            } elsif ($caller eq 'noedit') {
+            } elsif (($caller eq 'noedit') || ($caller eq 'html') || 
+                     ($caller eq 'plaintext')) {
 # Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this.
+                my %form = (
+                             grade_symb     => $symb,
+                             grade_courseid => $cdom.'_'.$cnum,
+                             grade_domain   => $env{'user.domain'},
+                             grade_username => $env{'user.name'},
+                             grade_imsexport => 1, 
+                           );
+                my $feedurl=&Apache::lonnet::clutter($url);
+                my ($userview,$response)=&Apache::lonnet::ssi_body($feedurl,%form);
+                if (ref($response)) {
+                    if ($response->is_success) {
+                        $content = $userview;
+                        $content =~ s/\Qonchange="javascript:setSubmittedPart('\E[^\']+\Q');"\E//g;
+                        $content =~ s/^\s*[\n\r]+$//;
+                        if ($caller eq 'plaintext') {
+                            my @lines = split(/[\n\r]+/,$content);
+                            my @tosave;
+                            my $foilcounter = 0;
+                            my @alphabet = ('a'..'z');
+                            my $mc_answer;
+                            foreach my $line (@lines) {
+                                next if ($line =~ /^\s*$/);
+                                if ($line =~ m{(|\Q<\label>\E)\Q<br />Incorrect:<label>\E}) {
+                                    $foilcounter ++;
+                                } elsif ($line =~ m{(|\Q</label>\E)\Q<br />Correct:<b><label>\E}) {
+                                    $foilcounter ++;
+                                    $mc_answer = $alphabet[$foilcounter];
+                                } elsif ($line !~ m{\Q</label>\E(|\Q</b>\E)\Q<br />\E}) {
+                                    $line =~ s/^(\s+|\s+)$//g;
+                                    $line =~ s{^\Q<b>\E([^<]+)\Q</b>\E$}{1};
+                                    push(@tosave,$line);
+                                }
+                                $content = join("\t",@tosave);
+                                if ($mc_answer) {
+                                    $content .= "\t".$mc_answer."\n";
+                                }
+                            }
+                            if (@tosave) {
+                                my $qtype;
+                                if ($mc_answer) {
+                                    $qtype = 'MC';
+                                }
+                                $content = $currdirpath."\t".$title."\t$qtype\t".join("\t",@tosave);
+                                if ($mc_answer) {
+                                    $content .= "\t".$mc_answer;
+                                } 
+                                $content .= "\n";
+                            }
+                        } else {
+                            $content = '<html><body>'.$content.'</body></html>';
+                        }
+                        if (($caller eq 'plaintext') && ($testbank)) {
+                            print $testbank $content;
+                        }
+                    } else {
+                        $content = 'Not the owner of this resource';
+                    }
+                } else {
+                    $content = 'Not the owner of this resource';
+                }
                 $repstatus = 'ok';
-                $content = 'Not the owner of this resource';
             }
             if ($repstatus eq 'ok') {
                 print $copiedfile $content;
@@ -897,7 +1009,6 @@ sub extract_media {
                 $repstatus = 'ok';
             }
         } elsif ($caller eq 'uploaded') {
-
             $repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode);
         }
         if ($repstatus eq 'ok') {
@@ -999,7 +1110,7 @@ sub group_import {
 }
 
 sub breadcrumbs {
-    my ($where,$allowed,$type)=@_;
+    my ($allowed,$crstype)=@_;
     &Apache::lonhtmlcommon::clear_breadcrumbs();
     my (@folders);
     if ($env{'form.pagepath'}) {
@@ -1014,6 +1125,15 @@ sub breadcrumbs {
     my $isencrypted=0;
     my $ishidden=0;
     my $is_random_order=0;
+    if (!$allowed) {
+        my $description = $env{'course.'.$env{'request.course.id'}.'.description'};
+        &Apache::lonhtmlcommon::add_breadcrumb(
+                                               {'href' => '/adm/menu',
+                                                'title'=> 'Go to main menu',
+                                                'text' => $description,
+                                               });
+        $plain .= $description.' &gt;';
+    }
     while (@folders) {
 	my $folder=shift(@folders);
     	my $foldername=shift(@folders);
@@ -1033,11 +1153,7 @@ sub breadcrumbs {
             if ($3) { $isencrypted=1; }
 	    if ($4 ne '') { $is_random_order = 1; }
             if ($folder eq 'supplemental') {
-                if ($allowed) {
-                    $name = &mt('Supplemental '.$type.' Documents');
-                } else {
-                    $name = &mt($type.' Documents');
-                }
+                $name = &mt('Supplemental '.$crstype.' Documents');
             }
 	    &Apache::lonhtmlcommon::add_breadcrumb(
 		      {'href'=>$url.$cpinfo,
@@ -1137,6 +1253,7 @@ sub docs_change_log {
     &Apache::loncommon::restore_course_settings('docs_log',
                                                 \%saveable_parameters);
     if (!$env{'form.show'}) { $env{'form.show'}=10; }
+# FIXME: internationalization seems wrong here
     my %lt=('hiddenresource' => 'Resources hidden',
 	    'encrypturl'     => 'URL hidden',
 	    'randompick'     => 'Randomly pick',
@@ -1225,6 +1342,7 @@ sub docs_change_log {
 	    $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');
 	    foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {
 		if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
+# FIXME: internationalization seems wrong here
 		    $r->print('<li>'.
 			      &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
 				  $docslog{$id}{'logentry'}{'parameter_value_'.$parameter})
@@ -1493,8 +1611,7 @@ sub handle_edit_cmd {
 }
 
 sub editor {
-    my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$type)=@_;
-
+    my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype)=@_;
     my $container= ($env{'form.pagepath'}) ? 'page'
 		                           : 'sequence';
 
@@ -1509,9 +1626,13 @@ sub editor {
         $LONCAPA::map::resources[$idx]='';
     }
 
-    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order)=
-	&breadcrumbs($folder,$allowed,$type);
-    $r->print($breadcrumbtrail);
+    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
+	    &breadcrumbs($allowed,$crstype);
+        $r->print($breadcrumbtrail);
+
+    unless ($allowed) {
+        $randompick = -1;
+    }
 
 # ------------------------------------------------------------ Process commands
 
@@ -1590,13 +1711,12 @@ sub editor {
     my $shown=0;
     if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {
 	$r->print('<div class="LC_Box">'.
-          '<p>'.&mt('Parameters:').
-          '<ul>'.
+          '<ol class="LC_docs_parameters"><li class="LC_docs_parameters_title">'.&mt('Parameters:').'</li>'.
 		  ($randompick>=0?'<li>'.&mt('randomly pick [quant,_1,resource]',$randompick).'</li>':'').
 		  ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
 		  ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
 		  ($is_random_order?'<li>'.&mt('random order').'</li>':'').
-		  '</ul></p>');
+		  '</ol>');
         if ($randompick>=0) {
             $r->print('<p class="LC_warning">'
                  .&mt('Caution: this folder is set to randomly pick a subset'
@@ -1620,7 +1740,9 @@ sub editor {
         $r->print('</div>');
     }
 
-    my $output;
+    my $output;  
+
+    &Apache::loncommon::start_data_table_count(); #setup a row counter 
     foreach my $res (@LONCAPA::map::order) {
         my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
         $name=&LONCAPA::map::qtescape($name);
@@ -1628,21 +1750,29 @@ sub editor {
         unless ($name) {  $name=(split(/\//,$url))[-1]; }
         unless ($name) { $idx++; next; }
         $output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
-                              $coursenum);
+                              $coursenum,$crstype);
         $idx++;
         $shown++;
     }
+    &Apache::loncommon::end_data_table_count();
+    
     if ($shown) {
-    $r->print(&Apache::loncommon::start_data_table()
-             .&Apache::loncommon::start_data_table_header_row()
-             .'<th colspan="2">'.&mt('Move').'</th>'
-             .'<th>'.&mt('Actions').'</th>'
-             .'<th colspan="2">'.&mt('Document').'</th>'
-             .'<th colspan="4">'.&mt('Settings').'</th>'
-             .&Apache::loncommon::end_data_table_header_row()
-             .$output
-             .&Apache::loncommon::end_data_table()
-    )
+        $r->print(&Apache::loncommon::start_scrollbox('900px','880px','400px')
+                 .&Apache::loncommon::start_data_table());
+        if ($allowed) {
+            $r->print(&Apache::loncommon::start_data_table_header_row()
+                     .'<th colspan="2">'.&mt('Move').'</th>'
+                     .'<th>'.&mt('Actions').'</th>'
+                     .'<th colspan="2">'.&mt('Document').'</th>');
+            if ($folder !~ /^supplemental/) {
+                $r->print('<th colspan="4">'.&mt('Settings').'</th>');
+            }
+            $r->print(&Apache::loncommon::end_data_table_header_row());
+        }
+        $r->print($output
+                 .&Apache::loncommon::end_data_table()
+                 .&Apache::loncommon::end_scrollbox()
+        );
     } else {
         $r->print('<p class="LC_info">'
                  .&mt('Currently no documents.')
@@ -1658,11 +1788,10 @@ sub editor {
 sub process_file_upload {
     my ($upload_output,$coursenum,$coursedom,$allfiles,$codebase,$uploadcmd) = @_;
 # upload a file, if present
-    my $parseaction;
-   if ($env{'form.parserflag'}) {
+    my ($parseaction,$showupload,$nextphase,$mimetype);
+    if ($env{'form.parserflag'}) {
         $parseaction = 'parse';
     }
-    my $phase_status;
     my $folder=$env{'form.folder'};
     if ($folder eq '') {
         $folder='default';
@@ -1681,7 +1810,8 @@ sub process_file_upload {
             $LONCAPA::map::resources[1]='';
         }
         if ($fatal) {
-            return 'failed';
+            $$upload_output = '<p><span class="LC_error">'.&mt('The uploaded file has not been stored as an error occurred reading the contents of the current folder.').'</span></p>';
+            return;
         }
         my $destination = 'docs/';
         if ($folder =~ /^supplemental/) {
@@ -1692,13 +1822,23 @@ sub process_file_upload {
         } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
             $destination .=  $2.'/';
         }
-# this is for a course, not a user, so set coursedoc flag
-# probably the only place in the system where this should be "1"
+# this is for a course, not a user, so set context to coursedoc.
         my $newidx=&LONCAPA::map::getresidx();
         $destination .= $newidx;
-        my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,
+        my $url=&Apache::lonnet::userfileupload('uploaddoc','coursedoc',$destination,
 						$parseaction,$allfiles,
-						$codebase);
+						$codebase,undef,undef,undef,undef,
+                                                undef,undef,\$mimetype);
+        if ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E.*/([^/]+)$}) {
+            my $stored = $1;
+            $showupload = '<p>'.&mt('Uploaded [_1]','<span class="LC_filename">'.
+                          $stored.'</span>').'</p>';
+        } else {
+            my ($filename) = ($env{'form.uploaddoc.filename'} =~ m{([^/]+)$});
+            
+            $$upload_output = '<p><span class="LC_error">'.&mt('Unable to save file [_1].','<span class="LC_filename">'.$filename.'</span>').'</span></p>';
+            return;
+        }
         my $ext='false';
         if ($url=~m{^http://}) { $ext='true'; }
 	$url     = &LONCAPA::map::qtunescape($url);
@@ -1715,51 +1855,37 @@ sub process_file_upload {
         ($errtext,$fatal)=&storemap($coursenum,$coursedom,
 				    $folder.'.'.$container);
         if ($fatal) {
-            $$upload_output .= '<p><span class="LC_error">'.$errtext.'</span></p>';
-            return 'failed';
+            $$upload_output = '<p><span class="LC_error">'.$errtext.'</span></p>';
+            return;
         } else {
-            if ($parseaction eq 'parse') {
-                my $total_embedded = keys(%{$allfiles});
+            if ($parseaction eq 'parse' && $mimetype eq 'text/html') {
+                $$upload_output = $showupload;
+                my $total_embedded = scalar(keys(%{$allfiles}));
                 if ($total_embedded > 0) {
-                    my $num = 0;
-		    my $state = '
-   <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />
-   <input type="hidden" name="cmd" value="upload_embedded" />
-   <input type="hidden" name="newidx" value="'.$newidx.'" />
-   <input type="hidden" name="primaryurl" value="'.&escape($url).'" />
-   <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';
-		    $phase_status = 'phasetwo';
-
-                    $$upload_output .=
-			'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'.
-			&Apache::loncommon::ask_for_embedded_content(
-                            '/adm/coursedocs',$state,$allfiles,$codebase);
+                    my $uploadphase = 'upload_embedded';
+                    my $primaryurl = &HTML::Entities::encode($url,'<>&"');
+		    my $state = &embedded_form_elems($uploadphase,$primaryurl,$newidx); 
+                    my ($embedded,$num) = 
+                        &Apache::loncommon::ask_for_embedded_content(
+                            '/adm/coursedocs',$state,$allfiles,$codebase,{'docs_url' => $url});
+                    if ($embedded) {
+                        if ($num) {
+                            $$upload_output .=
+			         '<p>'.&mt('This file contains embedded multimedia objects, which need to be uploaded.').'</p>'.$embedded;
+                            $nextphase = $uploadphase;
+                        } else {
+                            $$upload_output .= $embedded;
+                        }
+                    } else {
+                        $$upload_output .= &mt('Embedded item(s) already present, so no additional upload(s) required').'<br />';
+                    }
                 } else {
-                    $$upload_output .= 'No embedded items identified<br />';
+                    $$upload_output .= &mt('No embedded items identified').'<br />';
                 }
             }
         }
     }
-    return $phase_status;
-}
-
-sub process_secondary_uploads {
-    my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_;
-    my $folder=$env{'form.folder'};
-    my $destination = 'docs/';
-    if ($folder =~ /^supplemental/) {
-        $destination = 'supplemental/';
-    }
-    if (($folder eq 'default') || ($folder eq 'supplemental')) {
-        $destination .= 'default/';
-    } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
-        $destination .=  $2.'/';
-    }
-    $destination .= $newidx;
-    my ($url,$filename);
-    $url=&Apache::lonnet::userfileupload($formname.$num,1,$destination);
-    ($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$});
-    return $filename;
+    return $nextphase;
 }
 
 sub is_supplemental_title {
@@ -1780,6 +1906,7 @@ sub parse_supplemental_title {
 	$foldertitle=&Apache::lontexconvert::msgtexconverted($4);
 	my $name =  &Apache::loncommon::plainname($uname,$udom);
 	$name = &HTML::Entities::encode($name,'"<>&\'');
+        $renametitle = &HTML::Entities::encode($renametitle,'"<>&\'');
 	$title='<i>'.&Apache::lonlocal::locallocaltime($time).'</i> '.
 	    $name.': <br />'.$foldertitle;
     }
@@ -1792,8 +1919,7 @@ sub parse_supplemental_title {
 # --------------------------------------------------------------- An entry line
 
 sub entryline {
-    my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;
-
+    my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$crstype)=@_;
     my ($foldertitle,$pagetitle,$renametitle);
     if (&is_supplemental_title($title)) {
 	($title,$foldertitle,$renametitle) = &parse_supplemental_title($title);
@@ -1824,7 +1950,7 @@ sub entryline {
     }
     if ($env{'form.pagepath'}) {
         $type = $container = 'page';
-        $esc_path=&escape($path = $env{'form.pagepath'});
+        $esc_path=&escape($env{'form.pagepath'});
 	$path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"');
         $symb=&escape($env{'form.pagesymb'});
     }
@@ -2050,18 +2176,24 @@ END
 	$url.='pagepath='.&escape($pagepath).
 	    '&amp;pagesymb='.&escape($symb).$cpinfo;
     }
-    if ($external) {
+    if (($external) && ($allowed)) {
 	my $form = ($folder =~ /^default/)? 'newext' : 'supnewext';
 	$external = '&nbsp;<a class="LC_docs_ext_edit" href="javascript:edittext(\''.$form.'\',\''.$residx.'\',\''.&escape($title).'\',\''.&escape($orig_url).'\');" >'.&mt('Edit').'</a>';
     } else {
 	undef($external);
     }
+    my $reinit;
+    if ($crstype eq 'Community') {
+        $reinit = &mt('(re-initialize community to access)');
+    } else {
+        $reinit = &mt('(re-initialize course to access)');
+    }  
     $line.='
   <td>
     '.($url?'<a href="'.$url.'">':'').'<img src="'.$icon.'" alt="" class="LC_icon" />'.($url?'</a>':'').'
   </td>
   <td>
-    '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.&mt('(re-initialize course to access)').'</span>').$external."
+    '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.$reinit.'</span>').$external."
   </td>";
     if (($allowed) && ($folder!~/^supplemental/)) {
  	my %lt=&Apache::lonlocal::texthash(
@@ -2209,34 +2341,33 @@ List Symbs
 sub list_symbs {
     my ($r) = @_;
 
-    my $type = &Apache::loncommon::course_type();
+    my $crstype = &Apache::loncommon::course_type();
     $r->print(&Apache::loncommon::start_page('Symb List'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Symb List'));
+    &startContentScreen($r,'tools');
     my $navmap = Apache::lonnavmaps::navmap->new();
     if (!defined($navmap)) {
         $r->print('<h2>'.&mt('Retrieval of List Failed').'</h2>'.
                   '<div class="LC_error">'.
                   &mt('Unable to retrieve information about course contents').
                   '</div>');
-        &Apache::lonnet::logthis('Symb list failed - could not create navmap object in '.lc($type).':'.$env{'request.course.id'});
+        &Apache::lonnet::logthis('Symb list failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'});
     } else {
         $r->print("<pre>\n");
         foreach my $res ($navmap->retrieveResources()) {
-	    $r->print($res->compTitle()."\t".$res->symb()."\n");
+            $r->print($res->compTitle()."\t".$res->symb()."\n");
         }
         $r->print("\n</pre>\n");
     }
-    $r->print('<a href="/adm/coursedocs">'.&mt('Return to DOCS').'</a>');
 }
 
 
 sub verifycontent {
     my ($r) = @_;
-    my $type = &Apache::loncommon::course_type();
-   my $loaderror=&Apache::lonnet::overloaderror($r);
-   if ($loaderror) { return $loaderror; }
-   $r->print(&Apache::loncommon::start_page('Verify '.$type.' Documents'));
-   $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$type.' Documents'));
+    my $crstype = &Apache::loncommon::course_type();
+   $r->print(&Apache::loncommon::start_page('Verify '.$crstype.' Documents'));
+   $r->print(&Apache::lonhtmlcommon::breadcrumbs('Verify '.$crstype.' Documents'));
+   &startContentScreen($r,'tools');
    $hashtied=0;
    undef %alreadyseen;
    %alreadyseen=();
@@ -2245,9 +2376,9 @@ sub verifycontent {
        if ($hash{$key}=~/\.(page|sequence)$/) {
 	   if (($key=~/^src_/) && ($alreadyseen{&unescape($hash{$key})})) {
 	       $r->print('<hr /><span class="LC_error">'.
-			 &mt('The following sequence or page is included more than once in your '.$type.': ').
+			 &mt('The following sequence or page is included more than once in your '.$crstype.':').' '.
 			 &unescape($hash{$key}).'</span><br />'.
-			 &mt('Note that grading records for problems included in this sequence or folder will overlap.<hr />'));
+			 &mt('Note that grading records for problems included in this sequence or folder will overlap.').'<hr />');
 	   }
        }
        if (($key=~/^src\_(.+)$/) && (!$alreadyseen{&unescape($hash{$key})})) {
@@ -2255,8 +2386,7 @@ sub verifycontent {
        }
    }
    &untiehash();
-   $r->print('<h1>'.&mt('Done').'.</h1>'.'<a href="/adm/coursedocs">'.
-	     &mt('Return to DOCS').'</a>');
+   $r->print('<p class="LC_success">'.&mt('Done').'</p>');
 }
 
 
@@ -2268,9 +2398,11 @@ sub devalidateversioncache {
 
 sub checkversions {
     my ($r) = @_;
-    my $type = &Apache::loncommon::course_type();
-    $r->print(&Apache::loncommon::start_page("Check $type Document Versions"));
-    $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $type Document Versions"));
+    my $crstype = &Apache::loncommon::course_type();
+    $r->print(&Apache::loncommon::start_page("Check $crstype Document Versions"));
+    $r->print(&Apache::lonhtmlcommon::breadcrumbs("Check $crstype Document Versions"));
+    &startContentScreen($r,'tools');
+
     my $header='';
     my $startsel='';
     my $monthsel='';
@@ -2331,7 +2463,7 @@ sub checkversions {
     &changewarning($r,'');
     if ($env{'form.timerange'} eq 'all') {
 # show all documents
-	$header=&mt('All Documents in '.$type);
+	$header=&mt('All Documents in '.$crstype);
 	$allsel=1;
 	foreach my $key (keys(%hash)) {
 	    if ($key=~/^ids\_(\/res\/.+)$/) {
@@ -2376,7 +2508,7 @@ sub checkversions {
 			  $env{'course.'.$env{'request.course.id'}.'.domain'},
 			  $env{'course.'.$env{'request.course.id'}.'.num'});
     my %lt=&Apache::lonlocal::texthash
-	      ('st' => 'Version changes since start of '.$type,
+	      ('st' => 'Version changes since start of '.$crstype,
 	       'lm' => 'Version changes since last Month',
 	       'lw' => 'Version changes since last Week',
 	       'sy' => 'Version changes since Yesterday',
@@ -2385,9 +2517,9 @@ sub checkversions {
 	       'fi' => 'File',
 	       'md' => 'Modification Date',
                'mr' => 'Most recently published Version',
-	       've' => 'Version used in '.$type,
-               'vu' => 'Set Version to be used in '.$type,
-'sv' => 'Set Versions to be used in '.$type.' according to Selections below',
+	       've' => 'Version used in '.$crstype,
+               'vu' => 'Set Version to be used in '.$crstype,
+'sv' => 'Set Versions to be used in '.$crstype.' according to Selections below',
 'sm' => 'Keep all Resources up-to-date with most recent Versions (default)',
 'sc' => 'Set all Resource Versions to current Version (Fix Versions)',
 	       'di' => 'Differences');
@@ -2434,7 +2566,7 @@ ENDHEADERS
                       '<td title="'.$lt{'mr'}.'"><span class="LC_nobreak">Most Recent: '.
                       '<font size="+1">'.$currentversion.'</font>'.
                       '</span></td>'.
-                      '<td title="'.$lt{'ve'}.'"><span class="LC_nobreak">In '.$type.': '.
+                      '<td title="'.$lt{'ve'}.'"><span class="LC_nobreak">In '.$crstype.': '.
                       '<font size="+1">');
 # Used in course
 	    my $usedversion=$hash{'version_'.$linkurl};
@@ -2448,11 +2580,11 @@ ENDHEADERS
 # Set version
 	    $r->print(&Apache::loncommon::select_form($setversions{$linkurl},
 						      'set_version_'.$linkurl,
-						      ('select_form_order' =>
+						      {'select_form_order' =>
 						       ['',1..$currentversion,'mostrecent'],
 						       '' => '',
-						       'mostrecent' => 'most recent',
-						       map {$_,$_} (1..$currentversion))));
+						       'mostrecent' => &mt('most recent'),
+						       map {$_,$_} (1..$currentversion)}));
 	    $r->print('</span></td></tr><tr><td></td>');
 	    my $lastold=1;
 	    for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
@@ -2506,7 +2638,7 @@ ENDHEADERS
 	}
     }
     $r->print('</table></form>');
-    $r->print('<h1>'.&mt('Done').'.</h1>');
+    $r->print('<p class="LC_success">'.&mt('Done').'</p>');
 
     &untiehash();
 }
@@ -2571,7 +2703,7 @@ sub init_breadcrumbs {
     my ($form,$text)=@_;
     &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs",
-					    text=>"Edit ".&Apache::loncommon::course_type(),
+					    text=>&Apache::loncommon::course_type().' Editor',
 					    faq=>273,
 					    bug=>'Instructor Interface',
                                             help => 'Docs_Adding_Course_Doc'});
@@ -2581,17 +2713,76 @@ sub init_breadcrumbs {
 					    bug=>'Instructor Interface'});
 }
 
+# subroutine to list form elements
+sub create_list_elements {
+   my @formarr = @_;
+   my $list = '';
+   for my $button (@formarr){
+        for my $picture(keys %$button) {
+            $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});
+        }
+   }
+   return $list;
+}
+
+# subroutine to create ul from list elements
+sub create_form_ul {
+   my $list = shift;
+   my $ul = &Apache::lonhtmlcommon::htmltag('ul',$list, {class => 'LC_ListStyleNormal'});
+   return $ul;
+}
+
+#
+# Start tabs
+#
+
+sub startContentScreen {
+    my ($r,$mode)=@_;
+    $r->print('<ul class="LC_TabContentBigger" id="mainnav">');
+    $r->print('<li'.(($mode eq 'navmaps')?' class="active"':'').'><a href="/adm/navmaps"><b>&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Overview').'&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
 
+    my $active = '';
+# does this user have privileges to modify docs?
+    my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
 
+    my $onclick;
+    my $href;
+
+    if ($allowed) {
+        $r->print('<li '.(($mode eq 'docs')?' class="active"':'').
+               '><a href="/adm/coursedocs?forcestandard=1"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Editor').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
+    }
+    $r->print('<li'.(($mode eq 'coursesearch')?' class="active"':'').'><a href="/adm/searchcourse"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Search').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
+    $r->print('<li'.(($mode eq 'courseindex')?' class="active"':'').'><a href="/adm/indexcourse"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.&mt('Content Index').'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b></a></li>');
+    $r->print('<li '.(($mode eq 'supdocs')?' class="active"':'').
+           '><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>');
+    $r->print('</ul>');
+    $r->print('<div class="LC_Box" style="clear:both;margin:0;">'
+             .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');
+    $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">');
+}
+
+#
+# End tabs
+#
+
+sub endContentScreen {
+   my ($r)=@_;
+   $r->print('</div></div></div>');
+}
+
+sub supplemental_base {
+    return 'supplemental&'.&escape(&mt('Supplemental '.&Apache::loncommon::course_type().' Documents'));
+}
 
 sub handler {
     my $r = shift;
     &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;
     return OK if $r->header_only;
-    my $type = &Apache::loncommon::course_type();
-
+    my $crstype = &Apache::loncommon::course_type();
 
+#
 # --------------------------------------------- Initialize help topics for this
     foreach my $topic ('Adding_Course_Doc','Main_Course_Documents',
 	               'Adding_External_Resource','Navigate_Content',
@@ -2630,46 +2821,89 @@ sub handler {
       &init_breadcrumbs('versions','Check/Set Resource Versions');
       &checkversions($r);
   } elsif ($allowed && $env{'form.dumpcourse'}) {
-      &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' DOCS to Construction Space');
+      &init_breadcrumbs('dumpcourse','Dump '.&Apache::loncommon::course_type().' Documents to Construction Space');
       &dumpcourse($r);
   } elsif ($allowed && $env{'form.exportcourse'}) {
       &init_breadcrumbs('exportcourse','IMS Export');
       &exportcourse($r);
   } else {
-# is this a standard course?
+#
+# Done catching special calls
+# The whole rest is for course and supplemental documents
+# Get the parameters that may be needed
+#
+    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+                                            ['folderpath','pagepath',
+                                             'pagesymb','forcesupplement','forcestandard']);
+
+# standard=1: this is a "new-style" course with an uploaded map as top level
+# standard=2: this is a "old-style" course, and there is nothing we can do
 
     my $standard=($env{'request.course.uri'}=~/^\/uploaded\//);
-    my $forcestandard = 0;
-    my $forcesupplement;
+
+# Decide whether this should display supplemental or main content
+# supplementalflag=1: show supplemental documents
+# supplementalflag=0: show standard documents
+
+
+    my $supplementalflag=($env{'form.folderpath'}=~/^supplemental/);
+    if (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'} eq "" || ($env{'form.pagepath'})) {
+       $supplementalflag=0;
+    }
+    if ($env{'form.forcesupplement'}) { $supplementalflag=1; }
+    if ($env{'form.forcestandard'})   { $supplementalflag=0; }
+    unless ($allowed) { $supplementalflag=1; }
+    unless ($standard) { $supplementalflag=1; }
+
     my $script='';
     my $showdoc=0;
     my $containertag;
     my $uploadtag;
 
-
-    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
-					    ['folderpath','pagepath',
-					     'pagesymb']);
+# Where do we store these for when we come back?
+    my $stored_folderpath='docs_folderpath';
+    if ($supplementalflag) {
+       $stored_folderpath='docs_sup_folderpath';
+    }
+       
 # No folderpath, no pagepath, see if we have something stored
     if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) {
-        &Apache::loncommon::restore_course_settings('docs_folderpath',
+        &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'folderpath' => 'scalar'});
     }
-    if (!$env{'form.folderpath'}) {
-        &Apache::loncommon::restore_course_settings('docs_folderpath',
-                                              {'pagepath' => 'scalar'});
+   
+# If we are not allowed to make changes, all we can see are supplemental docs
+    if (!$allowed) {
+        $env{'form.pagepath'}='';
+        unless ($env{'form.folderpath'} =~ /^supplemental/) {
+            $env{'form.folderpath'} = &supplemental_base();
+        }
     }
-    if ($env{'form.pagepath'}) {
-       $env{'form.folderpath'}='';
+# If we still not have a folderpath, see if we can resurrect at pagepath
+    if (!$env{'form.folderpath'} && $allowed) {
+        &Apache::loncommon::restore_course_settings($stored_folderpath,
+                                              {'pagepath' => 'scalar'});
     }
+# Make the zeroth entry in supplemental docs page paths, so we can get to top level
     if ($env{'form.folderpath'} =~ /^supplemental_\d+/) {
-        $env{'form.folderpath'} = 'supplemental&'.
-                                  &escape(&mt('Supplemental '.$type.' Documents')).'&'.
+        $env{'form.folderpath'} = &supplemental_base()
+                                  .'&'.
                                   $env{'form.folderpath'};
     }
-    &Apache::loncommon::store_course_settings('docs_folderpath',
+# If after all of this, we still don't have any paths, make them
+    unless (($env{'form.pagepath'}) || ($env{'form.folderpath'})) {
+       if ($supplementalflag) {
+          $env{'form.folderpath'}=&supplemental_base();
+       } else {
+          $env{'form.folderpath'}='default';
+       }
+    } 
+
+# Store this
+    &Apache::loncommon::store_course_settings($stored_folderpath,
                                                 {'pagepath' => 'scalar',
                                                  'folderpath' => 'scalar'});
+
     if ($env{'form.folderpath'}) {
 	my (@folderpath)=split('&',$env{'form.folderpath'});
 	$env{'form.foldername'}=&unescape(pop(@folderpath));
@@ -2680,26 +2914,33 @@ sub handler {
         $env{'form.pagename'}=&unescape(pop(@pagepath));
         $env{'form.folder'}=pop(@pagepath);
         $containertag = '<input type="hidden" name="pagepath" value="" />'.
-	    '<input type="hidden" name="pagesymb" value="" />';
-        $uploadtag = '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'.
-	    '<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />';
+	                '<input type="hidden" name="pagesymb" value="" />';
+        $uploadtag = 
+            '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />'.
+	    '<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />'.
+            '<input type="hidden" name="folderpath" value="" />';
+    } else {
+        my $folderpath=$env{'form.folderpath'};
+        if (!$folderpath) {
+            if ($env{'form.folder'} eq '' ||
+                $env{'form.folder'} eq 'supplemental') {
+                $folderpath='default&'.
+                    &escape(&mt('Main '.$crstype.' Documents'));
+            }
+        }
+        $containertag = '<input type="hidden" name="folderpath" value="" />';
+        $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';
     }
     if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) {
        $showdoc='/'.$1;
     }
-    unless ($showdoc) { # got called from remote
-       if (($env{'form.folder'}=~/^(?:group|default)_/) ||
-          ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
-           $forcestandard = 1;
-       }
-       $forcesupplement=($env{'form.folder'}=~/^supplemental_/);
-
+    if ($showdoc) { # got called in sequence from course
+	$allowed=0; 
+    } else {
        if ($allowed) {
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple');
        }
-    } else { # got called in sequence from course
-       $allowed=0;
     }
 
 # get course data
@@ -2724,122 +2965,92 @@ sub handler {
               .$script."\n"
               .'// ]]>'."\n"
               .'</script>'."\n";
-    my $brcrum = [{href=>"/adm/createuser",text=>"$type Documents"}];
-    $r->print(&Apache::loncommon::start_page("$type Documents", $script,
-				    {'force_register' => $showdoc,
-                                     'bread_crumbs' => $brcrum}).
-	      &Apache::loncommon::help_open_menu('','',273,'RAT'));
+
+    # Breadcrumbs
+    &Apache::lonhtmlcommon::clear_breadcrumbs();
+    unless ($showdoc) {
+        &Apache::lonhtmlcommon::add_breadcrumb({
+            href=>"/adm/coursedocs",text=>"$crstype Contents"});
+
+        $r->print(&Apache::loncommon::start_page("$crstype Contents", $script,
+                                                 {'force_register' => $showdoc,})
+                 .&Apache::loncommon::help_open_menu('','',273,'RAT')
+                 .&Apache::lonhtmlcommon::breadcrumbs(
+                     'Editing the Table of Contents for your '.$crstype,
+                     'Docs_Adding_Course_Doc')
+        );
+    } else {
+        $r->print(&Apache::loncommon::start_page("$crstype documents",undef,
+                                                {'force_register' => $showdoc,}));
+    }
 
   my %allfiles = ();
   my %codebase = ();
-  my ($upload_result,$upload_output);
+  my ($upload_result,$upload_output,$uploadphase);
   if ($allowed) {
       if (($env{'form.uploaddoc.filename'}) &&
 	  ($env{'form.cmd'}=~/^upload_(\w+)/)) {
-# Process file upload - phase one - upload and parse primary file.
+          my $context = $1; 
+          # Process file upload - phase one - upload and parse primary file.
 	  undef($hadchanges);
-          $upload_result = &process_file_upload(\$upload_output,$coursenum,
-						$coursedom,\%allfiles,
-						\%codebase,$1);
+          $uploadphase = &process_file_upload(\$upload_output,$coursenum,$coursedom,
+                                              \%allfiles,\%codebase,$context);
 	  if ($hadchanges) {
 	      &mark_hash_old();
 	  }
-          if ($upload_result eq 'phasetwo') {
-              $r->print($upload_output);
-          }
-      } elsif ($env{'form.phasetwo'}) {
-          my %newname = ();
-          my %origname = ();
-          my %attribs = ();
-          my $updateflag = 0;
-          my $residx = $env{'form.newidx'};
-          my $primary_url = &unescape($env{'form.primaryurl'});
-# Process file upload - phase two - gather secondary files.
-          for (my $i=0; $i<$env{'form.phasetwo'}; $i++) {
-              if ($env{'form.embedded_item_'.$i.'.filename'}) {
-                  my $javacodebase;
-                  $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx);
-                  $origname{$i} = &unescape($env{'form.embedded_orig_'.$i});
-                  if (exists($env{'form.embedded_codebase_'.$i})) {
-                      $javacodebase =  &unescape($env{'form.embedded_codebase_'.$i});
-                      $origname{$i} =~ s#^\Q$javacodebase\E/##;
-                  }
-                  my @attributes = ();
-                  if ($env{'form.embedded_attrib_'.$i} =~ /:/) {
-                      @attributes = split(/:/,$env{'form.embedded_attrib_'.$i});
-                  } else {
-                      @attributes = ($env{'form.embedded_attrib_'.$i});
-                  }
-                  foreach my $attr (@attributes) {
-                      push(@{$attribs{$i}},&unescape($attr));
-                  }
-                  if ($javacodebase) {
-                      $codebase{$i} = $javacodebase;
-                      $codebase{$i} =~ s#/$##;
-                      $updateflag = 1;
-                  }
-              }
-              unless ($newname{$i} eq $origname{$i}) {
-                  $updateflag = 1;
-              }
-          }
-# Process file upload - phase three - modify primary file
-          if ($updateflag) {
-              my ($content,$rtncode);
-              my $updateflag = 0;
-              my $getstatus = &Apache::lonnet::getuploaded('GET',$primary_url,$coursedom,$coursenum,\$content,\$rtncode);
-              if ($getstatus eq 'ok') {
-                  foreach my $item (keys(%newname)) {
-                      if ($newname{$item} ne $origname{$item}) {
-                          my $attrib_regexp = '';
-                          if (@{$attribs{$item}} > 1) {
-                              $attrib_regexp = join('|',@{$attribs{$item}});
-                          } else {
-                              $attrib_regexp = $attribs{$item}[0];
-                          }
-                          if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) {
-                          }
-                          $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi;
-                      }
-                      if (exists($codebase{$item})) {
-                          $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; #' stupid emacs
-                      }
-                  }
-# Save edited file.
-                  my $saveresult;
-                  my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
-                  my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
-                  my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult);
-              } else {
-                  &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus);
-              }
-          }
+          $r->print($upload_output);
+      } elsif ($env{'form.phase'} eq 'upload_embedded') {
+          # Process file upload - phase two - upload embedded objects 
+          $uploadphase = 'check_embedded';
+          my $primaryurl = &HTML::Entities::encode($env{'form.primaryurl'},'<>&"');   
+          my $state = &embedded_form_elems($uploadphase,$primaryurl,
+                                           $env{'form.newidx'});
+          my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
+          my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
+          my ($destination,$dir_root) = &embedded_destination();
+          my $url_root = '/uploaded/'.$docudom.'/'.$docuname;
+          my $actionurl = '/adm/coursedocs';
+          my ($result,$flag) = 
+              &Apache::loncommon::upload_embedded('coursedoc',$destination,
+                  $docuname,$docudom,$dir_root,$url_root,undef,undef,undef,$state,
+                  $actionurl);
+          $r->print($result.&return_to_editor());
+      } elsif ($env{'form.phase'} eq 'check_embedded') {
+          # Process file upload - phase three - modify references in HTML file
+          $uploadphase = 'modified_orightml';
+          my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'};
+          my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'};
+          my ($destination,$dir_root) = &embedded_destination();
+          $r->print(&Apache::loncommon::modify_html_refs('coursedoc',$destination,
+                                                         $docuname,$docudom,undef,
+                                                         $dir_root).
+                   &return_to_editor());
       }
   }
 
-  unless ($showdoc ||  $upload_result eq 'phasetwo') {
+  unless ($showdoc || $uploadphase) {  
 # -----------------------------------------------------------------------------
        my %lt=&Apache::lonlocal::texthash(
-                'uplm' => 'Upload a new main '.lc($type).' document',
-                'upls' => 'Upload a new supplemental '.lc($type).' document',
+                'uplm' => 'Upload a new main '.lc($crstype).' document',
+                'upls' => 'Upload a new supplemental '.lc($crstype).' document',
                 'impp' => 'Import a document',
 		'copm' => 'All documents out of a published map into this folder',
-                'upld' => 'Upload Document',
+                'upld' => 'Import Document',
                 'srch' => 'Search',
                 'impo' => 'Import',
-		'book' => 'Import Bookmarks',
+		'wish' => 'Import from Wishlist',
                 'selm' => 'Select Map',
                 'load' => 'Load Map',
-                'reco' => 'Recover Deleted Resources',
+                'reco' => 'Recover Deleted Documents',
                 'newf' => 'New Folder',
                 'newp' => 'New Composite Page',
                 'extr' => 'External Resource',
                 'syll' => 'Syllabus',
-                'navc' => 'Navigate Contents',
+                'navc' => 'Table of Contents',
                 'sipa' => 'Simple Course Page',
                 'sipr' => 'Simple Problem',
                 'drbx' => 'Drop Box',
-                'scuf' => 'Score Upload Form',
+                'scuf' => 'External Scores (handgrade, upload, clicker)',
                 'bull' => 'Discussion Board',
                 'mypi' => 'My Personal Information Page',
                 'grpo' => 'Group Portfolio',
@@ -2850,7 +3061,7 @@ sub handler {
                 'file' =>  'File',
                 'title' => 'Title',
                 'comment' => 'Comment',
-                'parse' => 'Upload embedded images/multimedia files if HTML file!',
+                'parse' => 'Upload embedded images/multimedia files if HTML file',
 		'nd' => 'Upload Document',
 		'pm' => 'Published Map',
 		'sd' => 'Special Document',
@@ -2871,40 +3082,34 @@ FIUP
 	</label>
 CHBO
 
+    my $fileuploada = "<input type='submit' value='".$lt{'upld'}."' /> $help{'Uploading_From_Harddrive'}";
 	my $fileuploadform=(<<FUFORM);
 	<form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">
 	<input type="hidden" name="active" value="aa" />
 	$fileupload
 	<br />
 	$lt{'title'}:<br />
-	<input type="text" size="50" name="comment" />
+	<input type="text" size="80" name="comment" />
 	$uploadtag
 	<input type="hidden" name="cmd" value="upload_default" />
 	<br />
 	<span class="LC_nobreak">
 	$checkbox
 	</span>
-	<br />
-	<br />
-	<span class="LC_nobreak">
-	<input type="submit" value="$lt{'upld'}" />
-	 $help{'Uploading_From_Harddrive'}
-	</span>
-	</form>
 FUFORM
+    $fileuploadform .= &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'})).'</form>';
 
 	my $simpleeditdefaultform=(<<SEDFFORM);
 	<form action="/adm/coursedocs" method="post" name="simpleeditdefault">
 	<input type="hidden" name="active" value="bb" />
-	$uploadtag
-	<input type="button" onclick="javascript:groupsearch()" value="$lt{'srch'}" />
-	<br />
-	<span class="LC_nobreak">
-	<input type="button" onclick="javascript:groupimport();" value="$lt{'impo'}" />
-	$help{'Importing_LON-CAPA_Resource'}
-	</span>
-	<br />
-	<input type="button" onclick="javascript:groupopen(0,1,1);" value="$lt{'book'}" />
+SEDFFORM
+	my @simpleeditdefaultforma = ( 
+	{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/src.png" alt="'.$lt{srch}.'"  onclick="javascript:groupsearch()" />' => "$uploadtag<a class='LC_menubuttons_link' href='javascript:groupsearch()'>$lt{'srch'}</a>" },
+	{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/res.png" alt="'.$lt{impo}.'"  onclick="javascript:groupimport();"/>' => "<a class='LC_menubuttons_link' href='javascript:groupimport();'>$lt{'impo'}</a>$help{'Importing_LON-CAPA_Resource'}" },
+	{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{wish}.'" onclick="javascript:open_Wishlist_Import();" />' => "<a class='LC_menubuttons_link' href='javascript:open_Wishlist_Import();'>$lt{'wish'}</a>" },
+	);
+	$simpleeditdefaultform .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma));
+	$simpleeditdefaultform .=(<<SEDFFORM);
 	<hr />
 	<p>
 	$lt{'copm'}<br />
@@ -2917,17 +3122,15 @@ FUFORM
 	</form>
 SEDFFORM
 
-	my $extresourcesform=(<<ERFORM);
-	<form action="/adm/coursedocs" method="post" name="newext">
-	$uploadtag
-	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newext" type="button" onclick="javascript:makenewext('newext');"
-	value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
-	</span>
-	</form>
+      my $extresourcesform=(<<ERFORM);
+      <form action="/adm/coursedocs" method="post" name="newext">
+      $uploadtag
+      <input type="hidden" name="importdetail" value="" />
+      <a class="LC_menubuttons_link" href="javascript:makenewext('newext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}
+      </form>
 ERFORM
 
+
     if ($allowed) {
 	&update_paste_buffer($coursenum,$coursedom);
        my %lt=&Apache::lonlocal::texthash(
@@ -2937,18 +3140,6 @@ ERFORM
                                          'sl' => 'Show Log'
 					  );
 
-       my $folderpath=$env{'form.folderpath'};
-       if (!$folderpath) {
-	   if ($env{'form.folder'} eq '' ||
-	       $env{'form.folder'} eq 'supplemental') {
-	       $folderpath='default&'.
-		   &escape(&mt('Main '.$type.' Documents'));
-	   }
-       }
-       unless ($env{'form.pagepath'}) {
-           $containertag = '<input type="hidden" name="folderpath" value="" />';
-           $uploadtag = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($folderpath,'<>&"').'" />';
-       }
 	$r->print(<<HIDDENFORM);
 	<form name="renameform" method="post" action="/adm/coursedocs">
    <input type="hidden" name="title" />
@@ -2963,39 +3154,21 @@ ERFORM
  </form>
 HIDDENFORM
     }
-# --------------------------------------------------------- Main tab structure
-    my $activeClass = 1;
-    my $active = '';
-    $r->print('<ul class="LC_TabContentBigger" id="mainnav">');
-    if (($standard) && ($allowed) && (!$forcesupplement) && (($env{'form.folderpath'}=~/^default/) || $env{'form.folderpath'}eq"" || ($env{'form.pagepath'}))) {
-        if($activeClass == 1){
-           $active = 'class="active"';
-	   $activeClass = 0;
-	}
-    }
-    $r->print('<li '.$active.' onclick="javascript:showPage(this,\'mainCourseDocuments\',\'mainnav\',\'maincoursedoc\');">'.&mt('Main Course Documents').'</li>');
-    $active = '';
-    if (!$forcestandard || ($env{'form.folderpath'}=~/^supplemental/)) {
-        if($activeClass == 1){
-           $active = 'class="active"';
-        }
-    }
-    $r->print('<li '.$active.' onclick="javascript:showPage(this,\'supplCourseDocuments\',\'mainnav\',\'maincoursedoc\');">'.&mt('Supplemental Course Documents').'</li>');
-    $r->print('</ul>'
-             .'<div class="LC_Box" style="clear:both;margin:0;">'
-             .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');
-# --------------------------------------------------------- Standard documents
-       my $savefolderpath;
-       my $active = 'style="display: none;"';
-       if($activeClass == 0){
-          $active = 'style="display: block;"';
-       }
-       $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" '.$active.'>');
+
+# Generate the tabs
+    &startContentScreen($r,($supplementalflag?'supdocs':'docs'));
+
+
+#
+
+    my $savefolderpath;
+
+    if ($allowed) {
        my $folder=$env{'form.folder'};
-       if ($folder eq '' || $folder=~/^supplemental/) {
+       if ($folder eq '' || $supplementalflag) {
            $folder='default';
 	   $savefolderpath = $env{'form.folderpath'};
-	   $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));
+	   $env{'form.folderpath'}='default&'.&escape(&mt('Content'));
            $uploadtag = '<input type="hidden" name="folderpath" value="'.
 	       &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';
        }
@@ -3024,14 +3197,14 @@ HIDDENFORM
 
 	my $recoverform=(<<RFORM);
 	<form action="/adm/groupsort" method="post" name="recover">
-	<input type="button" name="recovermap" onclick="javascript:groupopen('$readfile',1,0)" value="$lt{'reco'}" />
+	<a class="LC_menubuttons_link" href="javascript:groupopen('$readfile',1)">$lt{'reco'}</a>
 	</form>
 RFORM
 
 	my $imspform=(<<IMSPFORM);
 	<form action="/adm/imsimportdocs" method="post" name="ims">
 	<input type="hidden" name="folder" value="$folder" />
-	<input name="imsimport" type="button" value="$lt{'imsf'}" title="$lt{imsl}"  onclick="javascript:makeims();" />
+	<a class="LC_menubuttons_link" href="javascript:makeims();">$lt{'imsf'}</a>
 	</form>
 IMSPFORM
 
@@ -3041,10 +3214,8 @@ IMSPFORM
 	$uploadtag
 	<input type="hidden" name="importdetail" 
 	value="$lt{'navc'}=/adm/navmaps" />
-	<span class="LC_nobreak">
-	<input name="newnav" type="submit" value="$lt{'navc'}" />
+	<a class="LC_menubuttons_link" href="javascript:document.newnav.submit()">$lt{'navc'}</a>
 	$help{'Navigate_Content'}
-	</span>
 	</form>
 NNFORM
 	my $newsmppageform=(<<NSPFORM);
@@ -3052,10 +3223,8 @@ NNFORM
 	<input type="hidden" name="active" value="cc" />
 	$uploadtag
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newsmppg" type="button" value="$lt{'sipa'}"
-	onclick="javascript:makesmppage();" /> $help{'Simple Page'}
-	</span>
+	<a class="LC_menubuttons_link" href="javascript:makesmppage();"> $lt{'sipa'}</a>
+	$help{'Simple Page'}
 	</form>
 NSPFORM
 
@@ -3064,10 +3233,8 @@ NSPFORM
 	<input type="hidden" name="active" value="cc" />
 	$uploadtag
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newsmpproblem" type="button" value="$lt{'sipr'}"
-	onclick="javascript:makesmpproblem();" />$help{'Simple Problem'}
-	</span>
+	<a class="LC_menubuttons_link" href="javascript:makesmpproblem();">$lt{'sipr'}</a>
+	$help{'Simple Problem'}
 	</form>
 
 NSPROBFORM
@@ -3077,10 +3244,7 @@ NSPROBFORM
 	<input type="hidden" name="active" value="cc" />
 	$uploadtag
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newdropbox" type="button" value="$lt{'drbx'}"
-	onclick="javascript:makedropbox();" />
-	</span>
+	<a class="LC_menubuttons_link" href="javascript:makedropbox();">$lt{'drbx'}</a>
 	</form>
 NDBFORM
 
@@ -3089,11 +3253,8 @@ NDBFORM
 	<input type="hidden" name="active" value="cc" />
 	$uploadtag
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newexamupload" type="button" value="$lt{'scuf'}"
-	onclick="javascript:makeexamupload();" />
+	<a class="LC_menubuttons_link" href="javascript:makeexamupload();">$lt{'scuf'}</a>
 	$help{'Score_Upload_Form'}
-	</span>
 	</form>
 NEXUFORM
 
@@ -3102,11 +3263,8 @@ NEXUFORM
 	<input type="hidden" name="active" value="cc" />
 	$uploadtag
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newbulletin" type="button" value="$lt{'bull'}"
-	onclick="javascript:makebulboard();" />
+	<a class="LC_menubuttons_link" href="javascript:makebulboard();" >$lt{'bull'}</a>
 	$help{'Bulletin Board'}
-	</span>
 	</form>
 NBFORM
 
@@ -3116,10 +3274,8 @@ NBFORM
 	$uploadtag
 	<input type="hidden" name="importdetail" 
 	value="$plainname=/adm/$udom/$uname/aboutme" />
-	<span class="LC_nobreak">
-	<input name="newaboutme" type="submit" value="$lt{'mypi'}" />
+	<a class="LC_menubuttons_link" href="javascript:document.newaboutme.submit()">$lt{'mypi'}</a>
 	$help{'My Personal Information Page'}
-	</span>
 	</form>
 NAMFORM
 
@@ -3128,10 +3284,7 @@ NAMFORM
 	<input type="hidden" name="active" value="cc" />
 	$uploadtag
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newaboutsomeone" type="button" value="$lt{'abou'}" 
-	onclick="javascript:makeabout();" />
-	</span>
+	<a class="LC_menubuttons_link" href="javascript:makeabout();">$lt{'abou'}</a>
 	</form>
 NASOFORM
 
@@ -3142,42 +3295,39 @@ NASOFORM
 	$uploadtag
 	<input type="hidden" name="importdetail" 
 	value="$lt{'rost'}=/adm/viewclasslist" />
-	<span class="LC_nobreak">
-	<input name="newroster" type="submit" value="$lt{'rost'}" />
+	<a class="LC_menubuttons_link" href="javascript:document.newroster.submit()">$lt{'rost'}</a>
 	$help{'Course Roster'}
-	</span>
 	</form>
 NROSTFORM
 
 my $specialdocumentsform;
+my @specialdocumentsforma;
+my $gradingform;
+my @gradingforma;
+my $communityform;
+my @communityforma;
 my $newfolderform;
+my $newfolderb;
 
-       unless ($env{'form.pagepath'}) {
-	   my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
-
+	my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
+	
 	my $newpageform=(<<NPFORM);
 	<form action="/adm/coursedocs" method="post" name="newpage">
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="importdetail" value="" />
 	<input type="hidden" name="active" value="cc" />
-	<span class="LC_nobreak">
-	<input name="newpage" type="button"
-	onclick="javascript:makenewpage(this.form,'$pageseq');"
-	value="$lt{'newp'}" />$help{'Adding_Pages'}
-	</span>
+	<a class="LC_menubuttons_link" href="javascript:makenewpage(document.newpage,'$pageseq');">$lt{'newp'}</a>
+	$help{'Adding_Pages'}
 	</form>
 NPFORM
 
+
 	$newfolderform=(<<NFFORM);
 	<form action="/adm/coursedocs" method="post" name="newfolder">
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="importdetail" value="" />
 	<input type="hidden" name="active" value="aa" />
-	<span class="LC_nobreak">
-	<input name="newfolder" type="button"
-	onclick="javascript:makenewfolder(this.form,'$folderseq');"
-	value="$lt{'newf'}" />$help{'Adding_Folders'}
-	</span>
+	<a href="javascript:makenewfolder(document.newfolder,'$folderseq');">$lt{'newf'}</a>$help{'Adding_Folders'}
 	</form>
 NFFORM
 
@@ -3187,10 +3337,9 @@ NFFORM
 	$uploadtag
 	<input type="hidden" name="importdetail" 
 	value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />
-	<span class="LC_nobreak">
-	<input name="newsyl" type="submit" value="$lt{'syll'}" /> 
+	<a class="LC_menubuttons_link" href="javascript:document.newsyl.submit()">$lt{'syll'}</a>
 	$help{'Syllabus'}
-	</span>
+
 	</form>
 NSYLFORM
 
@@ -3200,64 +3349,87 @@ NSYLFORM
 	$uploadtag
 	<input type="hidden" name="importdetail"
 	value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />
-	<span class="LC_nobreak">
-	<input name="newgroupfiles" type="submit" value="$lt{'grpo'}" />
+	<a class="LC_menubuttons_link" href="javascript:document.newgroupfiles.submit()">$lt{'grpo'}</a>
 	$help{'Group Portfolio'}
-	</span>
 	</form>
 NGFFORM
+	@specialdocumentsforma=(
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'"  onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform},
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.newsyl.submit()" />'=>$newsylform},
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform},
+        );
+        $specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma));
 
-	$specialdocumentsform="<br />$newpageform<br />$newsylform<br />$newgroupfileform";
-      }
-	$specialdocumentsform.="<br />$newnavform<br />$newsmppageform
-				<br />$newsmpproblemform<br />$newdropboxform
-       				<br />$newexuploadform<br />$newbulform
-       				<br />$newaboutmeform<br />$newaboutsomeoneform
-       				<br />$newrosterform";
-if($env{'form.pagepath'}) {
-	$specialdocumentsform="<br />$newsmpproblemform<br />$newexuploadform";
-}
+
+        my @importdoc = (
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'newext\');" />'=>$extresourcesform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},);
+        $fileuploadform =  &create_form_ul(&create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform;
+
+        @gradingforma=(
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform},
+
+        );
+        $gradingform = &create_form_ul(&create_list_elements(@gradingforma));
+
+        @communityforma=(
+       {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},
+        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},
+        );
+        $communityform = &create_form_ul(&create_list_elements(@communityforma));
+
+
+
+my @tools = (
+#	{'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform},
+#	{'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" />'=>$imspform},
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/recover.png" alt="'.$lt{reco}.'" onclick="javascript:groupopen(\''.$readfile.'\',1)" />'=>$recoverform},
+	);
 
 my %orderhash = (
-                'aa' => ['Upload Document',$fileuploadform.'<br />'.$newfolderform],
+                'aa' => ['Import Documents',$fileuploadform],
                 'bb' => ['Published Resources',$simpleeditdefaultform],
-                'cc' => ['Special Documents',$specialdocumentsform],
-		'dd' => ['Tools',$extresourcesform.'<br />'.$imspform.'<br />'.$recoverform.'<br />'.&generate_admin_options($containertag,$uploadtag,\%help,\%env)],
-                'zz' => ['Hide'],
+                'cc' => ['Grading Resources',$gradingform],
+		'ff' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],
                 );
-my $tid='1';
-my $varcd = 'Main Course Documents';
-$r->print(&generate_edit_table($tid,$varcd,\%orderhash));
+unless ($env{'form.pagepath'}) {
+    $orderhash{'00'} = ['Newfolder',$newfolderform];
+    $orderhash{'dd'} = ['Community Resources',$communityform];
+    $orderhash{'ee'} = ['Special Documents',$specialdocumentsform];
+}
+
  $hadchanges=0;
-        my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type);
-       if ($error) {
-           $r->print('<p><span class="LC_error">'.$error.'</span></p>');
-       }
-       if ($hadchanges) {
-           &mark_hash_old();
-       }
+       unless ($supplementalflag) {
+          my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
+          if ($error) {
+             $r->print('<p><span class="LC_error">'.$error.'</span></p>');
+          }
+          if ($hadchanges) {
+             &mark_hash_old();
+          }
+
+          &changewarning($r,'');
+          $r->print(&generate_edit_table('1',\%orderhash));
+        }
+
+	}
+
+# Supplemental documents start here
 
-       &changewarning($r,'');
- $r->print(&Apache::loncommon::help_open_topic('Docs_Adding_Course_Doc',
-                     &mt('Editing the Table of Contents for your '.$type)));
-$r->print('</div>');
-       if ($env{'form.pagepath'}) {
-       }
-# ----------------------------------------------------- Supplemental documents
-       my $active = 'style="display: none;"';
-       if($activeClass == 1){
-          $active = 'style="display: block;"';
-       }
-       $r->print('<div class="LC_ContentBox" id="supplCourseDocuments" '.$active.'>');
        my $folder=$env{'form.folder'};
-       unless ($folder=~/^supplemental/) {
+       unless ($supplementalflag) {
 	   $folder='supplemental';
        }
        if ($folder =~ /^supplemental$/ &&
 	   (($env{'form.folderpath'} =~ /^default\&/) || ($env{'form.folderpath'} eq ''))) {
-          $env{'form.folderpath'} = 'supplemental&'.
-                                    &escape(&mt('Supplemental '.$type.' Documents'));
-       }else{
+          $env{'form.folderpath'} = &supplemental_base();
+       } elsif ($allowed) {
 	  $env{'form.folderpath'} = $savefolderpath;
        }
        $env{'form.pagepath'} = '';
@@ -3268,8 +3440,9 @@ $r->print('</div>');
 
 	   my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
 
+	my $supupdocformbtn = "<input type='submit' value='".$lt{'upld'}."' />$help{'Uploading_From_Harddrive'}";
 	my $supupdocform=(<<SUPDOCFORM);
-	<form action="/adm/coursedocs" method="post" enctype="multipart/form-data">
+	<form action="/adm/coursedocs" method="post" name="supuploaddocument" enctype="multipart/form-data">
 	<input type="hidden" name="active" value="ee" />	
 	$fileupload
 	<br />
@@ -3279,42 +3452,30 @@ $r->print('</div>');
 	</span>
 	<br /><br />
 	$lt{'comment'}:<br />
-	<textarea cols="50" rows="4" name="comment">
-	</textarea>
+	<textarea cols="50" rows="4" name="comment"></textarea>
 	<br />
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="cmd" value="upload_supplemental" />
-	<span class="LC_nobreak">
-	<input type="submit" value="$lt{'upld'}" />
-	 $help{'Uploading_From_Harddrive'}
-	</span>
-	</form>
 SUPDOCFORM
+	$supupdocform .=  &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$supupdocformbtn,{class => 'LC_menubuttons_inline_text'}))."</form>";
 
 	my $supnewfolderform=(<<SNFFORM);
 	<form action="/adm/coursedocs" method="post" name="supnewfolder">
 	<input type="hidden" name="active" value="ee" />
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newfolder" type="button"
-	onclick="javascript:makenewfolder(this.form,'$folderseq');"
-	value="$lt{'newf'}" /> $help{'Adding_Folders'}
-	</span>
+	<a class="LC_menubuttons_link" href="javascript:makenewfolder(document.supnewfolder,'$folderseq');">$lt{'newf'}</a> 
+	$help{'Adding_Folders'}
 	</form>
 SNFFORM
-
+	
 
 	my $supnewextform=(<<SNEFORM);
 	<form action="/adm/coursedocs" method="post" name="supnewext">
 	<input type="hidden" name="active" value="ff" />
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="importdetail" value="" />
-	<span class="LC_nobreak">
-	<input name="newext" type="button" 
-	onclick="javascript:makenewext('supnewext');"
-	value="$lt{'extr'}" /> $help{'Adding_External_Resource'}
-	</span>
+	<a class="LC_menubuttons_link" href="javascript:makenewext('supnewext');">$lt{'extr'}</a> $help{'Adding_External_Resource'}
 	</form>
 SNEFORM
 
@@ -3324,45 +3485,55 @@ SNEFORM
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="importdetail" 
 	value="Syllabus=/public/$coursedom/$coursenum/syllabus" />
-	<span class="LC_nobreak">
-	<input name="newsyl" type="submit" value="$lt{'syll'}" />
+	<a class="LC_menubuttons_link" href="javascript:document.supnewsyl.submit()">$lt{'syll'}</a>
 	$help{'Syllabus'}
-	</span>
 	</form>
 SNSFORM
 
 	my $supnewaboutmeform=(<<SNAMFORM);
-	<form action="/adm/coursedocs" method="post" name="subnewaboutme">
+	<form action="/adm/coursedocs" method="post" name="supnewaboutme">
 	<input type="hidden" name="active" value="ff" />
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="importdetail" 
 	value="$plainname=/adm/$udom/$uname/aboutme" />
-	<span class="LC_nobreak">
-	<input name="newaboutme" type="submit" value="$lt{'mypi'}" />
+	<a class="LC_menubuttons_link" href="javascript:document.supnewaboutme.submit()">$lt{'mypi'}</a>
 	$help{'My Personal Information Page'}
-	</span>
 	</form>
 SNAMFORM
 
 
-
+my @specialdocs = (
+		{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.supnewsyl.submit()" />'
+            =>$supnewsylform},
+		{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="document.supnewaboutme.submit()" />'
+            =>$supnewaboutmeform},
+		);
+my @supimportdoc = (
+		{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'supnewext\');" />'
+            =>$supnewextform},
+        );
+$supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr/>' . $supupdocform;
 my %suporderhash = (
-                'ee' => ['Upload Document',$supupdocform.'<br />'.$supnewfolderform],
-                'ff' => ['Special Documents',$supnewextform.'<br />'.$supnewsylform.'<br />'.$supnewaboutmeform],
-                'zz' => ['Hide'],
+		'00' => ['Supnewfolder', $supnewfolderform],
+                'ee' => ['Import Documents',$supupdocform],
+                'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))]
                 );
+        if ($supplementalflag) {
+           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
+           if ($error) {
+              $r->print('<p><span class="LC_error">'.$error.'</span></p>');
+           }
+           $r->print(&generate_edit_table('2',\%suporderhash));
+        }
+    } elsif ($supplementalflag) {
+        my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
+        if ($error) {
+            $r->print('<p><span class="LC_error">'.$error.'</span></p>');
+        }
+    }
 
-my $tid='2';
-my $varscd = 'Supplemental Course Documents';
+    &endContentScreen($r);
 
-$r->print(&generate_edit_table($tid,$varscd,\%suporderhash));
-my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$type);
-       if ($error) {
-           $r->print('<p><span class="LC_error">'.$error.'</span></p>');
-       }
-$r->print('</div>');
-	}
-$r->print('</div>');
     if ($allowed) {
 	$r->print('
 <form method="post" name="extimport" action="/adm/coursedocs">
@@ -3373,7 +3544,7 @@ $r->print('</div>');
 </form>');
     }
   } else {
-      unless ($upload_result eq 'phasetwo') {
+      unless ($uploadphase) {
 # -------------------------------------------------------- This is showdoc mode
           $r->print("<h1>".&mt('Uploaded Document').' - '.
 		&Apache::lonnet::gettitle($r->uri).'</h1><p>'.
@@ -3386,35 +3557,80 @@ $r->print('</div>');
  return OK;
 }
 
+sub embedded_form_elems {
+    my ($phase,$primaryurl,$newidx) = @_;
+    my $folderpath = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
+    return <<STATE;
+    <input type="hidden" name="folderpath" value="$folderpath" />
+    <input type="hidden" name="cmd" value="upload_embedded" />
+    <input type="hidden" name="newidx" value="$newidx" />
+    <input type="hidden" name="phase" value="$phase" />
+    <input type="hidden" name="primaryurl" value="$primaryurl" />
+STATE
+}
+
+sub embedded_destination {
+    my $folder=$env{'form.folder'};
+    my $destination = 'docs/';
+    if ($folder =~ /^supplemental/) {
+        $destination = 'supplemental/';
+    }
+    if (($folder eq 'default') || ($folder eq 'supplemental')) {
+        $destination .= 'default/';
+    } elsif ($folder =~ /^(default|supplemental)_(\d+)$/) {
+        $destination .=  $2.'/';
+    }
+    $destination .= $env{'form.newidx'};
+    my $dir_root = '/userfiles';
+    return ($destination,$dir_root);
+}
+
+sub return_to_editor {
+    my $actionurl = '/adm/coursedocs';
+    return '<p><form name="backtoeditor" method="post" action="'.$actionurl.'" />'."\n". 
+           '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" /></form>'."\n".
+           '<a href="javascript:document.backtoeditor.submit();">'.&mt('Return to Editor').
+           '</a></p>';
+}
+
 sub generate_admin_options {
-  my ($containertag,$uploadtag,$help_ref,$env_ref) = @_;
- my %lt=&Apache::lonlocal::texthash(
+  my ($help_ref,$env_ref) = @_;
+  my %lt=&Apache::lonlocal::texthash(
                                          'vc' => 'Verify Content',
                                          'cv' => 'Check/Set Resource Versions',
                                          'ls' => 'List Symbs',
-                                         'sl' => 'Show Log'
+                                         'sl' => 'Show Log',
+                                         'imse' => 'IMS Export',
+                                         'dcd' => 'Dump Course Documents to Construction Space: available on other servers'
                                           );
   my %help = %{$help_ref};
   my %env = %{$env_ref};
   my $dumpbut=&dumpbutton();
   my $exportbut=&exportbutton();
-  return (<<ENDOPTIONFORM);
- <form action="/adm/coursedocs" method="post" name="courseverify">
-           <input type="submit" name="verify" value="$lt{'vc'}" />$help{'Verify_Content'}<br />
-           <input type="submit" name="versions" value="$lt{'cv'}" />$help{'Check_Resource_Versions'}<br />
-           $dumpbut
-           $exportbut
-          <input type="submit" name="listsymbs" value="$lt{'ls'}" />
-          <input type="hidden" name="folder" value="$env{'form.folder'}" /><br />
-          <input type="submit" name="docslog" value="$lt{'sl'}" />
- </form>
-ENDOPTIONFORM
+  my @list = (
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/verify.png" alt="'.$lt{vc}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "verify", "'.$lt{'vc'}.'")\' />' 
+        => "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"verify\", \"$lt{'vc'}\")'>$lt{'vc'}</a>$help{'Verify_Content'}"},
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/resversion.png" alt="'.$lt{cv}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "versions", "'.$lt{'cv'}.'")\' />'
+        =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"versions\", \"$lt{'cv'}\")'>$lt{'cv'}</a>$help{'Check_Resource_Versions'}"},
+	);
+  if($dumpbut ne ''){
+  push @list, {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dump.png" alt="'.$lt{dcd}.'" />'=>$dumpbut};
+  }
+  push @list, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/imsexport.png" alt="'.$lt{imse}.'" onclick="javascript:injectData(document.courseverify, \'dummy\', \'exportcourse\', \''.&mt('IMS Export').'\');" />'
+          =>$exportbut},
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/symbs.png" alt="'.$lt{ls}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "listsymbs", "'.$lt{'ls'}.'")\'  />'
+        =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"listsymbs\", \"$lt{'ls'}\")'>$lt{'ls'}</a><input type='hidden' name='folder' value='$env{'form.folder'}' />"},
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/document-properties.png" alt="'.$lt{sl}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "docslog", "'.$lt{'sl'}.'")\'  />'
+        =>"<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"docslog\", \"$lt{'sl'}\")'>$lt{'sl'}</a>"},
+	);
+  return '<form action="/adm/coursedocs" method="post" name="courseverify"><input type="hidden" id="dummy" />'.&create_form_ul(&create_list_elements(@list)).'</form>';
 
 }
 
 
 sub generate_edit_table {
-    my ($tid,$varcd,$orderhash_ref) = @_;
+    my ($tid,$orderhash_ref) = @_;
+    return unless(ref($orderhash_ref) eq 'HASH');
     my %orderhash = %{$orderhash_ref};
     my $form;
     my $activetab;
@@ -3422,37 +3638,35 @@ sub generate_edit_table {
     if($env{'form.active'} ne ''){
         $activetab = $env{'form.active'};
     }
-    $form = '<div class="LC_Box"><h4 class="LC_hcell">'.&mt($varcd).'</h4>';
+    $form = '<div class="LC_Box" style="margin-right:0">';
     $form .= '<ul id="navigation'.$tid.'" class="LC_TabContent">';
     foreach my $name (sort(keys(%orderhash))){
-        if($name eq 'zz'){
-            if($activetab ne ''){
-               $active = 'class="right"';
-            }else{
-               $active = 'class="right active"';
-            }
-            $form .= '<li onclick="javascript:hideAll(this, \'navigation'.$tid.'\' ,\'content'.$tid.'\');" '.$active.'>'.&mt(${$orderhash{$name}}[0]).'</li>';
-        }else{
+        if($name ne '00'){
             if($activetab eq '' || $activetab ne $name){
                $active = '';
             }elsif($activetab eq $name){
                $active = 'class="active"';
             }
-            $form .= '<li '.$active.' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');">'.&mt(${$orderhash{$name}}[0]).'</li>';
-        }
+            $form .= '<li '.$active
+                .' onmouseover="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"'
+                .' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></li>';
+        } else {
+	    $form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>';
+
+	}
     }
     $form .= '</ul>';
-    $form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0;">';
+    $form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; clear: both;">';
     foreach my $field (keys(%orderhash)){
-	if($field ne 'zz'){
-        if($activetab eq '' || $activetab ne $field){
+	if($field ne '00'){
+            if($activetab eq '' || $activetab ne $field){
                 $active = 'style="display: none;"';
-        }elsif($activetab eq $field){
+            }elsif($activetab eq $field){
                 $active = 'style="display:block;"';
-        }
-           $form .= '<div id="'.$field.$tid.'"'
-                   .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]
-                   .'</div>';
+            }
+            $form .= '<div id="'.$field.$tid.'"'
+                    .' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1]
+                    .'</div>';
         }
     }
     $form .= '</div></div>';
@@ -3468,7 +3682,7 @@ sub editing_js {
                                           t_mnf => 'New Folder',
                                           p_mnp => 'Name of New Page',
                                           t_mnp => 'New Page',
-                                          p_mxu => 'Title for the Uploaded Score',
+                                          p_mxu => 'Title for the External Score',
                                           p_msp => 'Name of Simple Course Page',
                                           p_msb => 'Title for the Problem',
                                           p_mdb => 'Title for the Drop Box',
@@ -3487,6 +3701,18 @@ sub editing_js {
                                           p_ctr2b => '?[_98]'
                                         );
 
+    my $crstype = &Apache::loncommon::course_type();
+    my $docs_folderpath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.folderpath'},'<>&"');
+    my $docs_pagepath = &HTML::Entities::encode($env{'environment.internal.'.$env{'request.course.id'}.'.docs_folderpath.pagepath'},'<>&"');
+    my $main_container_page;
+    if ($docs_folderpath eq '') {
+        if ($docs_pagepath ne '') {
+            $main_container_page = 1;
+        }
+    }
+    my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents';
+    my $toplevelsupp = &supplemental_base();
+
     return <<ENDNEWSCRIPT;
 function makenewfolder(targetform,folderseq) {
     var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}');
@@ -3691,13 +3917,16 @@ for (i = 0; i < currentDivs.length; i++)
 
 function openTabs(pageId) {
 	tabnav = document.getElementById(pageId).getElementsByTagName('UL');	
-	if(tabnav.length > 0 ){
-		currentNav = document.getElementById(tabnav[0].id);
+	if(tabnav.length > 2 ){
+		currentNav = document.getElementById(tabnav[1].id);
 		currentLis = currentNav.getElementsByTagName('LI');
 		for(i = 0; i< currentLis.length; i++){
 			if(currentLis[i].className == 'active') {
 				funcString = currentLis[i].onclick.toString();
 				tab = funcString.split('"');
+                                if(tab.length < 2) {
+                                   tab = funcString.split("'");
+                                }
 				currentData = document.getElementById(tab[1]);
         			currentData.style.display = 'block';
 			}	
@@ -3712,9 +3941,50 @@ function showPage(current, pageId, nav,
 	current.className = 'active';
 	currentData = document.getElementById(pageId);
 	currentData.style.display = 'block';
+        if (nav == 'mainnav') {
+            var storedpath = "$docs_folderpath";
+            if (storedpath == '') {
+                storedpath = "$docs_pagepath";
+            }
+            var storedpage = "$main_container_page";
+            var reg = new RegExp("^supplemental");
+            if (pageId == 'mainCourseDocuments') {
+                if (storedpage == 1) {
+                    document.simpleedit.folderpath.value = '';
+                    document.uploaddocument.folderpath.value = '';
+                } else {
+                    if (reg.test(storedpath)) {
+                        document.simpleedit.folderpath.value = '$toplevelmain';
+                        document.uploaddocument.folderpath.value = '$toplevelmain';
+                        document.newext.folderpath.value = '$toplevelmain';
+                    } else {
+                        document.simpleedit.folderpath.value = storedpath;
+                        document.uploaddocument.folderpath.value = storedpath;
+                        document.newext.folderpath.value = storedpath;
+                    }
+                }
+            } else {
+                if (reg.test(storedpath)) {
+                    document.simpleedit.folderpath.value = storedpath;
+                    document.supuploaddocument.folderpath.value = storedpath;
+                    document.supnewext.folderpath.value = storedpath;
+                } else {
+                    document.simpleedit.folderpath.value = '$toplevelsupp';
+                    document.supuploaddocument.folderpath.value = '$toplevelsupp';
+                    document.supnewext.folderpath.value = '$toplevelsupp';
+                }
+            }
+        }
 	return false;
 }
 
+function injectData(current, hiddenField, name, value) {
+	currentElement = document.getElementById(hiddenField);
+	currentElement.name = name;
+	currentElement.value = value;
+	current.submit();
+}
+
 ENDNEWSCRIPT
 }
 1;