--- loncom/interface/londocs.pm	2012/12/13 00:51:34	1.484.2.12
+++ loncom/interface/londocs.pm	2012/10/31 04:59:11	1.499
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Documents
 #
-# $Id: londocs.pm,v 1.484.2.12 2012/12/13 00:51:34 raeburn Exp $
+# $Id: londocs.pm,v 1.499 2012/10/31 04:59:11 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -537,7 +537,7 @@ sub docs_change_log {
                                   ':'.$docslog{$id}{'exe_udom'}.'</tt>'.
                   $send_msg_link.'</td><td>'.
                   $docslog{$id}{'logentry'}{'folder'}.'</td><td>');
-        my $is_supp = 0;
+        my $is_supp = 0; 
         if ($docslog{$id}{'logentry'}{'currentfolder'} =~ /^supplemental/) {
             $is_supp = 1;
         }
@@ -560,7 +560,7 @@ sub docs_change_log {
                 if ($is_supp) {
                     $shown = &Apache::loncommon::parse_supplemental_title($shown);
                 }
-                $r->print('<li>'.$shown.'</li>');
+		$r->print('<li>'.$shown.'</li>');
 	    }
 	}
 	$r->print('</ul>');
@@ -711,7 +711,7 @@ sub print_paste_buffer {
         $canpaste = &supp_pasteable($env{'docs.markedcopy_url'});
         unless ($canpaste) {
             $nopaste = &mt('Paste into Supplemental Content unavailable for this type of content.');
-        }
+        } 
     } else {
         $canpaste = 1;
     }
