--- loncom/xml/lonxml.pm	2002/03/06 20:28:19	1.155
+++ loncom/xml/lonxml.pm	2002/03/18 21:51:34	1.158
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.155 2002/03/06 20:28:19 matthew Exp $
+# $Id: lonxml.pm,v 1.158 2002/03/18 21:51:34 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -64,6 +64,7 @@ qw(@pwd @outputstack $redirection $impor
 use strict;
 use HTML::TokeParser;
 use HTML::TreeBuilder;
+use HTML::Entities;
 use Safe;
 use Safe::Hole;
 use Math::Cephes qw(:trigs :hypers :bessels erf erfc);
@@ -355,7 +356,7 @@ ENDPARM
 // BEGIN LON-CAPA Internal
 
     function LONCAPAreg() {
-	  menu=window.open("","LONCAPAmenu");
+	  menu=window.open("","LONCAPAmenu","",false);
           menu.clearTimeout(menu.menucltim);
 	  menu.currentURL=window.location.pathname;
           menu.currentStale=0;
@@ -382,7 +383,7 @@ ENDPARM
     }
 
     function LONCAPAstale() {
-	  menu=window.open("","LONCAPAmenu");
+	  menu=window.open("","LONCAPAmenu","",false);
           menu.currentStale=1;
           menu.switchbutton
              (3,1,'reload.gif','return','location','go(currentURL)');
@@ -407,7 +408,7 @@ ENDREGTHIS
 // BEGIN LON-CAPA Internal
 
     function LONCAPAreg() {
-	  menu=window.open("","LONCAPAmenu");
+	  menu=window.open("","LONCAPAmenu","",false);
           menu.currentStale=1;
           menu.clearbut(2,1);
           menu.clearbut(2,3);
@@ -430,12 +431,18 @@ ENDREGTHIS
 ENDDONOTREGTHIS
     }
     if ($target eq 'edit') {
+	# Javascript routines for construction space:
+	# openbrowser and opensearcher will start the file browser
+	# (lonindexer) and searcher (lonsearchcat) respectively.
+	# Inputs are the name of the html form being used
+	# and the name of the element the selected URL should
+	# be placed in.
         $result .=<<"ENDBROWSERSCRIPT";
 <script>
-    var editform;
+    var editbrowser;
     function openbrowser(formname,elementname) {
         var url = '/res/?';
-        if (editform == null) {
+        if (editbrowser == null) {
             url += 'launch=1&';
         }
         url += 'catalogmode=interactive&';
@@ -445,8 +452,24 @@ ENDDONOTREGTHIS
         var title = 'Browser';
         var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';
-        editform = open(url,title,options,'1');
-        editform.focus();
+        editbrowser = open(url,title,options,'1');
+        editbrowser.focus();
+    }
+    var editsearcher;
+    function opensearcher(formname,elementname) {
+        var url = '/adm/searchcat?';
+        if (editsearcher == null) {
+            url += 'launch=1&';
+        }
+        url += 'catalogmode=interactive&';
+        url += 'mode=edit&';
+        url += 'form=' + formname + '&';
+        url += 'element=' + elementname + '';
+        var title = 'Search';
+        var options = 'scrollbars=1,resizable=1,menubar=0';
+        options += ',width=700,height=600';
+        editsearcher = open(url,title,options,'1');
+        editsearcher.focus();
     }
 </script>
 ENDBROWSERSCRIPT
@@ -1065,7 +1088,7 @@ SIMPLECONTENT
 
 sub inserteditinfo {
       my ($result,$filecontents)=@_;
-      $filecontents =~ s:</textarea>:&lt;/textarea&gt;:ig;
+      $filecontents = &HTML::Entities::encode($filecontents);
 #      my $editheader='<a href="#editsection">Edit below</a><hr />';
       my $editfooter=(<<ENDFOOTER);
 <hr />
@@ -1228,6 +1251,7 @@ sub get_param {
   if ( ! $context ) { $context = -1; }
   my $args ='';
   if ( $#$parstack > (-2-$context) ) { $args=$$parstack[$context]; }
+  if ( ! $args ) { return undef; }
   if ( $args =~ /my \$$param=\"/ ) {
     return &Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #'
   } else {