--- loncom/interface/londocs.pm	2010/03/22 13:24:16	1.424
+++ loncom/interface/londocs.pm	2011/08/15 16:31:55	1.457
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.424 2010/03/22 13:24:16 onken Exp $
+# $Id: londocs.pm,v 1.457 2011/08/15 16:31:55 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -280,6 +280,7 @@ sub exportcourse {
     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 '.$crstype.' to IMS Package').
@@ -310,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) {
@@ -331,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
@@ -435,6 +438,8 @@ sub exportcourse {
                 if (($curRes->is_sequence()) || ($curRes->is_page())) {
                     $lastcontainer = $currelem;
                     $display .= 'onclick="javascript:propagateCheck('."'$currelem'".')"';
+                } elsif ($curRes->is_problem()) {
+                    $numprobs ++; 
                 }
                 $display .= ' />'."\n";
                 for (my $i=0; $i<$depth; $i++) {
@@ -519,6 +524,16 @@ function containerCheck(item) {
 	$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="'.
@@ -527,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) {
@@ -571,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 />'
 ;
@@ -580,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;
@@ -619,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;
@@ -656,10 +677,28 @@ 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),$curRes->map_pc()) {
+                            next if ($pc <= 1);
+                            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.
@@ -720,7 +759,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 = ();
@@ -777,10 +816,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');
@@ -800,7 +844,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;
@@ -844,10 +889,71 @@ 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,
+                             instructor_comments => 'hide',
+                           );
+                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-1];
+                                } 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};
+                                    $tosave[$foilcounter] .= $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;
@@ -905,7 +1011,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') {
@@ -1150,6 +1255,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',
@@ -1238,6 +1344,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})
@@ -1521,12 +1628,11 @@ sub editor {
         $LONCAPA::map::resources[$idx]='';
     }
 
-    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order);
-    if ($allowed) {
-        ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
+    my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) =
 	    &breadcrumbs($allowed,$crstype);
         $r->print($breadcrumbtrail);
-    } else {
+
+    unless ($allowed) {
         $randompick = -1;
     }
 
@@ -1607,13 +1713,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'
@@ -1654,19 +1759,21 @@ sub editor {
     &Apache::loncommon::end_data_table_count();
     
     if ($shown) {
-        $r->print(&Apache::loncommon::start_data_table());
+        $r->print(&Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll')
+                 .&Apache::loncommon::start_data_table(undef,'contentlist'));
         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/) {
-                $->print('<th colspan="4">'.&mt('Settings').'</th>');
+                $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">'
@@ -1683,11 +1790,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';
@@ -1706,7 +1812,8 @@ sub process_file_upload {
             $LONCAPA::map::resources[1]='';
         }
         if ($fatal) {
-            return 'failed';
+            $$upload_output = '<div class="LC_error" id="uploadfileresult">'.&mt('The uploaded file has not been stored as an error occurred reading the contents of the current folder.').'</div>';
+            return;
         }
         my $destination = 'docs/';
         if ($folder =~ /^supplemental/) {
@@ -1717,13 +1824,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 = '<div class="LC_error" id="uploadfileresult">'.&mt('Unable to save file [_1].','<span class="LC_filename">'.$filename.'</span>').'</div>';
+            return;
+        }
         my $ext='false';
         if ($url=~m{^http://}) { $ext='true'; }
 	$url     = &LONCAPA::map::qtunescape($url);
@@ -1740,51 +1857,38 @@ 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 = '<div class="LC_error" id="uploadfileresult">'.$errtext.'</div>';
+            return;
         } else {
-            if ($parseaction eq 'parse') {
+            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 />';
                 }
+                $$upload_output = '<div id="uploadfileresult">'.$$upload_output.'</div>';
             }
         }
     }
-    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 {
@@ -1849,7 +1953,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'});
     }
@@ -2243,6 +2347,7 @@ sub list_symbs {
     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>'.
@@ -2257,17 +2362,15 @@ sub list_symbs {
         }
         $r->print("\n</pre>\n");
     }
-    $r->print('<hr /><a href="/adm/coursedocs">'.&mt('Back to Course Editor').'</a>');
 }
 
 
 sub verifycontent {
     my ($r) = @_;
     my $crstype = &Apache::loncommon::course_type();
-   my $loaderror=&Apache::lonnet::overloaderror($r);
-   if ($loaderror) { return $loaderror; }
    $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=();
@@ -2286,13 +2389,7 @@ sub verifycontent {
        }
    }
    &untiehash();
-   $r->print(
-       '<p class="LC_success">'.&mt('Done').'</p>'
-      .'<hr />'
-      .'<p><a href="/adm/coursedocs">'
-	  .&mt('Back to Course Editor')
-      .'</a></p>'
-   );
+   $r->print('<p class="LC_success">'.&mt('Done').'</p>');
 }
 
 
