--- loncom/xml/lonxml.pm	2007/09/05 01:03:21	1.449.2.1
+++ loncom/xml/lonxml.pm	2007/09/10 19:46:57	1.456
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.449.2.1 2007/09/05 01:03:21 albertel Exp $
+# $Id: lonxml.pm,v 1.456 2007/09/10 19:46:57 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1350,17 +1350,20 @@ SIMPLECONTENT
 
 
 sub inserteditinfo {
-      my ($result,$filecontents,$filetype)=@_;
+      my ($filecontents,$filetype)=@_;
       $filecontents = &HTML::Entities::encode($filecontents,'<>&"');
 #      my $editheader='<a href="#editsection">Edit below</a><hr />';
       my $xml_help = '';
       my $initialize='';
-      if ($filetype eq 'html') {
-	  my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();
-	  $initialize=&Apache::lonhtmlcommon::spellheader();
-	  if (!&Apache::lonhtmlcommon::htmlareablocked() &&
-	      &Apache::lonhtmlcommon::htmlareabrowser()) {
-	      $initialize.=(<<FULLPAGE);
+      my $textarea_id = 'filecont';
+      my ($add_to_onload, $add_to_onresize);
+      my $addbuttons=&Apache::lonhtmlcommon::htmlareaaddbuttons();
+      $initialize=&Apache::lonhtmlcommon::spellheader();
+      if ($filetype eq 'html' 
+	  && (!&Apache::lonhtmlcommon::htmlareablocked() &&
+	      &Apache::lonhtmlcommon::htmlareabrowser())) {
+	  $textarea_id .= '_htmlarea';
+	  $initialize.=(<<FULLPAGE);
 <script type="text/javascript">
 $addbuttons
 
@@ -1370,21 +1373,34 @@ $addbuttons
 	var editor=new HTMLArea("filecont",config);
 	editor.registerPlugin(FullPage);
 	editor.generate();
+	setTimeout(
+		   function () {
+		       HTMLArea._addEvents(editor._doc,
+					   ["keypress","mousedown"], unClean);
+		       editor._iframe.id = '$textarea_id';
+		       resize_textarea('$textarea_id','LC_aftertextarea');
+		   },300);
     }
 </script>
 FULLPAGE
-          } else {
-	      $initialize.=(<<FULLPAGE);
+      } else {
+	  $initialize.=(<<FULLPAGE);
 <script type="text/javascript">
 $addbuttons
     function initDocument() {
+	resize_textarea('$textarea_id','LC_aftertextarea');
     }
 </script>
 FULLPAGE
-	  }
-          $result=~s/\<body([^\>]*)\>/\<body onload="initDocument()" $1\>/i;
+      }
+
+      $add_to_onload = 'initDocument();';
+      $add_to_onresize = "resize_textarea('$textarea_id','LC_aftertextarea');";
+
+      if ($filetype eq 'html') {
 	  $xml_help=&Apache::loncommon::helpLatexCheatsheet();
       }
+
       my $cleanbut = '';
 
       my $titledisplay=&display_title();
@@ -1396,29 +1412,31 @@ FULLPAGE
       my $buttons=(<<BUTTONS);
 $cleanbut
 <input type="submit" name="discardview" accesskey="d"  value="$lt{'dv'}" />
-<input type="submit" name="Undo" accesskey="u"  value="$lt{'un'}" /><hr>
+<input type="submit" name="Undo" accesskey="u"  value="$lt{'un'}" /><hr />
 <input type="submit" name="savethisfile" accesskey="s"  value="$lt{'st'}" />
 <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
 BUTTONS
       $buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');
+      my $textarea_events = &Apache::edit::element_change_detection();
+      my $form_events     = &Apache::edit::form_change_detection();
       my $editfooter=(<<ENDFOOTER);
 $initialize
 <hr />
 <a name="editsection" />
-<form method="post" name="xmledit">
+<form $form_events method="post" name="xmledit">
 $xml_help
 <input type="hidden" name="editmode" value="$lt{'ed'}" />
 $buttons<br />
-<textarea style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
+<textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
+<div id="LC_aftertextarea">
 <br />$buttons
 <br />
-</form>
 $titledisplay
+</div>
+</form>
 </body>
 ENDFOOTER
-#      $result=~s/(\<body[^\>]*\>)/$1$editheader/is;
-      $result=~s/(\<\/body\>)/$editfooter/is;
-      return $result;
+      return ($editfooter,$add_to_onload,$add_to_onresize);;
 }
 
 sub get_target {
@@ -1524,32 +1542,51 @@ ENDNOTFOUND
 	    &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 						    ['rawmode']);
 	    if ($env{'form.rawmode'}) { $result = $filecontents; }
