-- ***********************************************************************
-- The dynamic form in Portal has a single line of code that calls the 
-- show_param_form procedure in the following package. This package
-- is written under the same Portal user that owns the report package.
-- This package parallels the functionality of the demo HTML shuttle
-- page but may look a bit different:
--
--    - The link in Portal passes a single parameter (report_type) that is
--      a number indicating which style of report. This is not used
--      much in the package below.
--
--    - It contains more fields than the demo
--
-- Important: You need to grant execute privilege to PORTAL and maybe
-- PORTAL_PUBLIC so that the run_the_report procedure can be found.
--
-- The utility package that this package calls is also included in the
-- reports_util_pkg.sql file
--
-- ***********************************************************************
--
CREATE OR REPLACE
PACKAGE BODY demo_shuttle_pkg
IS
   
            
/* **************************** *\
||
||
|| Private program units spec
||
||
*\ **************************** */

   PROCEDURE param_page_javascript;
   
   PROCEDURE show_param_values(
      p_action                IN VARCHAR2,
      p_request               IN VARCHAR2,
      p_group1_left           IN VARCHAR2,
      p_group1_right          IN VARCHAR2,
      p_group1_leftselect     IN VARCHAR2,
      p_group1_rightselect    IN VARCHAR2,
      p_group2_left           IN VARCHAR2,
      p_group2_right          IN VARCHAR2,
      p_group2_leftselect     IN VARCHAR2,
      p_group2_rightselect    IN VARCHAR2,
      p_group3_left           IN VARCHAR2,
      p_group3_right          IN VARCHAR2,
      p_group3_leftselect     IN VARCHAR2,
      p_group3_rightselect    IN VARCHAR2,
      p_p_provider_no         IN VARCHAR2, 
      p_report_type           IN VARCHAR2,
      p_p_program_no          IN VARCHAR2, 
      p_program_type_code     IN VARCHAR2, 
      p_as_of_date            IN VARCHAR2, 
      p_from_date             IN VARCHAR2, 
      p_thru_date             IN VARCHAR2,
      p_trans_type            IN VARCHAR2,
      p_itemgroup_ct          IN VARCHAR2,
      p_trans_desc            IN VARCHAR2);
      