@@ -2307,6 +2404,8 @@ sub checkversions {
     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='';
@@ -2484,11 +2583,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' => &mt('most recent'),
-						       map {$_,$_} (1..$currentversion))));
+						       map {$_,$_} (1..$currentversion)}));
 	    $r->print('</span></td></tr><tr><td></td>');
 	    my $lastold=1;
 	    for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) {
@@ -2617,8 +2716,67 @@ 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"':'').
+               ' id="tabbededitor"><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;" id="contenteditor">'
+             .'<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;
@@ -2627,7 +2785,7 @@ sub handler {
     return OK if $r->header_only;
     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',
@@ -2672,45 +2830,84 @@ sub handler {
       &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 $addentries = {};
     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 we are not allowed to make changes, all we can see are supplemental docs
     if (!$allowed) {
-        unless($env{'form.folderpath'} =~ /^supplemental/) {
-            $env{'form.folderpath'} = '';
+        $env{'form.pagepath'}='';
+        unless ($env{'form.folderpath'} =~ /^supplemental/) {
+            $env{'form.folderpath'} = &supplemental_base();
         }
     }
+# If we still not have a folderpath, see if we can resurrect at pagepath
     if (!$env{'form.folderpath'} && $allowed) {
-        &Apache::loncommon::restore_course_settings('docs_folderpath',
+        &Apache::loncommon::restore_course_settings($stored_folderpath,
                                               {'pagepath' => 'scalar'});
     }
-    if ($env{'form.pagepath'}) {
-       $env{'form.folderpath'}='';
-    }
+# 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 '.$crstype.' 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));
@@ -2721,9 +2918,22 @@ 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;
@@ -2731,38 +2941,12 @@ sub handler {
     if ($showdoc) { # got called in sequence from course
 	$allowed=0; 
     } else {
-       if (($env{'form.folder'}=~/^(?:group|default)_/) ||
-          ($env{'form.folder'} =~ m:^\d+/(pages|sequences)/:)) {
-           $forcestandard = 1;
-       }
-       $forcesupplement=($env{'form.folder'}=~/^supplemental_/);
-
        if ($allowed) {
          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']);
          $script=&Apache::lonratedt::editscript('simple');
        }
     }
 
-# subroutine to list form elements
-sub create_list_elements {
-   my @formarr = @_; 
-   my $list = '';
-   for my $button (@formarr){
-	for my $picture(keys %$button) {
-		#my $link = Apache::lonhtmlcommon::htmltag('a' ,$button->{$picture}, {href => "test"}); 
-		$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;
-}
-
 # get course data
     my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'};
     my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};
@@ -2777,7 +2961,12 @@ sub create_form_ul {
     $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/");
 
     if ($allowed) {
-	$script .= &editing_js($udom,$uname);
+	$script .= &editing_js($udom,$uname).
+                   &resize_contentdiv_js();
+        $addentries = {
+                        onload   => "javascript:resize_contentdiv('contentscroll');",
+                        onresize => "javascript:resize_contentdiv('contentscroll');",
+                      };
     }
 # -------------------------------------------------------------------- Body tag
     $script = '<script type="text/javascript">'."\n"
@@ -2788,119 +2977,69 @@ sub create_form_ul {
 
     # Breadcrumbs
     &Apache::lonhtmlcommon::clear_breadcrumbs();
-    if ($allowed) {
+    unless ($showdoc) {
         &Apache::lonhtmlcommon::add_breadcrumb({
-            href=>"/adm/coursedocs",text=>"$crstype Editor"});
+            href=>"/adm/coursedocs",text=>"$crstype Contents"});
 
-        $r->print(&Apache::loncommon::start_page("$crstype Editor", $script,
-                                                 {'force_register' => $showdoc,})
+        $r->print(&Apache::loncommon::start_page("$crstype Contents", $script,
+                                                 {'force_register' => $showdoc,
+                                                  'add_entries'    => $addentries,
+                                                 })
                  .&Apache::loncommon::help_open_menu('','',273,'RAT')
                  .&Apache::lonhtmlcommon::breadcrumbs(
                      'Editing the Table of Contents for your '.$crstype,
                      'Docs_Adding_Course_Doc')
         );
-    } elsif ($showdoc) {
+    } else {
         $r->print(&Apache::loncommon::start_page("$crstype documents",undef,
                                                 {'force_register' => $showdoc,}));
-    } else {
-        my $folder=$env{'form.folder'};
-        if ($folder eq '' || $folder eq 'supplemental') {
-            $env{'form.folderpath'} = 'supplemental&'.
-                                      &escape(&mt('Supplemental '.$crstype.' Documents'));
-        }
-        my ($breadcrumbtrail) = &breadcrumbs($allowed,$crstype);
-        $r->print(&Apache::loncommon::start_page("Supplemental documents").
-                  $breadcrumbtrail);
     }
 
   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($crstype).' document',
@@ -2910,7 +3049,7 @@ sub create_form_ul {
                 'upld' => 'Import Document',
                 'srch' => 'Search',
                 'impo' => 'Import',
-		'book' => 'Import Bookmarks',
+		'wish' => 'Import from Wishlist',
                 'selm' => 'Select Map',
                 'load' => 'Load Map',
                 'reco' => 'Recover Deleted Documents',
@@ -2918,11 +3057,11 @@ sub create_form_ul {
                 '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',
@@ -2961,7 +3100,7 @@ CHBO
 	$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 />
@@ -2969,12 +3108,7 @@ CHBO
 	$checkbox
 	</span>
 FUFORM
-    #$list .= Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});	
-    #$fileuploadform .= create_form_ul(create_list_elements(@fileuploada));
-    $fileuploadform .= create_form_ul(Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'}));
-	$fileuploadform .= (<<FUFORM);
-	</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">
@@ -2983,30 +3117,29 @@ 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/vbkm.png" alt="'.$lt{book}.'" onclick="javascript:groupopen(0,1,1);" />' => "<a class='LC_menubuttons_link' href='javascript:groupopen(0,1,1);'>$lt{'book'}</a>" },
+	{ '<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 .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma));
 	$simpleeditdefaultform .=(<<SEDFFORM);
 	<hr />
-	<p>
 	$lt{'copm'}<br />
 	<input type="text" size="40" name="importmap" /><br />
 	<span class="LC_nobreak"><input type="button"
 	onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"
 	value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />
 	$help{'Load_Map'}</span>
-	</p>
 	</form>
 SEDFFORM
 
-	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>
+      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(
@@ -3016,18 +3149,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 '.$crstype.' 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" />
@@ -3042,55 +3163,21 @@ ERFORM
  </form>
 HIDDENFORM
     }
-# --------------------------------------------------------- Main tab structure
- 
-    my $activeClass = 1;
-    my $active = '';
-    my %tabtitles = (
-                       main => {
-                                 Course => &mt('Main Course Documents'),
-                                 Community => &mt('Main Community Documents'),
-                               },
-                       supplemental => {
-                                 Course => &mt('Supplemental Course Documents'),        
-                                 Community => &mt('Supplemental Community Documents'),
-                               },
-                    );
+
+# Generate the tabs
+    &startContentScreen($r,($supplementalflag?'supdocs':'docs'));
+
+
+#
+
+    my $savefolderpath;
+
     if ($allowed) {
-        $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\');"><a href="#"><b>'.$tabtitles{'main'}{$crstype}.'</b></a></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\');"><a href="#"><b>'.$tabtitles{'supplemental'}{$crstype}.'</b></a></li>');
-        $r->print('</ul>');
-    } else {
-        $r->print('<br />');
-    }
-    $r->print('<div class="LC_Box" style="clear:both;margin:0;">'
-             .'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">');
-# --------------------------------------------------------- Standard documents
-       my $savefolderpath;
-       $active = 'style="display: none;"';
-       if($activeClass == 0){
-          $active = 'style="display: block;"';
-       }
-       if ($allowed) {
-       $r->print('<div class="LC_ContentBox" id="mainCourseDocuments" '.$active.'>');
        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($tabtitles{'main'}{$crstype});
+	   $env{'form.folderpath'}='default&'.&escape(&mt('Content'));
            $uploadtag = '<input type="hidden" name="folderpath" value="'.
 	       &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';
        }
@@ -3119,7 +3206,7 @@ HIDDENFORM
 
 	my $recoverform=(<<RFORM);
 	<form action="/adm/groupsort" method="post" name="recover">
-	<a class="LC_menubuttons_link" href="javascript:groupopen('$readfile',1,0)">$lt{'reco'}</a>
+	<a class="LC_menubuttons_link" href="javascript:groupopen('$readfile',1)">$lt{'reco'}</a>
 	</form>
 RFORM
 
@@ -3224,11 +3311,14 @@ 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">
@@ -3275,80 +3365,79 @@ 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/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform},
-	); 
-	
-      }
-	push @specialdocumentsforma, ({'<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},
-	{'<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},
-	{'<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/chrt.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},);
+	{'<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));
+
+
+        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));
 
-	$specialdocumentsform = create_form_ul(create_list_elements(@specialdocumentsforma));
 
-if($env{'form.pagepath'}) {
-	
-	@specialdocumentsforma=(
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.&mt('Simple Problem').'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
-	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.&mt('Score Upload Form').'" onclick="javascript:makeexamupload();" />'=>$newexuploadform}
-	);
-	$specialdocumentsform= create_form_ul(create_list_elements(@specialdocumentsforma));
-}
 
 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,0)" />'=>$recoverform},
+	{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/recover.png" alt="'.$lt{reco}.'" onclick="javascript:groupopen(\''.$readfile.'\',1)" />'=>$recoverform},
 	);
 
-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;
 my %orderhash = (
-		'00' => ['Newfolder',$newfolderform],
                 'aa' => ['Import Documents',$fileuploadform],
                 'bb' => ['Published Resources',$simpleeditdefaultform],
-                'cc' => ['Special Documents',$specialdocumentsform],
-		'dd' => ['Tools', create_form_ul(create_list_elements(@tools)).&generate_admin_options($containertag,$uploadtag,\%help,\%env)],
+                'cc' => ['Grading Resources',$gradingform],
+		'ff' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)],
                 );
-my $tid='1';
+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,'',$crstype);
-       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($tid,\%orderhash));
+          &changewarning($r,'');
+          $r->print(&generate_edit_table('1',\%orderhash));
+        }
 
-$r->print('</div>');
 	}
-       if ($env{'form.pagepath'}) {
-       }
-# ----------------------------------------------------- Supplemental documents
-       $active = 'style="display: none;"';
-       if($activeClass == 1){
-          $active = 'style="display: block;"';
-       }
-       $r->print('<div class="LC_ContentBox" id="supplCourseDocuments" '.$active.'>');
+
+# Supplemental documents start here
+
        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 '.$crstype.' Documents'));
+          $env{'form.folderpath'} = &supplemental_base();
        } elsif ($allowed) {
 	  $env{'form.folderpath'} = $savefolderpath;
        }
@@ -3377,7 +3466,7 @@ $r->print('</div>');
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="cmd" value="upload_supplemental" />
 SUPDOCFORM
-	$supupdocform .=  create_form_ul(Apache::lonhtmlcommon::htmltag('li',$supupdocformbtn,{class => 'LC_menubuttons_inline_text'}))."</form>";
+	$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">
@@ -3432,30 +3521,27 @@ 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;
+$supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr/>' . $supupdocform;
 my %suporderhash = (
 		'00' => ['Supnewfolder', $supnewfolderform],
                 'ee' => ['Import Documents',$supupdocform],
-                'ff' => ['Special Documents',create_form_ul(create_list_elements(@specialdocs))]
+                'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))]
                 );
-
-        my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
-        if ($error) {
-            $r->print('<p><span class="LC_error">'.$error.'</span></p>');
+        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));
         }
-        my $tid='2';
-        $r->print(&generate_edit_table($tid,\%suporderhash));
-    } else {
+    } elsif ($supplementalflag) {
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype);
         if ($error) {
             $r->print('<p><span class="LC_error">'.$error.'</span></p>');
         }
     }
 