@@ -725,11 +725,11 @@ sub print_paste_buffer {
                 $othercourse = 1;
                 if ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) {
                     if ($canpaste) {
-                        $othercrs = '<br />'.&mt('(from another course).');
+                        $othercrs = '<br />'.&mt('(from another course).');  
                     }
                 } else {
                     $canpaste = 0;
-                    $nopaste = &mt('Paste from another course unavailable.')
+                    $nopaste = &mt('Paste from another course unavailable.') 
                 }
             }
             if ($rem =~ m{^(default|supplemental)_?(\d*)\.(?:page|sequence)$}) {
@@ -747,18 +747,18 @@ sub print_paste_buffer {
              .'<legend>'.&mt('Clipboard').'</legend>');
     my ($type,$buffer);
     if ($is_external) {
-	$type = &mt('External Resource');
-	$buffer = $type.': '.
-		  &LONCAPA::map::qtescape($env{'docs.markedcopy_title'}).' ('.
+        $type = &mt('External Resource');
+        $buffer = $type.': '.
+                  &LONCAPA::map::qtescape($env{'docs.markedcopy_title'}).' ('.
                   &LONCAPA::map::qtescape($env{'docs.markedcopy_url'}).')';
     }  else {
-	my $icon = &Apache::loncommon::icon($extension);
-	if ($extension eq 'sequence' &&
-	    $env{'docs.markedcopy_url'} =~ m{/default_\d+\.sequence$ }x) {
-	    $icon = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));
-	    $icon .= '/navmap.folder.closed.gif';
-	}
-	$icon = '<img src="'.$icon.'" alt="" class="LC_icon" />';
+        my $icon = &Apache::loncommon::icon($extension);
+        if ($extension eq 'sequence' &&
+            $env{'docs.markedcopy_url'} =~ m{/default_\d+\.sequence$ }x) {
+            $icon = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));
+            $icon .= '/navmap.folder.closed.gif';
+        }
+        $icon = '<img src="'.$icon.'" alt="" class="LC_icon" />';
         $buffer = $icon.$type.': '.  &Apache::loncommon::parse_supplemental_title(&LONCAPA::map::qtescape($env{'docs.markedcopy_title'}));
     }
     if ($canpaste) {
@@ -772,7 +772,7 @@ sub print_paste_buffer {
                           '<label>'.
                           '<input type="radio" name="docs.markedcopy_options" value="new" checked="checked" />'.
                           &mt('Copy to new folder').'</label>'.('&nbsp;' x2).
-                          '<label>'.
+                          '<label>'.   
                           '<input type="radio" name="docs.markedcopy_options" value="move" />'.
                           &mt('Move old folder').'</label><br />');
                 if ($env{'docs.markedcopy_nested'}) {
@@ -784,7 +784,7 @@ sub print_paste_buffer {
                     my %depths = (
                                    $lastdir => 0,
                                  );
-                    my (%display,%deps);
+                    my (%display,%deps); 
                     for (my $i=0; $i<@pastemaps; $i++) {
                         ($lastdir,my $subfolderstr) = split(/\:/,$pastemaps[$i]);
                         my ($namedir,$esctitlestr) = split(/\:/,$titles[$i]);
@@ -796,7 +796,7 @@ sub print_paste_buffer {
                         my $indent = ('&nbsp;' x $offset);
                         for (my $j=0; $j<@subfolders; $j++) {
                             $depths{$subfolders[$j]} = $depth;
-                            $display{$subfolders[$j]} =
+                            $display{$subfolders[$j]} = 
                                   '<tr><td>'.$indent.$subfoldertitles[$j].'&nbsp;</td>'.
                                   '<td><label>'.
                                   '<input type="radio" name="docs.markedcopy_'.$subfolders[$j].'" value="new" checked="checked" />'.&mt('Copy to new').'</label>'.('&nbsp;' x2).
@@ -814,12 +814,12 @@ sub print_paste_buffer {
         }
         $r->print('<br /><input type="submit" name="pastemarked" value="'.&mt('Paste').'" />'.$othercrs);
         if ($container eq 'page') {
-	    $r->print('
-	<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />
-	<input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />
+            $r->print('
+        <input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />
+        <input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />
 ');
         } else {
-	    $r->print('
+            $r->print('
         <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />
 ');
         }
@@ -901,22 +901,22 @@ sub do_paste_from_buffer {
 
     my ($is_map,$srcdom,$srcnum,$prefixchg,%before,%after,%mapchanges,%tomove);
     if ($url=~/\.(page|sequence)$/) {
-        $is_map = 1;
+        $is_map = 1; 
     }
     if ($url =~ m{^/uploaded/($match_domain)/($match_courseid)/([^/]+)}) {
         $srcdom = $1;
         $srcnum = $2;
         my $oldprefix = $3;
 # When paste buffer was populated using an active role in a different course
-# check for mdc privilege in the course from which the resource was pasted
+# check for mdc privilege in the course from which the resource was pasted 
         if (($srcdom ne $coursedom) || ($srcnum ne $coursenum)) {
             unless ($env{"user.priv.cm./$srcdom/$srcnum"} =~ /\Q:mdc&F\E/) {
                 return (&mt('Paste failed: Item is from a different course which you do not have rights to edit.'));
             }
         }
-# When pasting content from Main Content to Supplemental Content and vice versa
+# When pasting content from Main Content to Supplemental Content and vice versa 
 # URLs will contain different paths (which depend on whether pasted item is
-# a folder/page or a document.
+# a folder/page or a document.   
         if (($folder =~ /^supplemental/) && (($oldprefix =~ /^default/) || ($oldprefix eq 'docs'))) {
             $prefixchg = 1;
             %before = ( map => 'default',
@@ -960,7 +960,7 @@ sub do_paste_from_buffer {
         if ($folder =~ /^default/) {
             my $lastchange = &Apache::lonnet::get_coursechange($coursedom,$coursenum);
             if ($lastchange > $env{'request.course.tied'}) {
-                &reinit_role($coursedom,$coursenum,$env{"course.$env{'request.course.id'}.home"});
+                &reinit_role($coursedom,$coursenum,$env{"course.$env{'request.course.id'}.home"}); 
             }
         }
 # If pasting a map, check if map contains other maps
@@ -978,7 +978,7 @@ sub do_paste_from_buffer {
         if ($url=~ m{^/uploaded/}) {
             my $newurl;
             unless ($env{'form.docs.markedcopy_options'} eq 'move') {
-                ($newurl,my $error) =
+                ($newurl,my $error) = 
                     &get_newmap_url($url,$folder,$prefixchg,$coursedom,$coursenum,
                                     $srcdom,$srcnum,\$title,\%allmaps,\%newurls);
                 if ($error) {
@@ -1005,7 +1005,7 @@ sub do_paste_from_buffer {
             } elsif ($env{'docs.markedcopy_nested'}) {
                 &url_paste_fixups($url,$folder,$prefixchg,$coursedom,$coursenum,\%allmaps,\%rewrites,
                                   \%retitles,\%copies,\%dbcopies,\%zombies,\%params,\%mapmoves,
-                                  \%mapchanges,\%tomove,\%newsubdir,\%newurls);
+                                  \%mapchanges,\%tomove,\%newsubdir,\%newurls); 
             }
         } elsif ($url=~m {^/res/}) {
 # published maps can only exists once, so remove it from paste buffer when done
@@ -1019,21 +1019,21 @@ sub do_paste_from_buffer {
         }
     }
     if ($url=~ m{/smppg$}) {
-        my $db_name = &Apache::lonsimplepage::get_db_name($url);
-        if ($db_name =~ /^smppage_/) {
-            #simple pages, need to copy the db contents to a new one.
-            my %contents=&Apache::lonnet::dump($db_name,$coursedom,$coursenum);
-            my $now = time();
-            $db_name =~ s{_\d*$ }{_$now}x;
-            my $dbresult=&Apache::lonnet::put($db_name,\%contents,
-                                            $coursedom,$coursenum);
+	my $db_name = &Apache::lonsimplepage::get_db_name($url);
+	if ($db_name =~ /^smppage_/) {
+	    #simple pages, need to copy the db contents to a new one.
+	    my %contents=&Apache::lonnet::dump($db_name,$coursedom,$coursenum);
+	    my $now = time();
+	    $db_name =~ s{_\d*$ }{_$now}x;
+	    my $dbresult=&Apache::lonnet::put($db_name,\%contents,
+					    $coursedom,$coursenum);
             if ($dbresult eq 'ok') {
                 $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x;
                 $title=&mt('Copy of').' '.$title;
             } else {
                 return (&mt('Paste failed: An error occurred when copying the simple page.'));
             }
-        }
+	}
     }
     $title = &LONCAPA::map::qtunescape($title);
     my $ext='false';
@@ -1076,7 +1076,7 @@ sub do_paste_from_buffer {
             }
         }
     }
-# Apply any changes to maps, or copy dependencies for uploaded HTML pages
+# Apply any changes to maps, or copy dependencies for uploaded HTML pages 
     my ($result,$save_err);
     $result =
         &apply_fixups($folder,$is_map,$prefixchg,$coursedom,$coursenum,$oldurl,
@@ -1084,7 +1084,7 @@ sub do_paste_from_buffer {
                       \%copies,\%dbcopies,\%zombies,\%params,\%docmoves,
                       \%mapmoves,\%newsubdir,$errors,\%before,\%after);
     if ($result eq 'ok') {
-        if ($is_map) {
+        if ($is_map) { 
             my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
                                             $folder.'.'.$container);
             return $errtext if ($fatal);
@@ -1108,17 +1108,17 @@ sub do_paste_from_buffer {
                        $env{'user.domain'}.'___&&&___'.$title;
             }
         }
-        $LONCAPA::map::resources[$newidx]=      $title.':'.$url.':'.$ext.':normal:res';
+        $LONCAPA::map::resources[$newidx]= 	$title.':'.$url.':'.$ext.':normal:res';
         push(@LONCAPA::map::order, $newidx);
 
 # Store the result
-        my ($errtext,$fatal) =
+        my ($errtext,$fatal) = 
             &storemap($coursenum,$coursedom,$folder.'.'.$container,1);
         if ($fatal) {
             $save_err = $errtext;
         }
     }
-
+   
     if ($env{'form.docs.markedcopy_options'} eq 'move') {
         &Apache::lonnet::delenv('docs.markedcopy');
         &Apache::lonnet::delenv('docs.markedcopy_nested');
@@ -1242,7 +1242,7 @@ sub contained_map_check {
                         $titles->{$url}{$token->[2]->{'id'}} = $token->[2]->{'title'};
                     } else {
                         if ($allmaps->{$ressrc}) {
-                            $removefrommap->{$url}{$token->[2]->{'id'}} = $ressrc;
+                            $removefrommap->{$url}{$token->[2]->{'id'}} = $ressrc; 
                         } elsif (ref($addedmaps->{$ressrc}) eq 'ARRAY') {
                             $removefrommap->{$url}{$token->[2]->{'id'}} = $ressrc;
                         } else {
@@ -1257,7 +1257,7 @@ sub contained_map_check {
                     if (ref($removeparam->{$url}{$token->[2]->{'to'}}) eq 'ARRAY') {
                         push(@{$removeparam->{$url}{$token->[2]->{'to'}}},$token->[2]->{'name'});
                     } else {
-                        $removeparam->{$url}{$token->[2]->{'to'}} = [$token->[2]->{'name'}];
+                        $removeparam->{$url}{$token->[2]->{'to'}} = [$token->[2]->{'name'}]; 
                     }
                 }
             }
@@ -1309,7 +1309,7 @@ sub url_paste_fixups {
             }
             next if ($token->[2]->{'type'} eq 'external');
             if ($token->[2]->{'type'} eq 'zombie') {
-                next if ($skip);
+                next if ($skip);  
                 $zombies->{$oldurl}{$ressrc} = $id;
                 $changed = 1;
             } elsif ($ressrc =~ m{^/uploaded/($match_domain)/($match_courseid)/(.+)$}) {
@@ -1341,7 +1341,7 @@ sub url_paste_fixups {
                 }
                 if (($srcdom ne $cdom) || ($srcnum ne $cnum) || ($prefixchg) ||
                     ($mapchanges->{$oldurl}) || (($newurl ne '') && ($newurl ne $oldurl))) {
-
+                   
                     if ($rem =~ /^(default|supplemental)(_?\d*).(sequence|page)$/) {
                         $rewrites->{$oldurl}{$ressrc} = $id;
                         $mapchanges->{$ressrc} = 1;
@@ -1359,7 +1359,7 @@ sub url_paste_fixups {
                     }
                 }
             } elsif ($ressrc =~ m{^/adm/($match_domain)/($match_courseid)/(.+)$}) {
-                next if ($skip);
+                next if ($skip);  
                 my $srcdom = $1;
                 my $srcnum = $2;
                 if (($srcdom ne $cdom) || ($srcnum ne $cnum)) {
@@ -1379,7 +1379,7 @@ sub url_paste_fixups {
             }
         } elsif ($token->[1] eq 'param') {
             next if ($skip);
-            my $to = $token->[2]->{'to'};
+            my $to = $token->[2]->{'to'}; 
             if ($to ne '') {
                 if (ref($params->{$oldurl}{$to}) eq 'ARRAY') {
                     push(@{$params->{$oldurl}{$to}},$token->[2]->{'name'});
@@ -1417,7 +1417,7 @@ sub apply_fixups {
         }
         if (@allcopies > 0) {
             foreach my $item (@allcopies) {
-                my ($relpath,$oldsubdir,$fname) =
+                my ($relpath,$oldsubdir,$fname) = 
                     ($item =~ m{^(/uploaded/$match_domain/$match_courseid/(?:docs|supplemental)/(default|\d+)/.*/)([^/]+)$});
                 if ($fname ne '') {
                     my $content = &Apache::lonnet::getfile($item);
@@ -1436,7 +1436,7 @@ sub apply_fixups {
                             }
                         }
                         &copy_dependencies($item,$storefn,$relpath,$errors,\$content);
-                        my $copyurl =
+                        my $copyurl = 
                             &Apache::lonclonecourse::writefile($env{'request.course.id'},
                                                                $storefn.$fname,$content);
                         if ($copyurl eq '/adm/notfound.html') {
@@ -1582,7 +1582,7 @@ sub apply_fixups {
             }
             foreach my $idx (keys(%remparam)) {
                 if (ref($remparam{$idx}) eq 'ARRAY') {
-                    foreach my $name (@{$remparam{$idx}}) {
+                    foreach my $name (@{$remparam{$idx}}) {   
                         &LONCAPA::map::delparameter($idx,'parameter_'.$name);
                     }
                 }
@@ -1743,7 +1743,7 @@ sub handle_edit_cmd {
 
 sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype,
-        $supplementalflag,$orderhash,$iconpath,$uploadtag)=@_;
+        $supplementalflag,$orderhash,$iconpath)=@_;
     my $container= ($env{'form.pagepath'}) ? 'page'
 		                           : 'sequence';
 
@@ -1795,7 +1795,7 @@ sub editor {
                 &do_paste_from_buffer($coursenum,$coursedom,$folder,$container,
                                       \%paste_errors);
                 if ($save_error ne '') {
-                    return $save_error;
+                    return $save_error; 
                 }
             if ($paste_res ne 'ok') {
                 $r->print('<p><span class="LC_error">'.$paste_res.'</span></p>');
@@ -1899,8 +1899,7 @@ sub editor {
         unless ($name) {  $name=(split(/\//,$url))[-1]; }
         unless ($name) { $idx++; next; }
         $output .= &entryline($idx,$name,$url,$folder,$allowed,$res,
-                              $coursenum,$coursedom,$crstype,
-                              $uploadtag,$supplementalflag);
+                              $coursenum,$crstype);
         $idx++;
         $shown++;
     }
@@ -2117,8 +2116,7 @@ sub is_supplemental_title {
 # --------------------------------------------------------------- An entry line
 
 sub entryline {
-    my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$coursedom,
-        $crstype,$uploadtag,$supplementalflag)=@_;
+    my ($index,$title,$url,$folder,$allowed,$residx,$coursenum,$crstype)=@_;
     my ($foldertitle,$pagetitle,$renametitle);
     if (&is_supplemental_title($title)) {
 	($title,$foldertitle,$renametitle) = &Apache::loncommon::parse_supplemental_title($title);
@@ -2132,6 +2130,7 @@ sub entryline {
 
     my $orderidx=$LONCAPA::map::order[$index];
 
+
     $renametitle=~s/\\/\\\\/g;
     $renametitle=~s/\&quot\;/\\\"/g;
     $renametitle=~s/ /%20/g;
@@ -2150,18 +2149,8 @@ sub entryline {
         $type = $container = 'page';
         $esc_path=&escape($env{'form.pagepath'});
 	$path = &HTML::Entities::encode($env{'form.pagepath'},'<>&"');
+        $symb=&escape($env{'form.pagesymb'});
     }
-    if (!$supplementalflag && $residx) {
-        my $currurl = $url;
-        $currurl =~ s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/};
-        my $path = 'uploaded/'.
-                   $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'.
-                   $env{'course.'.$env{'request.course.id'}.'.num'}.'/';
-        $symb = &Apache::lonnet::encode_symb($path.$folder.".$container",
-                                             $residx,
-                                             &Apache::lonnet::declutter($currurl));
-    }
-    my %lt;
     if ($allowed) {
 	my $incindex=$index+1;
 	my $selectbox='';
@@ -2184,27 +2173,20 @@ sub entryline {
 	    }
 	    $selectbox.='</select>';
 	}
-	%lt=&Apache::lonlocal::texthash(
+	my %lt=&Apache::lonlocal::texthash(
                 'up' => 'Move Up',
 		'dw' => 'Move Down',
 		'rm' => 'Remove',
                 'ct' => 'Cut',
 		'rn' => 'Rename',
-		'cp' => 'Copy',
-                'ex' => 'External Resource',
-                'ed' => 'Edit',
-                'pr' => 'Preview',
-                'sv' => 'Save',
-                'ul' => 'URL',
-                'ti' => 'Title', 
-                );
+		'cp' => 'Copy');
 	my $nocopy=0;
         my $nocut=0;
         my $noremove=0;
         if ($url=~ m{^/res/.+\.(page|sequence)$}) {
-            # no copy for published maps
-            $nocopy=1;
-        }
+	    # no copy for published maps
+	    $nocopy=1;
+	}
         if ($url=~/^\/res\/lib\/templates\//) {
            $nocopy=1;
            $nocut=1;
@@ -2303,12 +2285,12 @@ END
 <td>
 <div class="LC_docs_entry_move">
   <a href='/adm/coursedocs?cmd=up_$index&amp;${type}path=$esc_path&amp;${type}symb=$symb'>
-    <img src="${iconpath}move_up.gif" alt="$lt{'up'}" class="LC_icon" />
+    <img src="${iconpath}move_up.gif" alt='$lt{'up'}' class="LC_icon" />
   </a>
 </div>
 <div class="LC_docs_entry_move">
   <a href='/adm/coursedocs?cmd=down_$index&amp;${type}path=$esc_path&amp;${type}symb=$symb'>
-    <img src="${iconpath}move_down.gif" alt="$lt{'dw'}" class="LC_icon" />
+    <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' class="LC_icon" />
   </a>
 </div>
 </td>
@@ -2359,38 +2341,44 @@ END
 	}
     }
 
-    my $editlink;
     my $orig_url = $url;
     $orig_url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};
     my $external = ($url=~s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/});
-    if (!$supplementalflag && $residx && $symb) {
-        if ($container eq 'page') {
-            $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
-            $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
-        } 
-        if ((!$isfolder) && (!$ispage)) {
-	    (undef,undef,$url)=&Apache::lonnet::decode_symb($symb);
-	    $url=&Apache::lonnet::clutter($url);
-	    if ($url=~/^\/*uploaded\//) {
-	        $url=~/\.(\w+)$/;
-	        my $embstyle=&Apache::loncommon::fileembstyle($1);
-	        if (($embstyle eq 'img') || ($embstyle eq 'emb')) {
-		    $url='/adm/wrapper'.$url;
-	        } elsif ($embstyle eq 'ssi') {
-		    #do nothing with these
-	        } elsif ($url!~/\.(sequence|page)$/) {
-		    $url='/adm/coursedocs/showdoc'.$url;
-	        }
-	    } elsif ($url=~m|^/ext/|) {
-	        $url='/adm/wrapper'.$url;
-	        $external = 1;
- 	    }
-            if (&Apache::lonnet::symbverify($symb,$url)) {
-                $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
-            } else {
-                $url='';
-            }
+    if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) {
+	my $symb=&Apache::lonnet::symbclean(
+          &Apache::lonnet::declutter('uploaded/'.
+           $env{'course.'.$env{'request.course.id'}.'.domain'}.'/'.
+           $env{'course.'.$env{'request.course.id'}.'.num'}.'/'.$folder.
+           '.sequence').
+           '___'.$residx.'___'.
+	   &Apache::lonnet::declutter($url));
+	(undef,undef,$url)=&Apache::lonnet::decode_symb($symb);
+	$url=&Apache::lonnet::clutter($url);
+	if ($url=~/^\/*uploaded\//) {
+	    $url=~/\.(\w+)$/;
+	    my $embstyle=&Apache::loncommon::fileembstyle($1);
+	    if (($embstyle eq 'img') || ($embstyle eq 'emb')) {
+		$url='/adm/wrapper'.$url;
+	    } elsif ($embstyle eq 'ssi') {
+		#do nothing with these
+	    } elsif ($url!~/\.(sequence|page)$/) {
+		$url='/adm/coursedocs/showdoc'.$url;
+	    }
+	} elsif ($url=~m|^/ext/|) {
+	    $url='/adm/wrapper'.$url;
+	    $external = 1;
+	}
+        if (&Apache::lonnet::symbverify($symb,$url)) {
+	    $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
+        } else {
+            $url='';
         }
+	if ($container eq 'page') {
+	    my $symb=$env{'form.pagesymb'};
+
+	    $url=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($symb))[2]);
+	    $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
+	}
     }
     my ($rand_pick_text,$rand_order_text);
     if ($isfolder || $extension eq 'sequence') {
@@ -2436,50 +2424,23 @@ $form_common.'
         my $folderpath=$env{'form.folderpath'};
         if ($folderpath) { $pagepath = $folderpath.'&' };
         $pagepath.=$pagearg.'&'.$pagename;
+	my $symb=$env{'form.pagesymb'};
+	if (!$symb) {
+	    my $path='uploaded/'.
+		$env{'course.'.$env{'request.course.id'}.'.domain'}.'/'.
+		$env{'course.'.$env{'request.course.id'}.'.num'}.'/';
+	    $symb=&Apache::lonnet::encode_symb($path.$folder.'.sequence',
+					       $residx,
+					       $path.$pagearg.'.page');
+	}
 	$url.='pagepath='.&escape($pagepath).
 	    '&amp;pagesymb='.&escape($symb);
     }
-    if ($allowed) {
-        my $fileloc =
-            &Apache::lonnet::declutter(&Apache::lonnet::filelocation('',$orig_url));
-
-        if ($external) {
-            $editlink = <<"EXTLNK";
-            &nbsp;
-            <a class="LC_docs_ext_edit" href="javascript:editext('$residx');">
-            $lt{'ed'}</a>
-            <form action="/adm/coursedocs" method="post" name="editext_$residx">
-            <fieldset id="uploadext$residx" style="display: none;" />
-            <input type="hidden" name="active" value="aa" />
-            <span class="LC_nobreak">
-            <span class="LC_docs_ext_edit">$lt{'ul'}&nbsp;</span>
-            <input type="text" size="40" name="exturl" id="exturl_$residx" value="$orig_url" />&nbsp;
-            <a class="LC_docs_ext_edit" href="javascript:extUrlPreview('exturl_$residx');">$lt{'pr'}</a></span>
-            </span><br />
-            <span class="LC_nobreak">
-            <span class="LC_docs_ext_edit">$lt{'ti'}&nbsp;</span>
-            <input type="text" size="40" name="exttitle" value="$title" />
-            $uploadtag
-            <input type="hidden" name="importdetail" value="" />
-            <input type="button" value="$lt{'sv'}" onclick="javascript:setExternal(this.form,'$residx')" />
-            </span>
-            </fieldset>
-            </form>
-EXTLNK
-        } else {
-            my ($cfile,$home,$switchserver,$uploaded) =
-                &Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom);
-            if (($cfile ne '') && ($symb ne '')) {
-                my $jscall =
-                    &Apache::lonhtmlcommon::jump_to_editres($cfile,$home,
-                                                            $switchserver,
-                                                            $uploaded,$symb);
-                if ($jscall) {
-                    $editlink = '&nbsp;<a class="LC_docs_ext_edit" href="javascript:'.
-                                $jscall.'" >'.&mt('Edit').'</a>';
-                }
-            }
-        }
+    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') {
@@ -2505,7 +2466,7 @@ EXTLNK
     } else {
        $line.=$title.' <span class="LC_docs_reinit_warn">'.$reinit.'</span>';
     }
-    $line.=$editlink."</td>";
+    $line.=$external."</td>";
     $rand_pick_text = '&nbsp;' if ($rand_pick_text eq '');
     $rand_order_text = '&nbsp;' if ($rand_order_text eq '');
     if (($allowed) && ($folder!~/^supplemental/)) {
@@ -2902,7 +2863,7 @@ ENDHEADERS
     '</b>');
     foreach my $key (sort(keys(%changes))) {
         #excludes not versionable problems from resource version history:
-        next unless ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/);
+        if ($changes{$key}>$starttime && $key !~ /^\/res\/lib\/templates/) {
 	    my ($root,$extension)=($key=~/^(.*)\.(\w+)$/);
 	    my $currentversion=&Apache::lonnet::getversion($key);
 	    if ($currentversion<0) {
@@ -3068,9 +3029,9 @@ sub init_breadcrumbs {
 sub create_list_elements {
    my @formarr = @_;
    my $list = '';
-   foreach my $button (@formarr){
-        foreach my $picture (keys(%{$button})) {
-            $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text', id => ''});
+   for my $button (@formarr){
+        for my $picture(keys %$button) {
+            $list .= &Apache::lonhtmlcommon::htmltag('li', $picture.' '.$button->{$picture}, {class => 'LC_menubuttons_inline_text'});
         }
    }
    return $list;
@@ -3093,6 +3054,7 @@ sub startContentScreen {
     if (($mode eq 'navmaps') || ($mode eq 'supplemental')) {
         $output .= '<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>'."\n";
         $output .= '<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>'."\n";
+        $output .= '<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>'."\n";
         $output .= '<li '.(($mode eq 'suppdocs')?' class="active"':'').'><a href="/adm/supplemental"><b>'.&mt('Supplemental Content').'</b></a></li>';
     } else {
         $output .= '<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>'."\n";
@@ -3139,8 +3101,7 @@ sub handler {
 	               'Adding_External_Resource','Navigate_Content',
 	               'Adding_Folders','Docs_Overview', 'Load_Map',
 	               'Supplemental','Score_Upload_Form','Adding_Pages',
-                       'Importing_LON-CAPA_Resource','Importing_IMS_Course',
-                       'Uploading_From_Harddrive',
+	               'Importing_LON-CAPA_Resource','Uploading_From_Harddrive',
 	               'Check_Resource_Versions','Verify_Content') {
 	$help{$topic}=&Apache::loncommon::help_open_topic('Docs_'.$topic);
     }
@@ -3432,10 +3393,8 @@ sub handler {
                           };
         }
         if ($env{'docs.markedcopy_url'}) {
-            $script .= &paste_popup_js();
+            $script .= &paste_popup_js(); 
         }
-        my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
-                             &mt('Switch server?');
     }
 # -------------------------------------------------------------------- Body tag
     $script = '<script type="text/javascript">'."\n"
@@ -3528,11 +3487,10 @@ sub handler {
                 'upls' => 'Upload a new supplemental '.lc($crstype).' document',
                 'impp' => 'Import a document',
 		'copm' => 'All documents out of a published map into this folder',
-                'upfi' => 'Upload File',
-                'upld' => 'Import Content',
+                'upld' => 'Import Document',
                 'srch' => 'Search',
                 'impo' => 'Import',
-                'lnks' => 'Import from Stored Links',
+		'lnks' => 'Import from Stored Links',
                 'selm' => 'Select Map',
                 'load' => 'Load Map',
                 'reco' => 'Recover Deleted Documents',
@@ -3552,14 +3510,9 @@ sub handler {
 				'abou' => 'Personal Information Page for a User',
                 'imsf' => 'IMS Import',
                 'imsl' => 'Import IMS package',
-                'cms'  => 'Origin of IMS package',
                 'file' =>  'File',
-                'se'   => 'Select',
                 'title' => 'Title',
                 'comment' => 'Comment',
-                'url'  => 'URL',
-                'prev' => 'Preview',
-                'lnk'  => 'Add Link',
                 'parse' => 'Upload embedded images/multimedia files if HTML file',
 		'nd' => 'Upload Document',
 		'pm' => 'Published Map',
@@ -3580,41 +3533,10 @@ FIUP
 	<input type="checkbox" name="parserflag" checked="checked" /> $lt{'parse'}
 	</label>
 CHBO
-        my $imsfolder = $env{'form.folder'};
-        if ($imsfolder eq '') {
-            $imsfolder = 'default';
-        }
-        my $imspform=(<<IMSFORM);
-        <a class="LC_menubuttons_link" href="javascript:toggleUpload('ims');">
-        $lt{'imsf'}</a> $help{'Importing_IMS_Course'}
-        <form name="uploadims" action="/adm/imsimportdocs" method="post" enctype="multipart/form-data" target="IMSimport">
-        <fieldset id="uploadimsform" style="display: none;" />
-        <legend>$lt{'imsf'}</legend>
-        $fileupload
-        <br />
-        <p>
-        $lt{'cms'}:&nbsp;
-        <select name="source">
-        <option value="-1" selected="selected">$lt{'se'}</option>
-        <option value="bb5">Blackboard 5</option>
-        <option value="bb6">Blackboard 6</option>
-        <option value="angel5">ANGEL 5.5</option>
-        <option value="webctce4">WebCT 4 Campus Edition</option>
-        </select>
-        <input type="hidden" name="folder" value="$imsfolder" />
-        </p>
-        <input type="hidden" name="phase" value="one" />
-        <input type="button" value="$lt{'imsl'}" onclick="makeims(this.form);" />
-        </fieldset>
-        </form>
-IMSFORM
-
-        my $fileuploadform=(<<FUFORM);
-        <a class="LC_menubuttons_link" href="javascript:toggleUpload('doc');">
-        $lt{'upfi'}</a> $help{'Uploading_From_Harddrive'}
-        <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">
-        <fieldset id="uploaddocform" style="display: none;" />
-        <legend>$lt{'upfi'}</legend>
+
+    my $fileuploada = "<br clear='all' /><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 />
@@ -3626,11 +3548,8 @@ IMSFORM
 	<span class="LC_nobreak" style="float:left">
 	$checkbox
 	</span>
-        <br clear="all" />
-        <input type="submit" value="$lt{'upld'}" />
-        </fieldset>
-        </form>
 FUFORM
+    $fileuploadform .= $fileuploada.'</form>';
 
 	my $simpleeditdefaultform=(<<SEDFFORM);
 	<form action="/adm/coursedocs" method="post" name="simpleeditdefault">
@@ -3639,7 +3558,7 @@ 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{lnks}.'" onclick="javascript:open_StoredLinks_Import();" />' => "<a class='LC_menubuttons_link' href='javascript:open_StoredLinks_Import();'>$lt{'lnks'}</a>" },
+	{ '<img class="LC_noBorder LC_middle" src="/res/adm/pages/wishlist.png" alt="'.$lt{lnks}.'" onclick="javascript:open_StoredLinks_Import();" />' => "<a class='LC_menubuttons_link' href='javascript:open_StoredLinks_Import();'>$lt{'lnks'}</a>" },
 	);
 	$simpleeditdefaultform .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma));
 	$simpleeditdefaultform .=(<<SEDFFORM);
@@ -3654,21 +3573,10 @@ SEDFFORM
 SEDFFORM
 
       my $extresourcesform=(<<ERFORM);
-      <a class="LC_menubuttons_link" href="javascript:toggleUpload('ext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}
       <form action="/adm/coursedocs" method="post" name="newext">
-      <fieldset id="uploadextform" style="display: none;" />
-      <legend>$lt{'extr'}</legend>
-      <input type="hidden" name="active" value="aa" />
-      $lt{'url'}:<br />
-      <input type="text" size="60" name="exturl" id="exturl" value="http://" />
-      <input type="button" name="view" value="$lt{'prev'}" onclick="javascript:extUrlPreview('exturl');" /><br />
-      $lt{'title'}:<br />
-      <input type="text" size="60" name="exttitle" value="$lt{'extr'}" />
       $uploadtag
-      <br />
       <input type="hidden" name="importdetail" value="" />
-      <input type="button" value="$lt{'lnk'}" onclick="javascript:setExternal(this.form,0)" />
-      </fieldset>
+      <a class="LC_menubuttons_link" href="javascript:makenewext('newext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}
       </form>
 ERFORM
 
@@ -3737,6 +3645,13 @@ HIDDENFORM
 	}
 	my $readfile='/uploaded/'.$coursedom.'/'.$coursenum.'/'.$folder.'.'.$container;
 
+	my $imspform=(<<IMSPFORM);
+	<form action="/adm/imsimportdocs" method="post" name="ims">
+	<input type="hidden" name="folder" value="$folder" />
+	<a class="LC_menubuttons_link" href="javascript:makeims();">$lt{'imsf'}</a>
+	</form>
+IMSPFORM
+
 	my $newnavform=(<<NNFORM);
 	<form action="/adm/coursedocs" method="post" name="newnav">
 	<input type="hidden" name="active" value="cc" />
@@ -3891,13 +3806,10 @@ NGFFORM
         $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="toggleUpload(\'ext\');" />'=>$extresourcesform},
-        {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:toggleUpload(\'ims\');" />'=>$imspform},
-        {'<img class="LC_noBorder_LC_middle" src="/res/adm/pages/pdfupload.png" alt="'.$lt{upl}.'" onclick="javascript:toggleUpload(\'doc\');" />'=>$fileuploadform,
-        });
-        $fileuploadform =  &create_form_ul(&create_list_elements(@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 id="cc_hrule" style="width:0px;text-align:left;margin-left:0" />' . $fileuploadform;
 
         @gradingforma=(
         {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform},
@@ -3930,7 +3842,7 @@ unless ($env{'form.pagepath'}) {
  $hadchanges=0;
        unless (($supplementalflag || $toolsflag)) {
           my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
-                              $supplementalflag,\%orderhash,$iconpath,$uploadtag);
+                              $supplementalflag,\%orderhash,$iconpath);
           if ($error) {
              $r->print('<p><span class="LC_error">'.$error.'</span></p>');
           }
@@ -3962,12 +3874,9 @@ unless ($env{'form.pagepath'}) {
 
 	   my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"');
 
+	my $supupdocformbtn = "<input type='submit' value='".$lt{'upld'}."' />$help{'Uploading_From_Harddrive'}";
 	my $supupdocform=(<<SUPDOCFORM);
-        <a class="LC_menubuttons_link" href="javascript:toggleUpload('suppdoc');">
-        $lt{'upfi'}</a> $help{'Uploading_From_Harddrive'}
 	<form action="/adm/coursedocs" method="post" name="supuploaddocument" enctype="multipart/form-data">
-        <fieldset id="uploadsuppdocform" style="display: none;" />
-        <legend>$lt{'upfi'}</legend>
 	<input type="hidden" name="active" value="ee" />	
 	$fileupload
 	<br />
@@ -3981,8 +3890,8 @@ unless ($env{'form.pagepath'}) {
 	<br />
 	<input type="hidden" name="folderpath" value="$path" />
 	<input type="hidden" name="cmd" value="upload_supplemental" />
-        <input type='submit' value="$lt{'upld'}" />
-        </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">
@@ -3994,24 +3903,15 @@ unless ($env{'form.pagepath'}) {
 	</form>
 SNFFORM
 	
-        my $supextform=(<<ERFORM);
-        <a class="LC_menubuttons_link" href="javascript:toggleUpload('suppext');">$lt{'extr'}</a>$help{'Adding_External_Resource'}
-        <form action="/adm/coursedocs" method="post" name="newsuppext">
-        <fieldset id="uploadsuppextform" style="display: none;" />
-        <legend>$lt{'extr'}</legend>
-        <input type="hidden" name="active" value="ee" />
-        $lt{'url'}:<br />
-        <input type="text" size="60" name="exturl" id="exturl" value="http://" />
-        <input type="button" name="view" value="$lt{'prev'}" onclick="javascript:extUrlPreview('exturl');" /><br />
-        $lt{'title'}:<br />
-        <input type="text" size="60" name="exttitle" value="$lt{'extr'}" />
-        $uploadtag
-        <br />
-        <input type="hidden" name="importdetail" value="" />
-        <input type="button" value="$lt{'lnk'}" onclick="javascript:setExternal(this.form,0)" />
-        </fieldset>
-        </form>
-ERFORM
+
+	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="" />
+	<a class="LC_menubuttons_link" href="javascript:makenewext('supnewext');">$lt{'extr'}</a> $help{'Adding_External_Resource'}
+	</form>
+SNEFORM
 
 	my $supnewsylform=(<<SNSFORM);
 	<form action="/adm/coursedocs" method="post" name="supnewsyl">
@@ -4043,12 +3943,10 @@ my @specialdocs = (
             =>$supnewaboutmeform},
 		);
 my @supimportdoc = (
-		{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'supext\');" />'
-            =>$supextform},
-                {'<img class="LC_noBorder LC_middle" src="/res/adm/pages/pdfupload.png" alt="'.$lt{upl}.'" onclick="javascript:toggleUpload(\'suppdoc\');" />'
-            =>$supupdocform},
+		{'<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));
+$supupdocform =  &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr id="ee_hrule" style="width:0px;text-align:left;margin-left:0" />' . $supupdocform;
 my %suporderhash = (
 		'00' => ['Supnewfolder', $supnewfolderform],
                 'ee' => ['Import Content',$supupdocform],
@@ -4056,14 +3954,14 @@ my %suporderhash = (
                 );
         if ($supplementalflag) {
            my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
-                               $supplementalflag,\%suporderhash,$iconpath,$uploadtag);
+                               $supplementalflag,\%suporderhash,$iconpath);
            if ($error) {
               $r->print('<p><span class="LC_error">'.$error.'</span></p>');
            }
         }
     } elsif ($supplementalflag) {
         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype,
-                            $supplementalflag,'',$iconpath,$uploadtag);
+                            $supplementalflag,'',$iconpath);
         if ($error) {
             $r->print('<p><span class="LC_error">'.$error.'</span></p>');
         }
@@ -4336,14 +4234,14 @@ sub generate_edit_table {
     my $backicon = $iconpath.'clickhere.gif';
     my $backtext = &mt('To Overview');
     $form = '<div class="LC_Box" style="margin:0;">'.
-             '<ul id="navigation'.$tid.'" class="LC_TabContent">'."\n".
-             '<li class="goback">'.
-             '<a href="javascript:toContents('."'$jumpto'".');">'.
-             '<img src="'.$backicon.'" class="LC_icon" style="border: none; vertical-align: top;"'.
-             '  alt="'.$backtext.'" />'.$backtext.'</a></li>'."\n".
-             '<li>'.
-             '<a href="javascript:groupopen('."'$readfile'".',1);">'.
-             &mt('Undo Delete').'</a></li>'."\n";
+            '<ul id="navigation'.$tid.'" class="LC_TabContent">'."\n".
+            '<li class="goback">'.
+            '<a href="javascript:toContents('."'$jumpto'".');">'.
+            '<img src="'.$backicon.'" class="LC_icon" style="border: none; vertical-align: top;"'.
+            '  alt="'.$backtext.'" />'.$backtext.'</a></li>'."\n".
+            '<li>'.
+            '<a href="javascript:groupopen('."'$readfile'".',1);">'.
+            &mt('Undo Delete').'</a></li>'."\n";
     if ($env{'form.docslog'}) {
         $form .= '<li class="active">';
     } else {
@@ -4363,6 +4261,7 @@ sub generate_edit_table {
                $active = 'class="active"';
             }
             $form .= '<li style="float:right" '.$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>'."\n";
         } else {
 	    $form .= '<li '.$active.' style="float:right">'.${$orderhash{$name}}[1].'</li>'."\n";
@@ -4419,10 +4318,6 @@ sub editing_js {
                                           p_ctr2a => 'Cut[_98]',
                                           p_ctr2b => '?[_98]',
                                           rpck    => 'Enter number to pick (e.g., 3)',
-                                          imsfile => 'You must choose an IMS package for import',
-                                          imscms  => 'You must select which Course Management System was the source of the IMS package',
-                                          invurl  => 'Invalid URL',
-                                          titbl   => 'Title is blank',
                                         );
 
     my $crstype = &Apache::loncommon::course_type();
@@ -4442,15 +4337,6 @@ sub editing_js {
         $backtourl = '/adm/supplemental';
     }
 
-    my $fieldsets = "'ext','doc','ims'";
-    if ($supplementalflag) {
-        $fieldsets = "'suppext','suppdoc'";
-    }
-
-    my $urlregexp = <<'ENDREGEXP';
-/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i
-ENDREGEXP
-
     return <<ENDNEWSCRIPT;
 function makenewfolder(targetform,folderseq) {
     var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}');
@@ -4468,18 +4354,20 @@ function makenewpage(targetform,folderse
     }
 }
 
-function editext(residx) {
-    if (document.getElementById('uploadext'+residx)) {
-        var curr = document.getElementById('uploadext'+residx).style.display;
-        if (curr == 'none') {
-            disp = 'block';
-        } else {
-            disp = 'none';
-        }
-        document.getElementById('uploadext'+residx).style.display=disp;
-    }
-    resize_scrollbox('contentscroll','1','1');
-    return;
+function makenewext(targetname) {
+    this.document.forms.extimport.useform.value=targetname;
+    this.document.forms.extimport.title.value='';
+    this.document.forms.extimport.url.value='';
+    this.document.forms.extimport.residx.value='';
+    window.open('/adm/rat/extpickframe.html');
+}
+
+function edittext(targetname,residx,title,url) {
+    this.document.forms.extimport.useform.value=targetname;
+    this.document.forms.extimport.residx.value=residx;
+    this.document.forms.extimport.url.value=url;
+    this.document.forms.extimport.title.value=title;
+    window.open('/adm/rat/extpickframe.html');
 }
 
 function makeexamupload() {
@@ -4546,54 +4434,19 @@ function makeabout() {
 }
 }
 
-function extUrlPreview(caller) {
-    if (document.getElementById(caller)) {
-        var url = document.getElementById(caller).value;
-        var regexp = $urlregexp;
-        if (regexp.test(url)) {
-            openMyModal(url,500,400,'yes');
-        } else {
-            alert("$lt{'invurl'}");
-        }
-    }
+function makeims() {
+var caller = document.forms.ims.folder.value;
+var newlocation = "/adm/imsimportdocs?folder="+caller+"&phase=one";
+newWindow = window.open("","IMSimport","HEIGHT=700,WIDTH=750,scrollbars=yes");
+newWindow.location.href = newlocation;
 }
 
-function makeims(imsform) {
-    if ((imsform.uploaddoc.value == '')  || (!imsform.uploaddoc.value)) {
-        alert("$lt{'imsfile'}");
-        return;
-    }
-    if (imsform.source.selectedIndex == 0) {
-        alert("$lt{'imscms'}");
-        return;
-    }
-    newWindow = window.open('', 'IMSimport',"HEIGHT=700,WIDTH=750,scrollbars=yes");
-    imsform.submit();
-}
-
-function setExternal(extform,residx) {
-    var title=extform.exttitle.value;
-    if (!String.trim) {
-        String.prototype.trim = function() {return this.replace(\/^\\s+|\\s+$\/g, "");};    }
-    var url=extform.exturl.value;
-    var regexp = $urlregexp;
-    if (title == null || title.trim()=="") {
-        alert("$lt{'titbl'}");
-        extform.exttitle.focus();
-        return;
-    }
-    if (regexp.test(url)) {
-        url = escape(url);
-        if (residx > 0) {
-            eval("extform.importdetail.value=title+'='+url+'='+residx;extform.submit();");
-        } else {
-            eval("extform.importdetail.value=title+'='+url;extform.submit();");
-        }
-    } else {
-        alert("$lt{'invurl'}");
-        extform.exturl.focus();
-        return;
-    }
+function finishpick() {
+var title=this.document.forms.extimport.title.value;
+var url=this.document.forms.extimport.url.value;
+var form=this.document.forms.extimport.useform.value;
+var residx=this.document.forms.extimport.residx.value;
+eval('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+'='+residx+'";this.document.forms.'+form+'.submit();');
 }
 
 function changename(folderpath,index,oldtitle,container,pagesymb) {
@@ -4747,7 +4600,6 @@ function showPage(current, pageId, nav,
 	currentData = document.getElementById(pageId);
 	currentData.style.display = 'block';
         activeTab = pageId;
-        toggleUpload();
         if (nav == 'mainnav') {
             var storedpath = "$docs_folderpath";
             if (storedpath == '') {