--- loncom/xml/lonxml.pm	2007/10/10 00:02:27	1.463
+++ loncom/xml/lonxml.pm	2008/02/15 12:59:50	1.471
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.463 2007/10/10 00:02:27 albertel Exp $
+# $Id: lonxml.pm,v 1.471 2008/02/15 12:59:50 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -377,7 +377,7 @@ sub xmlparse {
      $finaloutput .= join('',@script_var_displays);
      undef(@script_var_displays);
  }
-
+ &init_state();
  if ($env{'form.return_only_error_and_warning_counts'}) {
      return "$errorcount:$warningcount";
  }
@@ -631,6 +631,24 @@ sub callsub {
   return $currentstring;
 }
 
+{
+    my %state;
+
+    sub init_state {
+	undef(%state);
+    }
+    
+    sub set_state {
+	my ($key,$value) = @_;
+	$state{$key} = $value;
+	return $value;
+    }
+    sub get_state {
+	my ($key) = @_;
+	return $state{$key};
+    }
+}
+
 sub setup_globals {
   my ($request,$target)=@_;
   $Apache::lonxml::request=$request;
@@ -640,6 +658,8 @@ sub setup_globals {
   $Apache::lonxml::usestyle=1;
   &init_counter();
   &clear_bubble_lines_for_part();
+  &init_state();
+  &set_state('target',$target);
   @Apache::lonxml::pwd=();
   @Apache::lonxml::extlinks=();
   @script_var_displays=();
@@ -703,6 +723,7 @@ sub init_safespace {
   $safehole->wrap(\&Apache::chemresponse::chem_standard_order,$safeeval,
 		  '&chem_standard_order');
   $safehole->wrap(\&Apache::response::check_status,$safeeval,'&check_status');
+  $safehole->wrap(\&Apache::response::implicit_multiplication,$safeeval,'&implicit_multiplication');
 
   $safehole->wrap(\&Apache::lonmaxima::maxima_eval,$safeeval,'&maxima_eval');
   $safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check');
@@ -1047,28 +1068,28 @@ Increments the internal counter environm
 Optional Arguments:
   $increment - amount to increment by (defaults to 1)
                Also 1 if the value is negative or zero.
-  $part_id   - optional part id.. during analysis, this
-               indicates whic part of a problem is being
-               counted.
+  $part_response - A concatenation of the part and response id
+                   identifying exactly what is being 'answered'.
+
 
 =cut
 
 sub increment_counter {
-    my ($increment, $part_id) = @_;
+    my ($increment, $part_response) = @_;
     if (!defined($increment) || $increment le 0) {
 	$increment = 1;
     }
     $Apache::lonxml::counter += $increment;
 
-    # If the caller supplied the part_id parameter, 
+    # If the caller supplied the response_id parameter, 
     # Maintain its counter.. creating if necessary.
 
-    if(defined($part_id)) {
-	if (!defined($Apache::lonxml::counters_per_part{$part_id})) {
-	    $Apache::lonxml::counters_per_part{$part_id} = 0;
+    if (defined($part_response)) {
+	if (!defined($Apache::lonxml::counters_per_part{$part_response})) {
+	    $Apache::lonxml::counters_per_part{$part_response} = 0;
 	}
-	$Apache::lonxml::counters_per_part{$part_id} += $increment;
-	my $new_value = $Apache::lonxml::counters_per_part{$part_id};
+	$Apache::lonxml::counters_per_part{$part_response} += $increment;
+	my $new_value = $Apache::lonxml::counters_per_part{$part_response};
     }
 	
     $Apache::lonxml::counter_changed=1;
@@ -1129,22 +1150,21 @@ sub store_counter {
 
 =pod
 
-=item  bubble_lines_for_part(part_id)
+=item  bubble_lines_for_part(part_response)
 
 Returns the number of lines required to get a response for
-$part_id (this is just $Apache::lonxml::counters_per_part{$part_id}
+$part_response (this is just $Apache::lonxml::counters_per_part{$part_response}
 
 =cut
 
 sub bubble_lines_for_part {
-    my ($part_id) = @_;
+    my ($part_response) = @_;
 
-    if (!defined($Apache::lonxml::counters_per_part{$part_id})) {
+    if (!defined($Apache::lonxml::counters_per_part{$part_response})) {
 	return 0;
     } else {
-	return $Apache::lonxml::counters_per_part{$part_id};
+	return $Apache::lonxml::counters_per_part{$part_response};
     }
-
 }
 
 =pod
@@ -1163,7 +1183,7 @@ sub clear_bubble_lines_for_part {
 
 =pod
 
-=item set_bubble_lines(part_id, value)
+=item set_bubble_lines(part_response, value)
 
 If there is a problem part, that for whatever reason
 requires bubble lines that are not
@@ -1173,9 +1193,9 @@ analysis to set its hash value explicitl
 =cut
 
 sub set_bubble_lines {
-    my ($part_id, $value) = @_;
+    my ($part_response, $value) = @_;
 
-    $Apache::lonxml::counters_per_part{$part_id} = $value;
+    $Apache::lonxml::counters_per_part{$part_response} = $value;
 }
 
 =pod
@@ -1457,7 +1477,7 @@ SIMPLECONTENT
 
 
 sub inserteditinfo {
-      my ($filecontents,$filetype)=@_;
+      my ($filecontents, $filetype, $filename)=@_;
       $filecontents = &HTML::Entities::encode($filecontents,'<>&"');
 #      my $editheader='<a href="#editsection">Edit below</a><hr />';
       my $xml_help = '';
@@ -1495,7 +1515,6 @@ FULLPAGE
       } else {
 	  $initialize.=(<<FULLPAGE);
 <script type="text/javascript">
-$addbuttons
     function initDocument() {
 	resize_textarea('$textarea_id','LC_aftertextarea');
     }
@@ -1510,38 +1529,41 @@ FULLPAGE
 	  $xml_help=&Apache::loncommon::helpLatexCheatsheet();
       }
 
-      my $cleanbut = '';
-
       my $titledisplay=&display_title();
       my %lt=&Apache::lonlocal::texthash('st' => 'Save and Edit',
 					 'vi' => 'Save and View',
 					 'dv' => 'Discard Edits and View',
 					 'un' => 'undo',
 					 'ed' => 'Edit');
-      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="savethisfile" accesskey="s"  value="$lt{'st'}" />
-<input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
-BUTTONS
-      $buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont');
+      my $spelllink .=&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 $form_events method="post" name="xmledit">
-$xml_help
-<input type="hidden" name="editmode" value="$lt{'ed'}" />
-$buttons<br />
-<textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
-<div id="LC_aftertextarea">
-<br />$buttons
-<br />
-$titledisplay
-</div>
+  <div class="LC_edit_problem_editxml_header">
+    <table class="LC_edit_problem_header_title"><tr><td>
+        $filename
+      </td><td align="right">
+        $xml_help
+      </td></tr>
+    </table>
+    <div class="LC_edit_problem_discards">
+      <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />
+      <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />
+      $spelllink
+    </div>
+    <div class="LC_edit_problem_saves">
+      <input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" />
+      <input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" />
+    </div>
+  </div>
+  <textarea $textarea_events style="width:100%" cols="80" rows="44" name="filecont" id="filecont">$filecontents</textarea>
+  <div id="LC_aftertextarea">
+    <br />
+    $titledisplay
+  </div>
 </form>
 </body>
 ENDFOOTER
@@ -1671,11 +1693,12 @@ ENDNOTFOUND
     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 ($edit_info, $add_to_onload, $add_to_onresize)=
+		&inserteditinfo($filecontents,$filetype,$displayfile);
+
 	    my %options = 
 		('add_entries' =>
                    {'onresize' => $add_to_onresize,
@@ -1691,9 +1714,7 @@ ENDNOTFOUND
 	    my $start_page = &Apache::loncommon::start_page(undef,$js,
 							    \%options);
 	    $result=$start_page.
-		&Apache::lonxml::message_location().'<h3>'.
-		$displayfile.
-		'</h3>'.
+		&Apache::lonxml::message_location().
 		$edit_info.
 		&Apache::loncommon::end_page();
 	}