-
-$r->print('</div>');
-$r->print('</div></div>');
-
+    &endContentScreen($r);
 
     if ($allowed) {
 	$r->print('
@@ -3467,7 +3553,7 @@ $r->print('</div></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>'.
@@ -3480,9 +3566,45 @@ $r->print('</div></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',
@@ -3503,14 +3625,14 @@ sub generate_admin_options {
   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}.'" class="LC_menubuttons_link" href=\'javascript:injectData(document.courseverify, "dummy", "exportcourse", "'.&mt('IMS Export').'")\' />'
+  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/log.png" alt="'.$lt{sl}.'"  onclick=\'javascript:injectData(document.courseverify, "dummy", "docslog", "'.$lt{'sl'}.'")\'  />'
+	{'<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>';
+  return '<form action="/adm/coursedocs" method="post" name="courseverify"><input type="hidden" id="dummy" />'.&create_form_ul(&create_list_elements(@list)).'</form>';
 
 }
 
@@ -3534,7 +3656,9 @@ sub generate_edit_table {
             }elsif($activetab eq $name){
                $active = 'class="active"';
             }
-            $form .= '<li '.$active.' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></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>';
 
@@ -3567,7 +3691,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',
@@ -3586,6 +3710,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"}');
@@ -3814,6 +3950,41 @@ function showPage(current, pageId, nav,
 	current.className = 'active';
 	currentData = document.getElementById(pageId);
 	currentData.style.display = 'block';
+        resize_contentdiv('contentscroll');
+        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;
 }
 
@@ -3826,6 +3997,74 @@ function injectData(current, hiddenField
 
 ENDNEWSCRIPT
 }
+
+sub resize_contentdiv_js {
+    my $viewport_js = &Apache::loncommon::viewport_geometry_js();
+    return <<ENDRESIZESCRIPT;
+
+$viewport_js
+
+function resize_contentdiv(scrollboxid) {
+    if (document.getElementById("contenteditor") == null) {
+        return;
+    }
+    init_geometry();
+    var vph = Geometry.getViewportHeight();
+
+    var primaryheight = document.getElementById("LC_nav_bar").offsetHeight;
+    var secondaryheight = document.getElementById("LC_secondary_menu").offsetHeight;
+    var crumbsheight = document.getElementById("LC_breadcrumbs").offsetHeight;
+    var dccidheight = document.getElementById("dccid").offsetHeight;
+
+    var uploadresultheight = 0;
+    if (document.getElementById("uploadfileresult") != null) {
+        uploadresultheight = document.getElementById("uploadfileresult").offsetHeight;
+    }
+    var tabbedheight = document.getElementById("tabbededitor").offsetHeight;
+    var contenteditorheight = document.getElementById("contenteditor").offsetHeight;
+    if (document.getElementById(scrollboxid) != null) {
+        var scrollbox =  document.getElementById(scrollboxid);
+        var scrollboxheight = scrollbox.offsetHeight;
+        var scrollboxscrollheight = scrollbox.scrollHeight;
+
+        var freespace = vph-(primaryheight+secondaryheight+crumbsheight+dccidheight+uploadresultheight+tabbedheight+contenteditorheight);
+
+        var minscrollbox = 60;
+        var offset = 20;
+        var newscrollboxheight;
+        if (freespace < 0) {
+            newscrollboxheight = scrollboxheight+freespace-offset;
+            if (newscrollboxheight < minscrollbox) {
+                newscrollboxheight = minscrollbox;
+            }
+            scrollbox.style.height = newscrollboxheight + "px";
+        } else {
+            if (scrollboxscrollheight > scrollboxheight) {
+                if (freespace > offset) {
+                    newscrollboxheight = scrollboxheight+freespace-offset;
+                    if (newscrollboxheight < minscrollbox) {
+                        newscrollboxheight = minscrollbox;
+                    }
+                    scrollbox.style.height = newscrollboxheight+"px";
+                }
+            }
+        }
+        scrollboxheight = scrollbox.offsetHeight;
+
+        if (scrollboxscrollheight <= scrollboxheight) {
+            var contentlistheight = document.getElementById("contentlist").offsetHeight;
+            if ((contentlistheight+offset)<scrollboxheight) {
+                newscrollheight = contentlistheight;
+                scrollbox.style.height = newscrollheight+"px";
+            }
+        }
+    }
+}
+
+ENDRESIZESCRIPT
+    return;
+}
+
 1;
 __END__