/* **************************** *\
||
||
|| Public program units body
||
||
*\ **************************** */


   PROCEDURE show_param_form(
      p_trans_type NUMBER)
   IS    
      v_ok_button       VARCHAR2(200) := '<INPUT TYPE="button" NAME="p_request" VALUE="Run" ' ||
                           'onClick="javascript:okSubmit()">';
      v_cancel_button   VARCHAR2(200) := '<INPUT type="button" name="p_request" value="Cancel" ' ||
                          'onclick="javascript:self.close();">';
      v_trans_type      NUMBER := p_trans_type;
      v_trans_desc      VARCHAR2(20);
      v_itemgroup_count NUMBER := 0;
      
      -- item data
      t_itemlkup_id        num_typ;
      t_item_name          desc_typ;
      t_group_description  desc_typ;
      t_trans_description  desc_typ;
      t_trans_prompt       desc_typ;     

      --
      v_old_group_desc     VARCHAR2(100);
      v_item_count         NUMBER;
      v_item_id_list       VARCHAR2(2000);
      v_from_prompt        VARCHAR2(20) := 'From:';
      v_thru_prompt        VARCHAR2(20) := 'Through:';
   BEGIN
      -- insert the JavaScript to handle fields and the form
      reports_util_pkg.shuttle_control_javascript;
      param_page_javascript;

      -- the template leaves heading open
      htp.headClose;

      htp.bodyOpen(  cattributes => ' bgcolor="#FFFFFF" onload=''pageStartup(this);''' );
      htp.print( '<CENTER>' );

      -- get the item details
      SELECT itemlkup_id,
             item_name,
             group_description,
             trans_description,
             date_prompt
      BULK COLLECT INTO
             t_itemlkup_id,
             t_item_name,
             t_group_description,
             t_trans_description,
             t_trans_prompt        
      FROM   shuttle_control_details
      WHERE  translkup_id = p_trans_type
      ORDER BY 
             group_display_order, item_name;
      
      IF t_trans_description.COUNT > 0
      THEN
         -- all trans descriptions are the same
         v_trans_desc := t_trans_description(1);
      END IF;

      -- The form
      htp.formOpen( curl => 'rep.demo_shuttle_pkg.show_the_report', 
            cmethod => 'get', cattributes => ' name="edit_page"');

      -- header elements    
      reports_util_pkg.template_header(v_trans_desc || ' Item Statistics',
                      v_ok_button, v_cancel_button);

      htp.tableOpen;

      --
      -- Desformat poplist
      --
      htp.tableRowOpen;
      htp.tableHeader( '* Output Type:', calign => 'left');
      htp.tableData( htf.formSelectOpen( cname => 'P_DESFORMAT', nsize => '1') || 
         htf.formSelectOption( 'PDF', cattributes => ' value="PDF" SELECTED') || 
         htf.formSelectOption( 'HTMLCSS', cattributes => ' value="HTMLCSS"') || 
         htf.formSelectClose, ccolspan => '2');
      htp.tableRowClose;

      -- line
      htp.tableRowOpen;
      htp.tableData( htf.hr(  cattributes => ' color="#CCCC99"'), ccolspan => '2');
      htp.tableRowClose;
      htp.tableRowOpen;
      htp.tableHeader( ' ', calign => 'left');
      htp.tableRowClose;
      
      --
      -- From Date
      --
      htp.tableRowOpen;
      htp.tableHeader( '&nbsp;&nbsp;&nbsp;' || v_from_prompt || 
         htf.br || 
         '<FONT color="#3366CC" size="-1">' || 
         '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(mm/dd/yyyy)' || 
         '</FONT>', calign => 'left');
      htp.tableData( htf.formText( cname => 'P_FROM_DATE', csize => '10', cmaxlength => '10'));
      htp.tableRowClose;
      htp.tableRowOpen;
      htp.tableHeader( ' ', calign => 'left');
      htp.tableRowClose;
      
      --
      -- Through date
      --
      htp.tableRowOpen;
      htp.tableHeader( '&nbsp;&nbsp;&nbsp;' || v_thru_prompt || 
         htf.br || 
         '<FONT color="#3366CC" size="-1">' || 
         '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(mm/dd/yyyy)' || 
         '</FONT>', calign => 'left');
       htp.tableData( htf.formText( cname => 'P_THRU_DATE', csize => '10', cmaxlength => '10'));
       htp.tableRowClose;

      -- line and titles
      htp.tableRowOpen;
      htp.tableData( htf.hr(  cattributes => ' color="#CCCC99"'), ccolspan => '2');
      htp.tableRowClose;
      htp.tableClose;
      htp.bold('Move items to the right to include them on the report.');
      
      --
      -- Store the alphabetical order for the items 
      --    
      htp.print( '<SCRIPT  TYPE="text/javascript">' );
      htp.print( '<!-- Comment out script for old browsers');  
      htp.print( '   var p_alphabetize = 1;' );      
      v_old_group_desc := '---XYZ---';
      FOR i IN 1 .. t_itemlkup_id.COUNT
      LOOP
         -- break on group description
         IF v_old_group_desc != t_group_description(i)
         THEN
            v_item_count := 0;
            v_itemgroup_count := v_itemgroup_count + 1;
      
            -- Array variable declaration
            htp.p('   var p_group' || v_itemgroup_count || '_sorted = new Array();');
         END IF;
         
         -- Array member for the item
         htp.p('   p_group' || v_itemgroup_count || '_sorted[' || v_item_count || 
               '] = "' || t_itemlkup_id(i) || '";');
         v_old_group_desc := t_group_description(i);
         v_item_count := v_item_count + 1;
      END LOOP;
      htp.print( '//-->' );
      htp.print( '</SCRIPT>' );

      -- 
      -- Column headings
      --
      htp.tableOpen;
      htp.tableRowOpen;
      htp.tableHeader( '<FONT color="336699" size="+1">' || 
         'Available Items</FONT>', calign => 'CENTER');      
      htp.tableHeader( '&nbsp;');
      htp.tableHeader( '<FONT color="336699" size="+1">' || 
         'Selected Items</FONT>', calign => 'CENTER');      
      htp.tableRowClose;

      -- Loops through the item cursor. For the demo_shuttle, 
      -- two groups are displayed (Demographics; Health and criminal Justice)
      -- Print the item groups
      --
      v_itemgroup_count := 0;
      v_old_group_desc := '---XYZ---';      
      FOR i IN 1 .. t_itemlkup_id.COUNT
      LOOP
         -- Break on group description and print the heading and SELECT control
         IF v_old_group_desc != t_group_description(i)
         THEN
            -- item group header
            v_itemgroup_count := v_itemgroup_count + 1;
            v_item_id_list := NULL;
      
            -- Item group header
            htp.tableRowOpen;
            htp.tableHeader(t_group_description(i));
            htp.tableData( '&nbsp;');
            htp.tableData( '&nbsp;');
            htp.tableRowClose;

            -- SELECT control
            htp.tableRowOpen;
            reports_util_pkg.table_data_open('align="CENTER"');
            htp.formSelectOpen( cname => 'p_group' || v_itemgroup_count || '_leftselect', 
                   nsize => '10', cattributes => ' multiple onDblclick=' ||
                   '"javascript:copyToList(document.edit_page.p_group' || v_itemgroup_count || 
                   '_leftselect, document.edit_page.p_group' || v_itemgroup_count || '_rightselect,''right'');'||
                   'javascript:sortList(p_alphabetize, document.edit_page.p_group' || v_itemgroup_count || 
                   '_rightselect, p_group' || v_itemgroup_count || '_sorted);"' ); 
         END IF;
         
         -- Item group body select member for the item
         htp.formSelectOption( t_item_name(i)   , 
            cattributes => ' value="' || t_itemlkup_id(i) || '"');
         
         -- list of IDs
         IF v_item_id_list IS NULL
         THEN
            v_item_id_list := t_itemlkup_id(i);
         ELSE
            v_item_id_list := v_item_id_list || ',' || t_itemlkup_id(i);
         END IF; 
        
         --
         -- item group footer
         --
         IF i = t_itemlkup_id.COUNT OR 
            t_group_description(i) != t_group_description(i + 1)
         THEN
            htp.formSelectClose;
            htp.formHidden( cname => 'p_group' || v_itemgroup_count || '_left', 
              cvalue => v_item_id_list);
            reports_util_pkg.table_data_close;
            
            -- Move buttons
            htp.tableData( htf.tableOpen || 
               htf.tableRowOpen || 
               htf.tableData( htf.anchor( 'javascript:copyAll(document.edit_page.p_group' || 
                  v_itemgroup_count || '_leftselect, document.edit_page.p_group' || v_itemgroup_count || 
                  '_rightselect,''right'');' ||
                  'javascript:sortList(p_alphabetize, document.edit_page.p_group' || v_itemgroup_count || 
                  '_rightselect, p_group' || v_itemgroup_count || '_sorted);', 
                 htf.img( '/images/moverightall.gif', calign => 'bottom', calt => 'Move All', 
                  cattributes => ' border="0" width="16" height="16"'))) || 
               htf.tableRowClose || 
               htf.tableRowOpen || 
               htf.tableData( htf.anchor( 'javascript:copyToList(document.edit_page.p_group' || 
                  v_itemgroup_count || '_leftselect, document.edit_page.p_group' || v_itemgroup_count || 
                  '_rightselect,''right'');' ||
                  'javascript:sortList(p_alphabetize, document.edit_page.p_group' || v_itemgroup_count || 
                  '_rightselect, p_group' || v_itemgroup_count || '_sorted);', 
                 htf.img( '/images/moveright.gif', calign => 'bottom', calt => 'Move Right', 
                  cattributes => ' border="0" width="16" height="16"'))) || 
               htf.tableRowClose || 
               htf.tableRowOpen || 
               htf.tableData( htf.anchor( 'javascript:copyToList(document.edit_page.p_group' || 
                  v_itemgroup_count || '_rightselect, document.edit_page.p_group' || v_itemgroup_count || 
                  '_leftselect,''left'');' ||
                  'javascript:sortList(p_alphabetize, document.edit_page.p_group' || v_itemgroup_count || 
                  '_leftselect, p_group' || v_itemgroup_count || '_sorted);', 
                 htf.img( '/images/moveleft.gif', calign => 'bottom', calt => 'Move Left', 
                  cattributes => ' border="0" width="16" height="16"'))) || 
               htf.tableRowClose || 
               htf.tableRowOpen || 
               htf.tableData( htf.anchor( 'javascript:copyAll(document.edit_page.p_group' || v_itemgroup_count || 
                  '_rightselect, document.edit_page.p_group' || v_itemgroup_count || '_leftselect,''left'');' ||
                  'javascript:sortList(p_alphabetize, document.edit_page.p_group' || v_itemgroup_count || 
                  '_leftselect, p_group' || v_itemgroup_count || '_sorted);', 
                 htf.img( '/images/moveleftall.gif', calign => 'bottom', calt => 'Move All', 
                  cattributes => ' border="0"'))) || 
               htf.tableRowClose || 
               htf.tableClose);
             
            -- Selected item group control
            htp.tableData(
                htf.formSelectOpen( cname => 'p_group' || v_itemgroup_count || '_rightselect', 
                     nsize => '10', cattributes => ' multiple onDblClick="' || 
                     'javascript:copyToList(document.edit_page.p_group' || v_itemgroup_count || 
                     '_rightselect, document.edit_page.p_group' || v_itemgroup_count || '_leftselect,''left'');'||
                     'javascript:sortList(p_alphabetize, document.edit_page.p_group' || v_itemgroup_count || 
                     '_leftselect, p_group' || v_itemgroup_count || '_sorted);"' ) || 
                htf.formSelectClose, calign => 'CENTER' );
            htp.formHidden( cname => 'p_group' || v_itemgroup_count || '_right', cvalue => '');
            htp.tableRowClose;            
            
         END IF;

         v_old_group_desc := t_group_description(i);
      END LOOP;
      
      htp.tableClose;
      reports_util_pkg.template_footer(v_ok_button, v_cancel_button);
 
      --
      -- Hidden fields
      --
      -- p_action is required but its value is not
      htp.formHidden( cname => 'p_trans_desc', cvalue => v_trans_desc);
      htp.formHidden( cname => 'p_action', cvalue => '');
      htp.formHidden('p_trans_type', p_trans_type);
      htp.formHidden('p_itemgroup_ct', v_itemgroup_count);      
      htp.formClose;

      -- copyright
      reports_util_pkg.template_copyright;      
      htp.print( '</CENTER>' );
      htp.bodyClose;
   END;


   PROCEDURE show_the_report(
      p_action                IN VARCHAR2 DEFAULT NULL,
      p_request               IN VARCHAR2 DEFAULT NULL,
      p_desformat             IN VARCHAR2 DEFAULT NULL, 
      p_p_provider_no         IN VARCHAR2 DEFAULT NULL, 
      p_report_type           IN VARCHAR2 DEFAULT NULL,
      p_p_program_no          IN VARCHAR2 DEFAULT NULL, 
      p_program_type_code     IN VARCHAR2 DEFAULT NULL, 
      p_as_of_date            IN VARCHAR2 DEFAULT NULL, 
      p_from_date             IN VARCHAR2 DEFAULT NULL, 
      p_thru_date             IN VARCHAR2 DEFAULT NULL,
      p_trans_type            IN VARCHAR2 DEFAULT NULL,
      p_itemgroup_ct          IN VARCHAR2 DEFAULT NULL,
      p_trans_desc            IN VARCHAR2 DEFAULT NULL,
      p_group1_left           IN VARCHAR2 DEFAULT NULL,
      p_group1_right          IN VARCHAR2 DEFAULT NULL,
      p_group1_leftselect     IN VARCHAR2 DEFAULT NULL,
      p_group1_rightselect    IN VARCHAR2 DEFAULT NULL,
      p_group2_left           IN VARCHAR2 DEFAULT NULL,
      p_group2_right          IN VARCHAR2 DEFAULT NULL,
      p_group2_leftselect     IN VARCHAR2 DEFAULT NULL,
      p_group2_rightselect    IN VARCHAR2 DEFAULT NULL,
      p_group3_left           IN VARCHAR2 DEFAULT NULL,
      p_group3_right          IN VARCHAR2 DEFAULT NULL,
      p_group3_leftselect     IN VARCHAR2 DEFAULT NULL,
      p_group3_rightselect    IN VARCHAR2 DEFAULT NULL,
      p_group4_left           IN VARCHAR2 DEFAULT NULL,
      p_group4_right          IN VARCHAR2 DEFAULT NULL,
      p_group4_leftselect     IN VARCHAR2 DEFAULT NULL,
      p_group4_rightselect    IN VARCHAR2 DEFAULT NULL)
   IS
      v_program_type_code     VARCHAR2(20) := p_program_type_code;
      v_program_no            VARCHAR2(20) := p_p_program_no;
      v_itemlkup_id_list      VARCHAR2(2000);
      --
      v_arg_names             wwv_utl_api_types.vc_arr;      
      v_arg_values            wwv_utl_api_types.vc_arr;      
   BEGIN
      -- Check the dates
      IF p_from_date IS NOT NULL AND p_thru_date IS NOT NULL 
      THEN  
         IF reports_validation_pkg.dateformat_validation(p_from_date, 'From Date') AND
            reports_validation_pkg.dateformat_validation(p_thru_date, 'Through Date')
         THEN
            reports_validation_pkg.validate_date_order(p_from_date, p_thru_date, 
               'From Date', 'Through Date');
         END IF;
      ELSE
          oasas_reports_validation_pkg.add_error('Both From Date and '||
               'Through Date must be filled in.');
      END IF;
      
      -- Construct and validate the item list      
      v_itemlkup_id_list := util_pkg.strip_dup_commas(p_group1_right || ',' || 
                                 p_group2_right || ',' || p_group3_right || ',' || 
                                 p_group4_right );
      --
      IF v_itemlkup_id_list IS NULL
      THEN 
         reports_validation_pkg.add_error('Select at least one item for the report.');
      END IF;

      -- Populate the default portal error handler with our error messages
      IF reports_validation_pkg.has_errors
      THEN
         reports_util_pkg.show_error_page(p_trans_desc || ' Item Statistics', 
            reports_validation_pkg.g_invalidnames);
      ELSE
          -- this calls the DEMOSHUTTLE reports definition package
          -- which performs all security checking and calls the reports
          -- server. Alternatively, you could call the reports server
          -- directly without having to develop a Portal Reports Definition.
          demoshuttle.show(
              p_desformat => p_desformat,
              p_p_as_of_date => p_as_of_date,
              p_p_from_date => p_from_date, 
              p_p_itemlkup_id_list => v_itemlkup_id_list,
              p_p_program_no => v_program_no,
              p_p_provider_no => p_p_provider_no,
              p_p_program_type_code => v_program_type_code,
              p_p_report_type => p_report_type,
              p_p_thru_date => p_thru_date,
              p_p_translkup_id => p_trans_type,           
              p_p_username => wwctx_api.get_user,
              p_run => 'Run+Report',
              p_cgikey => reports_util_pkg.group_cgikey(wwctx_api.get_user),
--              p_cgikey => 'cdsrep',
              p_portlet_height => 600);            
          
      END IF;
   END;   -- end of show_the_report


