/*

    Copyright 2003-2007 Purdue University. 

    Developed by: Peter Turbek, Department of Mathematics, Computer Science, and Statistics, Purdue University Calumet.


    This file is part of CaluMath.

    CaluMath is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    CaluMath is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

CaluMath.PM.AdjustTableRowsAfterInsertion= function(){
   var tempobject=arguments[0];
   var numberofrows= tempobject.cm_getsetting("rows");
   var numberofcolumns= tempobject.cm_getsetting("columns");
   var tempname= tempobject.cm_getsetting("name");

   var beginningrow=arguments[1];
   if(dorecursion==null){
      dorecursion=true;
   };

   var dorecursion=true; 

   var tempDefault= eval("CaluMath.PM.PageMaker"+tempobject.type+"Default");
   var tempDefaultListArray= tempDefault.ListArray;
   if(tempDefaultListArray == null){
      // alerttest("ListArray is undefined for "+ tempobject+" in the Routine CaluMath.PM.NewChangeName." );
      tempDefaultListArray=[];
   };
   var tempDefaultListArraylength= tempDefaultListArray.length;
   var changedarray= new Array();

   for(var jindex=numberofrows-1; jindex>= beginningrow; jindex--){
      var rowandcolregexp= new RegExp("^"+tempname+"R"+jindex+"C(\\d*)$");
//alerttest(rowandcolregexp);
      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(rowandcolregexp)){
//alerttest(["a match", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(rowandcolregexp)]);
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(rowandcolregexp, tempname+"R"+(jindex+1)+"C$1" ));
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };
   };

      var changedarraylength = changedarray.length;
      for(var j=0; j<changedarraylength; j++){
         CaluMath.PM.AssignOldValues(changedarray[j]);

         tempdeletefunction=eval("CaluMath.PM.DeleteFromLists"+changedarray[j].type);
         tempdeletefunction(changedarray[j]);
 
         tempaddtofunction=eval("CaluMath.PM.AddToLists"+changedarray[j].type);
         tempaddtofunction(changedarray[j]);
        //Comment: We should put false as the second argument here to stop recursion.
        CaluMath.PM.NewChangeName(changedarray[j]);
      };
};

CaluMath.PM.AdjustTableRowsAfterDeletion= function(){
   var tempobject=arguments[0];
   var numberofrows= tempobject.cm_getsetting("rows");
   var numberofcolumns= tempobject.cm_getsetting("columns");
   var tempname= tempobject.cm_getsetting("name");

   var beginningrow=arguments[1];
   if(dorecursion==null){
      dorecursion=true;
   };

   var dorecursion=true; 

   var tempDefault= eval("CaluMath.PM.PageMaker"+tempobject.type+"Default");
   var tempDefaultListArray= tempDefault.ListArray;
   if(tempDefaultListArray == null){
      // alerttest("ListArray is undefined for "+ tempobject+" in the Routine CaluMath.PM.NewChangeName." );
      tempDefaultListArray=[];
   };
   var tempDefaultListArraylength= tempDefaultListArray.length;
   var changedarray= new Array();

   var delrowandcolregexp= new RegExp("^"+tempname+"R"+beginningrow+"C(\\d*)$");

      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(delrowandcolregexp)){
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", "n/a");  
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };

   for(var jindex=1*beginningrow+1; jindex <= numberofrows; jindex++){
      var rowandcolregexp= new RegExp("^"+tempname+"R"+jindex+"C(\\d*)$");
      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(rowandcolregexp)){
//alerttest([CaluMath.PM.EveryObjectArray[i], CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget"), CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(rowandcolregexp, tempname+"R"+(jindex-1)+"C$1" )]);
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(rowandcolregexp, tempname+"R"+(jindex-1)+"C$1" ));
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };
   };





      var changedarraylength = changedarray.length;
      for(var j=0; j<changedarraylength; j++){
         CaluMath.PM.AssignOldValues(changedarray[j]);

         tempdeletefunction=eval("CaluMath.PM.DeleteFromLists"+changedarray[j].type);
         tempdeletefunction(changedarray[j]);
 
         tempaddtofunction=eval("CaluMath.PM.AddToLists"+changedarray[j].type);
         tempaddtofunction(changedarray[j]);
        //Comment: We should put false as the second argument here to stop recursion.
        CaluMath.PM.NewChangeName(changedarray[j]);
      };
};

CaluMath.PM.AdjustTableColumnsAfterInsertion= function(){
   var tempobject=arguments[0];
   var numberofrows= tempobject.cm_getsetting("rows");
   var numberofcolumns= tempobject.cm_getsetting("columns");
   var tempname= tempobject.cm_getsetting("name");

   var beginningcolumn=arguments[1];
   if(dorecursion==null){
      dorecursion=true;
   };

   var dorecursion=true; 

   var tempDefault= eval("CaluMath.PM.PageMaker"+tempobject.type+"Default");
   var tempDefaultListArray= tempDefault.ListArray;
   if(tempDefaultListArray == null){
      // alerttest("ListArray is undefined for "+ tempobject+" in the Routine CaluMath.PM.NewChangeName." );
      tempDefaultListArray=[];
   };
   var tempDefaultListArraylength= tempDefaultListArray.length;
   var changedarray= new Array();

   for(var jindex=numberofcolumns-1; jindex>= beginningcolumn; jindex--){
      var rowandcolregexp= new RegExp("^"+tempname+"R(\\d*)C"+jindex+"$");
//alerttest(rowandcolregexp);
      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(rowandcolregexp)){
//alerttest(["a match", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(rowandcolregexp)]);
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(rowandcolregexp, tempname+"R$1C"+(jindex+1) ));
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };
   };

      var changedarraylength = changedarray.length;
      for(var j=0; j<changedarraylength; j++){
         CaluMath.PM.AssignOldValues(changedarray[j]);

         tempdeletefunction=eval("CaluMath.PM.DeleteFromLists"+changedarray[j].type);
         tempdeletefunction(changedarray[j]);
 
         tempaddtofunction=eval("CaluMath.PM.AddToLists"+changedarray[j].type);
         tempaddtofunction(changedarray[j]);
        //Comment: We should put false as the second argument here to stop recursion.
        CaluMath.PM.NewChangeName(changedarray[j]);
      };
};


CaluMath.PM.AdjustTableColumnsAfterDeletion= function(){
   var tempobject=arguments[0];
   var numberofrows= tempobject.cm_getsetting("rows");
   var numberofcolumns= tempobject.cm_getsetting("columns");
   var tempname= tempobject.cm_getsetting("name");

   var beginningcolumn=arguments[1];
   if(dorecursion==null){
      dorecursion=true;
   };

   var dorecursion=true; 

   var tempDefault= eval("CaluMath.PM.PageMaker"+tempobject.type+"Default");
   var tempDefaultListArray= tempDefault.ListArray;
   if(tempDefaultListArray == null){
      // alerttest("ListArray is undefined for "+ tempobject+" in the Routine CaluMath.PM.NewChangeName." );
      tempDefaultListArray=[];
   };
   var tempDefaultListArraylength= tempDefaultListArray.length;
   var changedarray= new Array();

   var delrowandcolregexp= new RegExp("^"+tempname+"R(\\d*)C"+beginningcolumn+"$");

      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(delrowandcolregexp)){
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", "n/a");  
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };

   for(var jindex=1*beginningcolumn+1; jindex <= numberofrows; jindex++){
      var rowandcolregexp= new RegExp("^"+tempname+"R(\\d*)C"+jindex+"$");
      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(rowandcolregexp)){
//alerttest([CaluMath.PM.EveryObjectArray[i], CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget"), CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(rowandcolregexp, tempname+"R$1C"+(jindex-1)+"" )]);
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(rowandcolregexp, tempname+"R$1C"+(jindex-1)+"" ));
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };
   };





      var changedarraylength = changedarray.length;
      for(var j=0; j<changedarraylength; j++){
         CaluMath.PM.AssignOldValues(changedarray[j]);

         tempdeletefunction=eval("CaluMath.PM.DeleteFromLists"+changedarray[j].type);
         tempdeletefunction(changedarray[j]);
 
         tempaddtofunction=eval("CaluMath.PM.AddToLists"+changedarray[j].type);
         tempaddtofunction(changedarray[j]);
        //Comment: We should put false as the second argument here to stop recursion.
        CaluMath.PM.NewChangeName(changedarray[j]);
      };
};


CaluMath.PM.AdjustListItemsAfterInsertion= function(){
   var tempobject=arguments[0];
   var numberofitems= tempobject.cm_getsetting("items");
   var tempname= tempobject.cm_getsetting("name");
   var templisttype= tempobject.cm_getsetting("listtype");

   var beginningitem=arguments[1];
   if(dorecursion==null){
      dorecursion=true;
   };

   var dorecursion=true; 

   var tempDefault= eval("CaluMath.PM.PageMaker"+tempobject.type+"Default");
   var tempDefaultListArray= tempDefault.ListArray;
   if(tempDefaultListArray == null){
      // alerttest("ListArray is undefined for "+ tempobject+" in the Routine CaluMath.PM.NewChangeName." );
      tempDefaultListArray=[];
   };
   var tempDefaultListArraylength= tempDefaultListArray.length;
   var changedarray= new Array();

   if(templisttype != "dl"){
      for(var jindex=numberofitems-1; jindex>= beginningitem; jindex--){
         var itemregexp= new RegExp("^"+tempname+"I"+jindex+"$");
         var itemregexpwithtext= new RegExp("^"+tempname+"I"+jindex+"Text$");
         for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(itemregexp)){
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(itemregexp, tempname+"I"+(jindex+1) ));
               if(dorecursion){
                  changedarray.push(CaluMath.PM.EveryObjectArray[i]);
               };
            };
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(itemregexpwithtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(itemregexpwithtext, tempname+"I"+(jindex+1)+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };
   }
   else{
      for(var jindex=numberofitems-1; jindex>= beginningitem; jindex--){
         var itemregexp1= new RegExp("^"+tempname+"T"+(jindex)+"$");
         var itemregexp2= new RegExp("^"+tempname+"D"+(jindex)+"$");
         var itemregexp1withtext= new RegExp("^"+tempname+"T"+(jindex)+"Text$");
         var itemregexp2withtext= new RegExp("^"+tempname+"D"+(jindex)+"Text$");
         for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(itemregexp1)){
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(itemregexp1, tempname+"T"+(jindex+1) ));
               if(dorecursion){
                  changedarray.push(CaluMath.PM.EveryObjectArray[i]);
               };
            }
            else if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(itemregexp2)){
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(itemregexp2, tempname+"D"+(jindex+1) ));
               if(dorecursion){
                  changedarray.push(CaluMath.PM.EveryObjectArray[i]);
               };
            };
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(itemregexp1withtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(itemregexp1withtext, tempname+"T"+(jindex+1)+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            };
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(itemregexp2withtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(itemregexp2withtext, tempname+"D"+(jindex+1)+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            };

         };
      };
   };

      var changedarraylength = changedarray.length;
      for(var j=0; j<changedarraylength; j++){
         CaluMath.PM.AssignOldValues(changedarray[j]);

         tempdeletefunction=eval("CaluMath.PM.DeleteFromLists"+changedarray[j].type);
         tempdeletefunction(changedarray[j]);
 
         tempaddtofunction=eval("CaluMath.PM.AddToLists"+changedarray[j].type);
         tempaddtofunction(changedarray[j]);
        //Comment: We should put false as the second argument here to stop recursion.
        CaluMath.PM.NewChangeName(changedarray[j]);
      };
};

CaluMath.PM.AdjustListItemsAfterDeletion= function(){
   var tempobject=arguments[0];
   var numberofitems= tempobject.cm_getsetting("items");
   var tempname= tempobject.cm_getsetting("name");
   var templisttype= tempobject.cm_getsetting("listtype");

   var beginningitem=arguments[1];
   if(dorecursion==null){
      dorecursion=true;
   };

   var dorecursion=true; 

   var tempDefault= eval("CaluMath.PM.PageMaker"+tempobject.type+"Default");
   var tempDefaultListArray= tempDefault.ListArray;
   if(tempDefaultListArray == null){
      // alerttest("ListArray is undefined for "+ tempobject+" in the Routine CaluMath.PM.NewChangeName." );
      tempDefaultListArray=[];
   };
   var tempDefaultListArraylength= tempDefaultListArray.length;
   var changedarray= new Array();

   if(templisttype != "dl"){
      var delitemregexp= new RegExp("^"+tempname+"I"+beginningitem+"$");
      var delitemregexpwithtext= new RegExp("^"+tempname+"I"+beginningitem+"Text$");

      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(delitemregexp)){
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", "n/a");  
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(delitemregexpwithtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(delitemregexpwithtext, "OLD"+tempname+"I"+beginningitem+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            };
         };
      };
      //Comment: Note that we must use 1+numberofitems since the list has been reduced by 1, but there may be references to the last item. 
      for(var jindex=1*beginningitem+1; jindex <= 1+1*numberofitems; jindex++){
         var itemregexp= new RegExp("^"+tempname+"I"+jindex+"$");
         var itemregexpwithtext= new RegExp("^"+tempname+"I"+jindex+"Text$");
         for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(itemregexp)){
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(itemregexp, tempname+"I"+(jindex-1)+"" ));
               if(dorecursion){
                  changedarray.push(CaluMath.PM.EveryObjectArray[i]);
               };
            };
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(itemregexpwithtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(itemregexpwithtext, tempname+"I"+(jindex-1)+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            };

         };
      };
   }
   else{
      var delitemregexp1= new RegExp("^"+tempname+"T"+(beginningitem)+"$");
      var delitemregexp2= new RegExp("^"+tempname+"D"+(beginningitem)+"$");
      var delitemregexp1withtext= new RegExp("^"+tempname+"T"+(beginningitem)+"Text$");
      var delitemregexp2withtext= new RegExp("^"+tempname+"D"+(beginningitem)+"Text$");

      for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
         if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(delitemregexp1)){
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", "n/a");  
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         }
         else if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(delitemregexp2)){
            CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", "n/a");  
            if(dorecursion){
               changedarray.push(CaluMath.PM.EveryObjectArray[i]);
            };
         }
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(delitemregexp1withtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(delitemregexp1withtext, "OLD"+tempname+"T"+beginningitem+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            }
            else if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(delitemregexp2withtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(delitemregexp2withtext, "OLD"+tempname+"D"+beginningitem+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            };

      };
      //Comment: Note that we must use 1+numberofitems since the list has been reduced by 1, but there may be references to the last item. 
      for(var jindex=1*beginningitem+1; jindex <= 1+1*numberofitems; jindex++){
         var itemregexp1= new RegExp("^"+tempname+"T"+(jindex)+"$");
         var itemregexp2= new RegExp("^"+tempname+"D"+(jindex)+"$");
         var itemregexp1withtext= new RegExp("^"+tempname+"T"+(jindex)+"Text$");
         var itemregexp2withtext= new RegExp("^"+tempname+"D"+(jindex)+"Text$");
         for(var i=0; i<CaluMath.PM.EveryObjectArray.length; i++){
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(itemregexp1)){
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(itemregexp1, tempname+"T"+(jindex-1)+"" ));
               if(dorecursion){
                  changedarray.push(CaluMath.PM.EveryObjectArray[i]);
               };
            }
            else if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").match(itemregexp2)){
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("cm_inserttarget", CaluMath.PM.EveryObjectArray[i].cm_getsetting("cm_inserttarget").replace(itemregexp2, tempname+"D"+(jindex-1)+"" ));
               if(dorecursion){
                  changedarray.push(CaluMath.PM.EveryObjectArray[i]);
               };
            };
            if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(itemregexp1withtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(itemregexp1withtext, tempname+"T"+(jindex-1)+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            }
            else if(CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").match(itemregexp2withtext)){
               CaluMath.PM.AssignOldValues(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.DeleteFromLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.EveryObjectArray[i].cm_setrequiredoroption("name", CaluMath.PM.EveryObjectArray[i].cm_getsetting("name").replace(itemregexp2withtext, tempname+"D"+(jindex-1)+"Text" ));
               CaluMath.PM.AddToLists(CaluMath.PM.EveryObjectArray[i]);
               CaluMath.PM.NewChangeName(CaluMath.PM.EveryObjectArray[i]);
            };

         };
      };
   };

      var changedarraylength = changedarray.length;
      for(var j=0; j<changedarraylength; j++){
         CaluMath.PM.AssignOldValues(changedarray[j]);

         tempdeletefunction=eval("CaluMath.PM.DeleteFromLists"+changedarray[j].type);
         tempdeletefunction(changedarray[j]);
 
         tempaddtofunction=eval("CaluMath.PM.AddToLists"+changedarray[j].type);
         tempaddtofunction(changedarray[j]);
        //Comment: We should put false as the second argument here to stop recursion.
        CaluMath.PM.NewChangeName(changedarray[j]);
      };
};
////END OF List stuff list table row rows 