+	    if ($filetype eq 'sty') {
+		my %options = ('bgcolor' => '#FFFFFF');
+		$result = 
+		    &Apache::loncommon::start_page(undef,undef,\%options).
+		    &Apache::londefdef::edit_controls().
+		    $result.
+		    &Apache::loncommon::end_page();
+	    }
 	}
     }
-    
+
 #
 # Edit action? Insert editing commands
 #
     unless ($env{'request.state'} eq 'published') {
 	if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'})))
-	    {
+	{
+	    my ($edit_info, $add_to_onload, $add_to_onresize)=
+		&inserteditinfo($filecontents,$filetype);
+
 	    my $displayfile=$request->uri;
 	    $displayfile=~s/^\/[^\/]*//;
-	    my %options = ();
+	    my %options = 
+		('add_entries' =>
+                   {'onresize' => $add_to_onresize,
+		    'onload'   => $add_to_onload,   });
+
 	    if ($env{'environment.remote'} ne 'off') {
 		$options{'bgcolor'}   = '#FFFFFF';
+		$options{'only_body'} = 1;
 	    }
-	    my $start_page = &Apache::loncommon::start_page(undef,undef,
+	    my $js =
+		&Apache::edit::js_change_detection().
+		&Apache::loncommon::resize_textarea_js();
+	    my $start_page = &Apache::loncommon::start_page(undef,$js,
 							    \%options);
 	    $result=$start_page.
 		&Apache::lonxml::message_location().'<h3>'.
 		$displayfile.
-		'</h3>'.&Apache::loncommon::end_page();
-	    $result=&inserteditinfo($result,$filecontents,$filetype);
+		'</h3>'.
+		$edit_info.
+		&Apache::loncommon::end_page();
 	}
     }
     if ($filetype eq 'html') { &writeallows($request->uri); }
-	
     
     &Apache::lonxml::add_messages(\$result);
     $request->print($result);
@@ -1598,12 +1635,28 @@ sub show_error_warn_msg {
 }
 
 sub error {
+    my @errors = @_;
+
     $errorcount++;
+
+    if (defined($Apache::inputtags::part)) {
+	if ( @Apache::inputtags::response ) {
+	    push(@errors,
+		 &mt("This error occurred while processing response [_1] in part [_2]",
+		     $Apache::inputtags::response[-1],
+		     $Apache::inputtags::part));
+	} else {
+	    push(@errors,
+		 &mt("This error occurred while processing part [_1]",
+		     $Apache::inputtags::part));
+	}
+    }
+
     if ( &show_error_warn_msg() ) {
 	# If printing in construction space, put the error inside <pre></pre>
 	push(@Apache::lonxml::error_messages,
 	     $Apache::lonxml::warnings_error_header.
-	     "<b>ERROR:</b>".join("<br />\n",@_)."<br />\n");
+	     "<b>ERROR:</b>".join("<br />\n",@errors)."<br />\n");
 	$Apache::lonxml::warnings_error_header='';
     } else {
 	my $errormsg;
@@ -1613,7 +1666,10 @@ sub error {
 	    $errormsg=&mt("An error occured while processing this resource. The author has been notified.");
 	}
 	my $host=$Apache::lonnet::perlvar{'lonHostID'};
-	my $msg = join('<br />',(@_,"The error occurred on host <tt>$host</tt>"));
+	push(@errors, "The error occurred on host <tt>$host</tt>");
+
+	my $msg = join('<br />', @errors);
+
 	#notify author
 	&Apache::lonmsg::author_res_msg($env{'request.filename'},$msg);
 	#notify course