/* **************************** *\
||
||
|| Private program units body
||
||
*\ **************************** */


   PROCEDURE param_page_javascript
   IS
   BEGIN
      htp.print('<NOSCRIPT></NOSCRIPT>' );
      htp.print( '<SCRIPT TYPE="text/javascript">' );
      htp.print( '<!-- Comment out script for old browsers'); 
      htp.print('function pageStartup(thispg)'); 
      htp.print('{'); 
      htp.print('      document.forms["edit_page"]["P_PROGRAM_TYPE_CODE"].style.display="none";'); 
      htp.print('      document.forms["edit_page"]["P_P_PROGRAM_NO"].style.display="none";'); 
      htp.print('      document.getElementById("programprompt0").style.display="none";'); 
      htp.print('      document.getElementById("programtypeprompt0").style.display="none";'); 
      htp.print('      document.forms["edit_page"]["P_REPORT_TYPE"].value = 1;'); 
      htp.print('}'); 
      htp.print('function toggleDate(select)'); 
      htp.print('{'); 
      htp.print('   if (select.value == "2")'); 
      htp.print('   {'); 
      htp.print('      // Program Type Code'); 
      htp.print('      //alert("Prog Type");'); 
      htp.print('      document.forms["edit_page"]["P_PROGRAM_TYPE_CODE"].style.display="block";'); 
      htp.print('      document.forms["edit_page"]["P_P_PROGRAM_NO"].style.display="none";'); 
      htp.print('      document.getElementById("programprompt0").style.display="none";'); 
      htp.print('      document.getElementById("programtypeprompt0").style.display="block";'); 
      htp.print('   }'); 
      htp.print('   else if (select.value == "4")'); 
      htp.print('   {'); 
      htp.print('      // Program '); 
      htp.print('      //alert("Prog");'); 
      htp.print('      document.forms["edit_page"]["P_PROGRAM_TYPE_CODE"].style.display="none";'); 
      htp.print('      document.forms["edit_page"]["P_P_PROGRAM_NO"].style.display="block";'); 
      htp.print('      document.getElementById("programprompt0").style.display="block";'); 
      htp.print('      document.getElementById("programtypeprompt0").style.display="none";'); 
      htp.print('   }'); 
      htp.print('   else {'); 
      htp.print('      // -1 = blank, 1 = Provider summary;  5 = All Programs'); 
      htp.print('      //alert("Blank or Prov summary or all progams");'); 
      htp.print('      document.forms["edit_page"]["P_PROGRAM_TYPE_CODE"].style.display="none";'); 
      htp.print('      document.forms["edit_page"]["P_P_PROGRAM_NO"].style.display="none";'); 
      htp.print('      document.getElementById("programprompt0").style.display="none";'); 
      htp.print('      document.getElementById("programtypeprompt0").style.display="none";'); 
      htp.print('   }'); 
      htp.print('}'); 
      htp.print( ' ' );      
      htp.print('function doSubmit(nextscreen)' ); 
      htp.print('                  {' ); 
      htp.print('                    document.edit_page.p_action.value = "Apply"' ); 
      htp.print('                    document.edit_page.p_screen.value = nextscreen;' ); 
      htp.print('                    document.edit_page.submit();' ); 
      htp.print('                  }' ); 
      htp.print('         ' ); 
      htp.print('  function okSubmit()' ); 
      htp.print('                  {' ); 
      htp.print('                    document.edit_page.p_action.value = "OK"' ); 
      htp.print('                    document.edit_page.submit();' ); 
      htp.print('                  }' ); 
      htp.print('              ' ); 
      htp.print('  function applySubmit()' ); 
      htp.print('                  {' ); 
      htp.print('                    document.edit_page.p_action.value = "Apply"' ); 
      htp.print('                    document.edit_page.submit();' ); 
      htp.print('                  }' ); 
      htp.print('//-->' );
      htp.print( '</SCRIPT>' );
   END;

   
   PROCEDURE show_param_values(
      p_action                IN VARCHAR2,
      p_request               IN VARCHAR2,
      p_group1_left           IN VARCHAR2,
      p_group1_right          IN VARCHAR2,
      p_group1_leftselect     IN VARCHAR2,
      p_group1_rightselect    IN VARCHAR2,
      p_group2_left           IN VARCHAR2,
      p_group2_right          IN VARCHAR2,
      p_group2_leftselect     IN VARCHAR2,
      p_group2_rightselect    IN VARCHAR2,
      p_group3_left           IN VARCHAR2,
      p_group3_right          IN VARCHAR2,
      p_group3_leftselect     IN VARCHAR2,
      p_group3_rightselect    IN VARCHAR2,
      p_p_provider_no         IN VARCHAR2, 
      p_report_type           IN VARCHAR2,
      p_p_program_no          IN VARCHAR2, 
      p_program_type_code     IN VARCHAR2, 
      p_as_of_date            IN VARCHAR2, 
      p_from_date             IN VARCHAR2, 
      p_thru_date             IN VARCHAR2,
      p_trans_type            IN VARCHAR2,
      p_itemgroup_ct          IN VARCHAR2,
      p_trans_desc            IN VARCHAR2)
   IS
   BEGIN
      htp.htmlopen;
      htp.bodyopen;
      htp.p('<h2>Parameters</h2>');
      htp.tableopen;

      htp.tableRowOpen(cattributes => 'border="1"');
         htp.tabledata('<b> p_group1_left  = </b>');
         htp.tabledata(p_group1_left          );
         htp.tabledata('<b> p_group1_leftselect = </b>');
         htp.tabledata(p_group1_leftselect    );
      htp.tableRowClose;

      htp.tableRowOpen;
         htp.tabledata('<b> p_group1_right = </b>');
         htp.tabledata(p_group1_right         );
         htp.tabledata('<b> p_group1_rightselect   = </b>');
         htp.tabledata(p_group1_rightselect   );
      htp.tableRowClose;
      
      htp.tableRowOpen;
         htp.tabledata('<b> p_group2_left  = </b>');
         htp.tabledata(p_group2_left          );
         htp.tabledata('<b> p_group2_leftselect = </b>');
         htp.tabledata(p_group2_leftselect    );
      htp.tableRowClose;

      htp.tableRowOpen;
         htp.tabledata('<b> p_group2_right = </b>');
         htp.tabledata(p_group2_right         );
         htp.tabledata('<b> p_group2_rightselect   = </b>');
         htp.tabledata(p_group2_rightselect   );
      htp.tableRowClose;

      htp.tableRowOpen;
         htp.tabledata('<b> p_p_provider_no = </b>');
         htp.tabledata(p_p_provider_no );
         htp.tabledata('<b> p_report_type  = </b>');
         htp.tabledata(p_report_type);
      htp.tableRowClose;
      
      htp.tableRowOpen;
         htp.tabledata('<b> p_p_program_no  = </b>');
         htp.tabledata(p_p_program_no );
         htp.tabledata('<b> p_program_type_code  = </b>');
         htp.tabledata(p_program_type_code);
      htp.tableRowClose;
      
      htp.tableRowOpen;
         htp.tabledata('<b> p_itemgroup_ct  = </b>');
         htp.tabledata(p_itemgroup_ct);
         htp.tabledata('<b> p_as_of_date  = </b>');
         htp.tabledata(p_as_of_date);
      htp.tableRowClose;
      
      htp.tableRowOpen;
         htp.tabledata('<b> p_from_date  = </b>');
         htp.tabledata(p_from_date);
         htp.tabledata('<b> p_thru_date  = </b>');
         htp.tabledata(p_thru_date);
      htp.tableRowClose;
      
      htp.tableRowOpen;
         htp.tabledata('<b> p_trans_type  = </b>');
         htp.tabledata(p_trans_type);
         htp.tabledata('&nbsp;');
         htp.tabledata('&nbsp;');
      htp.tableRowClose;
      
      htp.tableclose;
      htp.bodyclose;
      htp.htmlclose;   
   END;   

END;
/
