#!/usr/bin/perl
#
#
#	Any Units in SGS
#
local($myurl)=$ENV{HTTP_URI};
local($version) = "4.0";
local($release) =     4;
 
local($remouthost) = $ENV{'REMOTE_HOST'};
local($localuser)=1;

local(%Units) = (
  "c",			"3e10",
  "G",			"6.670e-8",
  "k",			"1.38062e-16",
  "R",			"8.3143e7",
  "SolarRadius",	"6.9599e10",
  "SolarMass",		"1.989e33",
  "SolarLuminocity",	"3.826e33",
  "AU",			"1.495979e13",
  "pc",			"3.085678e18",
  "min",		"60.",
  "hour",		"3600.",
  "day",		"86400.",
  "yr",			"3.15567e7",
);

local(%basic_defaults) = (
  "AP",		"600",
  "APchoice",	"A-semimajoraxis(Solarradii)",
  "Mass1",	"12",
  "M2q",	"9",
  "MQchoice",	"M2-secondarymass(Solarmasses)",
  "Ecc",	"0",
  "Topt",	"1.5e10",
  "BMuchoice1",	"B1-initialmagneticfieldof1-stcompactstar(G)",
  "BMuchoice2",	"B2-initialmagneticfieldof2-ndcompactstar(G)",
  "BMuinit1",	"1e12",
  "BMuinit2",	"1e12",
);

local(%kick_defaults) = (
  "Kick1",		"0",
  "Kick2",		"0",
  "KickDirectionChoice",	"uniformrandomdirection",
  "KickPhi1",		"0",
  "KickPhi2",		"0",
  "KickTheta1",		"90",
  "KickTheta2",		"90",
  "KickPhiOrb1",	"0",
  "KickPhiOrb2",	"0",
);

local(%branches_defaults) = (
  "StellarWindChoice",			"low",
  "AcceptMatterByNormalStarChoice",	"partiallynonconservative",
  "AccretionDecayChoice",		"no",
  "WDDecayChoice",			"no",
  "NSDecayChoice",			"no",
  "CESuperAccretionChoice",		"Eddington",
);

local(%additional_defaults) = (
  "AlphaCE",		"1",
  "Mbhchoice",		"pre-SNmassforBHformation(Solarmasses)",
  "Mbh",		"35",
  "Kbh",		"0.3",
  "Mov",		"2.5",
  "TdissWD",		"1e10",
  "TdissNS",		"1e8",
  "PinitChoice",	"WD-momentumconserwation,NS-userdefined",
  "Pinit1",		"1e-3",
  "Pinit2",		"1e-3",
);

#
# Column definition - before %output_defaults.
#
local(%columns) = (
  "col01",	"on",
  "col02",	"on",
  "col03",	"on",
  "col04",	"on",
  "col05",	"on",
  "col06",	"on",
  "col07",	"on",
  "col08",	"on",
  "col09",	"on",
  "col10",      "on",
  "col11",      "on",
  "col12",      "on",
  "col13",      "on",
  "col14",      "on",
  "col15",      "on",
  "col16",      "on",
  "col17",      "on",
  "col18",      "on",
  "col19",      "on",
  "col20",      "on",
  "col21",      "on",
  "col22",      "on",
  "col23",      "on",
  "col24",      "on",
  "col25",      "on",
  "col26",      "on",
  "col27",      "on",
);    

local(%columns_help) = (
  "col01",	"duration",
  "col02",	"time",
  "col03",	"masses",
  "col04",	"semimajor_axes",
  "col05",	"orbital_period",
  "col06",	"eccentricity",
  "col07",	"common_envelope",
  "col08",	"magnetic_breaking",
  "col09",	"mass_loss_rate",
  "col10",      "accretion_rate",
  "col11",      "stellar_radius",
  "col12",      "R_Roche_lobe",
  "col13",      "liminosity",
  "col14",      "wind_velocity",
  "col15",      "mass_core",
  "col16",      "binary_type",
  "col17",      "mass_transfer_mode",
  "col18",      "period",
  "col19",      "magnetic_momentum",
  "col20",      "magnetic_field",
  "col21",      "R_stop",
  "col22",      "R_y",
  "col23",      "R_G",
  "col24",      "R_cor",
  "col25",      "R_l",
  "col26",      "potential_duration",
  "col27",      "velocity",
);    

local(%columns_bynaryonly) = (
  "col01",	"N",
  "col02",	"N",
  "col03",	"N",
  "col04",	"Y",
  "col05",	"Y",
  "col06",	"Y",
  "col07",	"Y",
  "col08",	"Y",
  "col09",	"N",
  "col10",      "N",
  "col11",      "N",
  "col12",      "Y",
  "col13",      "N",
  "col14",      "N",
  "col15",      "N",
  "col16",      "Y",
  "col17",      "Y",
  "col18",      "N",
  "col19",      "N",
  "col20",      "N",
  "col21",      "N",
  "col22",      "N",
  "col23",      "N",
  "col24",      "N",
  "col25",      "N",
  "col26",      "Y",
  "col27",      "N",
);    

local(%columns_names) = (
  "col01",	"Duration",
  "col02",	"Time",
  "col03",	"Masses",
  "col04",	"A",
  "col05",	"P_orb",
  "col06",	"ecc",
  "col07",	"CE",
  "col08",	"Magn.Breaking",
  "col09",	"Mass_Loss",
  "col10",      "Accreting_Rate",
  "col11",      "Radii",
  "col12",      "R_Roche_Lobe",
  "col13",      "Luminosity",
  "col14",      "Wind_Veloc.",
  "col15",      "M_Cores",
  "col16",      "Type",
  "col17",      "Mode",
  "col18",      "Period",
  "col19",      "Magnet.Moment.",
  "col20",      "Surface_B",
  "col21",      "Rstop",
  "col22",      "Ry",
  "col23",      "RG",
  "col24",      "R_corot",
  "col25",      "R_Light_Cyl",
  "col26",      "Potent._dT",
  "col27",      "Velocity",
);    

local(%output_defaults) = (
  "label",		"",
  "OutputChoice",	"Output-Image",
  "OutRowsChoice",	"Showsystemstateatthestagebeginning",
   %columns,
);

local(%save_defaults) = (
  "title",		"",
  "comment",		"",
  "saved-version",	$version,
  "saved-release",	$release,
);

#
#	form_params = \Sum all param for form
#
local(%form_params) = ( 
  %basic_defaults, 
  %kick_defaults, 
  %branches_defaults, 
  %additional_defaults, 
  %output_defaults, 
  %save_defaults,
  'whereIam', 'MainMenu',
  'binary',   'Y',
);


#
# Selection - Choices
#
local($select) = " selected";

local(%APchoiceValue) = (
  "A-semimajoraxis(Solarradii)",	0,
  "A-semimajoraxis(cm)",		1,
  "P-orbitalperiod(s)",			2,
  "P-orbitalperiod(h)",			3,
  "P-orbitalperiod(day)",		4,
  "P-orbitalperiod(yr)",		5,
);

local(@APchoiceTitle) = (
  "A - semimajor axis (Solar radii)",
  "A - semimajor axis (cm)",
  "P - orbital period (s)",
  "P - orbital period (h)",
  "P - orbital period (day)",
  "P - orbital period (yr)",
);

local(@APchoiceSelection) = ( "", "", "", "", "", "" );

local(%MQchoiceValue) = (
  "q=M2/M1",				0,
  "M2-secondarymass(Solarmasses)",	1,
);

local(@MQchoiceTitle) = (
  "q = M2/M1",
  "M2 - secondary mass (Solar masses)",
);

local(@MQchoiceSelection) = ( "", "" );

local(%BMuchoice1Value) = (
  "B1-initialmagneticfieldof1-stcompactstar(G)",         0,
  "Mu1-initialmagneticmomentumof1-stcompactstar(Gcm^3)", 1,
);

local(@BMuchoice1Title) = (
  "B1 - initial magnetic field of 1-st compact star (G)",
  "Mu1 - initial magnetic momentum of 1-st compact star (G cm^3)",
);

local(@BMuchoice1Selection) = ( "", "" );

local(%BMuchoice1Title) = (
  "B2-initialmagneticfieldof2-ndcompactstar(G)",         "B2 - initial magnetic field of 2-nd compact star (G)",
  "Mu2-initialmagneticmomentumof2-ndcompactstar(Gcm^3)", "Mu2 - initial magnetic momentum of 2-nd compact star (G cm^3)",
);

local(%BMuchoice2Value) = (
  "B2-initialmagneticfieldof2-ndcompactstar(G)",         0,
  "Mu2-initialmagneticmomentumof2-ndcompactstar(Gcm^3)", 1,
);

local(@BMuchoice2Title) = (
  "B2 - initial magnetic field of 2-nd compact star (G)",
  "Mu2 - initial magnetic momentum of 2-nd compact star (G cm^3)",
);

local(@BMuchoice2Selection) = ( "", "" );

local(%KickDirectionChoiceValue) = (
  "uniformrandomdirection",	0,
  "user defined direction",	1,
);

local(@KickDirectionChoiceTitle) = (
  "uniform random direction",
  "user defined direction",
);

local(@KickDirectionChoiceSelection) = ( "", "" );

local(%StellarWindChoiceValue) = (
  "high",	0,
  "low",	1,
);

local(@StellarWindChoiceTitle) = (
  "high",
  "low",
);

local(@StellarWindChoiceSelection) = ( "", "" );

local(%AccretionDecayChoiceValue) = (
  "yes",	0,
  "no", 	1,
);

local(@AccretionDecayChoiceTitle) = (
  "yes",
  "no",
);

local(@AccretionDecayChoiceSelection) = ( "", "" );

local(%WDDecayChoiceValue) = (
  "yes",	0,
  "no", 	1,
);

local(@WDDecayChoiceTitle) = (
  "yes",
  "no",
);

local(@WDDecayChoiceSelection) = ( "", "" );

local(%NSDecayChoiceValue) = (
  "yes",	0,
  "no", 	1,
);

local(@NSDecayChoiceTitle) = (
  "yes",
  "no",
);

local(@NSDecayChoiceSelection) = ( "", "" );

local(%CESuperAccretionChoiceValue) = (
  "Eddington",	0,
  "nolimit",	1,
);

local(@CESuperAccretionChoiceTitle) = (
  "Eddington",
  "nolimit",
);

local(@CESuperAccretionChoiceSelection) = ( "", "" );

local(%AcceptMatterByNormalStarChoiceValue) = (
  "conservative",		0,
  "fullynonconservative",	1,
  "partiallynonconservative",	2,
);

local(@AcceptMatterByNormalStarChoiceTitle) = (
  "conservative",
  "fully nonconservative",
  "partially nonconservative",
);

local(@AcceptMatterByNormalStarChoiceSelection) = ( "", "", "" );

local(%MbhchoiceValue) = (
  "initialmassforBHformation(Solarmasses)",	0,
  "pre-SNmassforBHformation(Solarmasses)",	1,
);

local(@MbhchoiceTitle) = (
  "initial mass for BH formation (Solar masses)",
  "pre-SN mass for BH formation (Solar masses)",
);

local(@MbhchoiceSelection) = ( "", "" );

local(%PinitChoiceValue) = (
  "both-momentumconservation",			0,
  "WD-momentumconserwation,NS-userdefined",	1,
  "WD-userdefined,NS-momentumconserwation",	2,
  "both-userdefined",				3,
);

local(@PinitChoiceTitle) = (
  "both - momentum conservation",
  "WD - momentum conserwation, NS - user defined",
  "WD - user defined, NS - momentum conserwation",
  "both - user defined",
);

local(@PinitChoiceSelection) = ( "", "", "", "" );

local(%OutRowsChoiceValue) = (
  "Showsystemstateatthestagebeginning",		0,
  "Showsystemstateatthestageend",		1,
  "Showsystemstateatbothstagebeginningandend",	2,
);

local(@OutRowsChoiceTitle) = (
  "Show system state at the stage beginning",
  "Show system state at the stage end",
  "Show system state at both stage beginning and end",
);

local(@OutRowsChoiceSelection) = ( "", "", "" );

local(%OutputChoiceValue) = (			       
  "Output-TextTable",		0,		       
  "Output-Image",			1,	       
  "ViewScriptOutput(fordebug)",	2,		       
  "ViewImageInput(fordebug)",	3,		       
);						       

local(@OutputChoiceTitle) = (			       
  "Output - Text Table",			       
  "Output - Image",				       
  "View Script Output (for debug)",		       
  "View Image Input (for debug)",		       
); 

local(@OutputChoiceSelection) = ( "", "", "", "" );    

local(%Value) = (
  "",	0,
  "",	1,
);

local(@Title) = (
  "",
  "",
);

local(@Selection) = ( "", "" );

local(%Value) = (
  "",	0,
  "",	1,
);

local(@Title) = (
  "",
  "",
);

local(@Selection) = ( "", "" );

local(%Value) = (
  "",	0,
  "",	1,
);

local(@Title) = (
  "",
  "",
);

local(@Selection) = ( "", "" );

local(%Value) = (
  "",	0,
  "",	1,
);

local(@Title) = (
  "",
  "",
);

local(@Selection) = ( "", "" );

#----------------------------------------------------------------------

local($descr_base)   = "/sciwork/scenario/description.html";
local($outhelp_base) = "/sciwork/scenario/outputhelp.html";

local(%errors) = (
  "AP",		0,
  "Mass1",	0,
  "M2q",	0,
  "Ecc",	0,
  "Topt",	0,
  "BMuinit1",	0,
  "BMuinit2",	0,
  "Kick1",	0,
  "Kick2",	0,
  "KickPhi1",	0,
  "KickPhi2",	0,
  "KickTheta1",	0,
  "KickTheta2",	0,
  "KickPhiOrb1", 0,
  "KickPhiOrb2", 0,
  "Mbh",	0,
  "AlphaCE",	0,
  "Kbh",	0,
  "Mov",	0,
  "TdissWD",	0,
  "TdissNS",	0,
  "Pinit1",	0,
  "Pinit2",	0,
);

local(@form_selection) = (
  @APchoiceSelection,
  @MQchoiceSelection,
  @BMuchoice1Selection,
  @BMuchoice2Selection
);

local(%arguments);
local($myname) = "main_form.4.0.y.cgi"; # (split( '/', $0 ))[-1];


#----- New in 4.0.2.html --------------------------------------------#
local($counter_all,$counter_remout,$counter_w); # MainA calls Counter
#--------------------------------------------------------------------#
#                                                                    #
#                            Main Program                            #
#                                                                    #
#--------------------------------------------------------------------#
&parse_input;

if    ( $arguments{'action'} eq '' )
{
   $form_params{'whereIam'} = "MainMenu";
   &printMainMenu; 
}
elsif ( $arguments{'action'} eq 'Top' )
{
   &get_params;

   if( $form_params{'saved-version'} eq "" ) { 
       $form_params{'saved-version'} = "4.0";
   } 
   if( $form_params{'saved-release'} eq "" ) { 
       $form_params{'saved-release'} = 2;
   } 

   &correct_params;

   $form_params{'whereIam'} = "MainMenu";
   &printMainMenu; 
}
elsif ( $arguments{'action'} eq 'BasicParameters' ||
        $arguments{'action'} eq 'Single'          ||
        $arguments{'action'} eq 'Binary' )
{
   &get_params;
   $form_params{'whereIam'} = "BasicMenu";

   if   ( $arguments{'action'} eq "Single" ) { $form_params{'binary'}='N'; }
   elsif( $arguments{'action'} eq "Binary" ) { $form_params{'binary'}='Y'; }

   &printBasicParametersMenu; 
}
elsif ( $arguments{'action'} eq 'KickVelocity' )
{
   &get_params;
   $form_params{'whereIam'} = "KickMenu";
   &printKickVelocityMenu; 
}
elsif ( $arguments{'action'} eq 'ScenarioBranches' )
{
   &get_params;
   $form_params{'whereIam'} = "BranchesMenu";
   &printScenarioBranchesMenu; 
}
elsif ( $arguments{'action'} eq 'AdditionalParameters' )
{
   &get_params;
   $form_params{'whereIam'} = "AdditionalMenu";
   &printAdditionalParametersMenu; 
}
elsif ( $arguments{'action'} eq 'OutputParameters' )
{
   &get_params;
   $form_params{'whereIam'} = "OutputMenu";
   &printOutputParametersMenu; 
}
elsif ( $arguments{'action'} eq 'AllOn' or $arguments{'action'} eq 'AllOff' )
{
   &get_params;
   $form_params{'whereIam'} = "OutputMenu";

   if( $arguments{'action'} eq 'AllOn' ) {
       foreach ( keys(%columns) ){ $form_params{$_} = "on"; } }
   else {
       foreach ( keys(%columns) ){ $form_params{$_} = ""; } }
   
   &printOutputParametersMenu; 
}
elsif ( $arguments{'action'} eq 'Start' )
{
   &get_params;
#  $form_params{'whereIam'} = "";

   if( $form_params{'saved-version'} eq "" ) { 
       $form_params{'saved-version'} = "4.0";
   } 
   if( $form_params{'saved-release'} eq "" ) { 
       $form_params{'saved-release'} = 2;
   } 

   &correct_params;

   if( not &ValidateBasicParameters )
   {
      $form_params{'whereIam'} = "BasicMenu";
      &printBasicParametersMenu( "Error Parameter" ); 
   }
   elsif( not &ValidateKickVelocity )
   {
      $form_params{'whereIam'} = "KickVelocityMenu";
      &printKickVelocityMenu( "Error Parameter" ); 
   }
   elsif( not &ValidateAdditionalParameters )
   {
      $form_params{'whereIam'} = "AdditionalMenu";
      &printAdditionalParametersMenu( "Error Parameter" ); 
   }
   else
   {
      if ( $form_params{'OutputChoice'} eq 'Output-Image' or
           $form_params{'OutputChoice'} eq 'Output-TextTable' )
      {
         &Index;
      }

      if ( $form_params{'OutputChoice'} eq 'Output-Image' )
      {
         $| = 1;
         print "Content-type: image/gif\n";
         print "Window-target: w1\n";
         print "Cache-control: no-store\n";
         print "Pragma: no-cache\n";
         print "\n";
         $| = 0;
      }
      else
      {
         &start_out_to_win( "Results of calculation", "Results-Table" );
         $| = 1;
         print STDOUT <<EOM;
<CENTER>
<IMG SRC="/sciwork/images/scenario_head1.gif" alt="Scenario Machine 4.0.y.beta"><BR>
<IMG SRC="/sciwork/images/subtitle_results.gif" alt="results of calculation"><BR>
<hr>

If you have some comments or find errors please fill free to
<A href="mailto:scenario\@sai.msu.su">send a letter to us</A>.<p>

EOM
         if( $form_params{'OutputChoice'} eq 'Output-TextTable' )
         {
             print STDOUT "  <table border=5 cellpadding=5>\n";
         }
         else
         {
             print STDOUT "</CENTER>\n  <PRE>\n";
         }

         $| = 0;
      }

      &StartProgram;

      if( $form_params{'OutputChoice'} eq 'Output-TextTable' )
      {
         print STDOUT <<EOM;
  </table> 
  <br>
</CENTER>
EOM
         &end_out;
      }
      elsif( $form_params{'OutputChoice'} eq 'ViewScriptOutput(fordebug)' or
             $form_params{'OutputChoice'} eq 'ViewImageInput(fordebug)' )
      {
         print STDOUT <<EOM;
  </PRE> 
  <br>
EOM
         &end_out;
      }
   }
}
elsif ( $arguments{'action'} eq 'Save' )
{
   &get_params;
   $form_params{'whereIam'} = "SaveMenu";
   &printSaveMenu;
}
elsif ( $arguments{'action'} eq 'Cancel' )	# from SaveMenu
{
   # Button Save is only in Main Menu
   &get_params;
   # vosstanovit' comment & title
   $form_params{'whereIam'} = "MainMenu";
   &printMainMenu; 
}
elsif ( $arguments{'action'} eq 'OK' )		# from SaveMenu
{
   # Button Save is only in Main Menu
   &get_params;
   # vosstanovit' comment & title

   &printSaveFile;

   #$form_params{'whereIam'} = "MainMenu";
   #&printMainMenu; 
}
elsif ( $arguments{'action'} eq 'Default' )
{
   &get_params;
   #$form_params{'whereIam'} = "";
   &reset_params;

   if    ( $form_params{'whereIam'} eq 'MainMenu' ) 
	{ &printMainMenu; }
   elsif ( $form_params{'whereIam'} eq 'BasicMenu' )
	{ &printBasicParametersMenu; }
   elsif ( $form_params{'whereIam'} eq 'KickVelocityMenu' )
      { &printKickVelocityMenu; }
   elsif ( $form_params{'whereIam'} eq 'BranchesMenu' )
      { &printScenarioBranchesMenu; }
   elsif ( $form_params{'whereIam'} eq 'AdditionalMenu' )
      { &printAdditionalParametersMenu; }
   elsif ( $form_params{'whereIam'} eq 'OutputMenu' )
      { &printOutputParametersMenu; }

}
else
{
      &get_params;
      &start_out( "Just a test" );
      print STDOUT "<H1>DEBUG OUTPUT</H1>\n";
      print STDOUT "<hr>\n";
      &test_params;    
      print STDOUT "<hr>\n";
      &end_out;
}

#--------------------------------------------------------------------#
#                                                                    #
#                            Subroutines                             #
#                                                                    #
#--------------------------------------------------------------------#
sub Index {
	open  INDEX, "index index.4.0.x|";
	read  INDEX, $counter_w, 30;
	close INDEX;

	$counter_w =~ /^(.*)\s(.*)\n/;
	$counter_all=$1; $counter_remout=$2; 
}

sub ReadIndex {
	open  INDEX, "index.4.0.x";
	read  INDEX, $counter_w, 30;
	close INDEX;

	$counter_w =~ /^(.*)\s(.*)\n/;
	$counter_all=$1; $counter_remout=$2;
}

sub start_out {
    local($title) = $_[0];
    $| = 1;
    print "Content-type: text/html\nPragma: no-cache\n\n";

    print "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n";
    print "<HTML>\n";
    print "<HEAD>\n";
    print "<TITLE>", $title, "</TITLE>\n";
    print "</HEAD>\n";
    print "<BODY background=\"/patterns/grey.jpg\">\n";
    $| = 0;
}

sub start_out_to_win {
    local($title, $winname);
    if( $form_params{'label'} eq '' ) {
        $title   = $_[0];
        $winname = $_[1];
    } else {
        $title = $_[0]." ($form_params{'label'})";
        $winname = $form_params{'label'};
    }
    $| = 1;
    print "Content-type: text/html\n";
    print "Window-target: $winname\n\n";

    print "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n";
    print "<HTML>\n";
    print "<HEAD>\n";
    print "<TITLE>", $title, "</TITLE>\n";
    print "</HEAD>\n";
    print "<BODY background=\"/patterns/grey.jpg\">\n";
    $| = 0;
}

sub end_out {
    $| = 1;
    print STDOUT <<EOM;
   
<TABLE BORDER=1 CELLPADDING=5 WIDTH=100%>
<TR>
<TD><IMG HSPACE=8 VSPACE=0 WIDTH=51 HEIGHT=52 BORDER=0 SRC="/sciwork/images/gear.gif" ALT=""></TD>
<TD>
This page was produced by <I>The Evolution Track Constructor</I>,
a WWW interface script written by
<A HREF="http://xray.sai.msu.su/~leng/">Sergey Nazin</A>
<A HREF="mailto:leng\@sai.msu.su">
&lt;leng\@sai.msu.su&gt;</A>
for <A HREF="http://xray.sai.msu.su/sciwork/credits.html">
<I>The Scenario Machine Code</I></A>
<br>Copyright &copy;1996 All Rights Reserved.<br>
</TD>
</TR>
</TABLE>

EOM
    $| = 0;
}

sub parse_input {
    foreach ( split( /&/, <> ) )
    { 
      local($index,$value) = m/(.+)=(.*)/; 
      if( $index ne "title" && $index ne "comment" ) {
          $value =~ tr/+/ /;
          while( $value =~ m/%(\w\w)/ ){ $value = $` . chr(hex($1)) . $'; }
          $value =~ s/\s//g;
          $arguments{$index} = $value;
      }
      else {
          $value =~ tr/+/ /;
          while( $value =~ m/%(\w\w)/ ){ $value = $` . chr(hex($1)) . $'; }
          # $value =~ s/\s//g;
          $arguments{$index} = $value;
      }
    }
}

sub get_params {
   foreach ( keys(%form_params) ){ $form_params{$_} = $arguments{$_}; }
}

sub test_params {
    foreach (keys(%arguments)){ print "$_ = \"$arguments{$_}\"<br>\n"; }
}

sub correct_params {
    if( $form_params{'saved-release'} < 3 ) {
#	WDDecayChoice.
#
        $form_params{'WDDecayChoice'} = "yes";

#	NSDecayChoice.
#
        $form_params{'NSDecayChoice'} = "yes";
    }

    if( $form_params{'saved-release'} < 4 ) {
#	Initialy Binary/Single.
#
        $form_params{'binary'} = "Y";
    }

    $form_params{'saved-version'} = $version;
    $form_params{'saved-release'} = $release;
}

sub reset_params {
   if    ( $form_params{'whereIam'} eq 'MainMenu' ) {
      foreach ( keys(%basic_defaults) ){ $form_params{$_} = $basic_defaults{$_}; }
      foreach ( keys(%kick_defaults) ){ $form_params{$_} = $kick_defaults{$_}; }
      foreach ( keys(%branches_defaults) ){ $form_params{$_} = $branches_defaults{$_}; }
      foreach ( keys(%additional_defaults) ){ $form_params{$_} = $additional_defaults{$_}; }
      foreach ( keys(%output_defaults) ){ $form_params{$_} = $output_defaults{$_}; }
   }
   elsif ( $form_params{'whereIam'} eq 'BasicMenu' ) {
      foreach ( keys(%basic_defaults) ){ $form_params{$_} = $basic_defaults{$_}; }
   }
   elsif ( $form_params{'whereIam'} eq 'KickVelocityMenu' ) {
      foreach ( keys(%kick_defaults) ){ $form_params{$_} = $kick_defaults{$_}; }
   }
   elsif ( $form_params{'whereIam'} eq 'BranchesMenu' ) {
      foreach ( keys(%branches_defaults) ){ $form_params{$_} = $branches_defaults{$_}; }
   }
   elsif ( $form_params{'whereIam'} eq 'AdditionalMenu' ) {
      foreach ( keys(%additional_defaults) ){ $form_params{$_} = $additional_defaults{$_}; }
   }
   elsif ( $form_params{'whereIam'} eq 'OutputMenu' ) {
      foreach ( keys(%output_defaults) ){ $form_params{$_} = $output_defaults{$_}; }
   }

}

sub printMainMenu {
    &setChoice;

    &start_out( "Scenario Machine: Main Menu" );
    &printHeader;
    &printBegForm;

    &printTopKey;
    &printMainMenuKey;
    &printEndForm;
    &end_out;
}

sub printBasicParametersMenu {
    &setChoice;

    &start_out( "Scenario Machine: Basic Parameters" );
    &printHeader;
    &printBegForm;
    &printSubmenuKey;
    &printBasicParametersKey;
    &printEndForm;
    &end_out;
}

sub printKickVelocityMenu {
    &setChoice;

    &start_out( "Scenario Machine: Kick Velocity" );
    &printHeader;
    &printBegForm;
    &printSubmenuKey;
    &printKickVelocityKey;
    &printEndForm;
    &end_out;
}

sub printScenarioBranchesMenu {
    &setChoice;

    &start_out( "Scenario Machine: Scenario Branches" );
    &printHeader;
    &printBegForm;
    &printSubmenuKey;
    &printScenarioBranchesKey;
    &printEndForm;
    &end_out;
}

sub printAdditionalParametersMenu {
    &setChoice;

    &start_out( "Scenario Machine: Additional Parameters" );
    &printHeader;
    &printBegForm;
    &printSubmenuKey;
    &printAdditionalParametersKey;
    &printEndForm;
    &end_out;
}

sub printOutputParametersMenu {
    &setChoice;

    &start_out( "Scenario Machine: Output Parameters" );
    &printHeader;
    &printBegForm;
    &printSubmenuKey;
    &printOutputParametersKey;
    &printEndForm;
    &end_out;
}

sub setChoice {

    local($i);

#	APchoice
#
    for ($i=0; $i<@APchoiceSelection; $i++) { $APchoiceSelection[$i] = ""; }
    $APchoiceSelection[$APchoiceValue{$form_params{'APchoice'}}] = $select;

#	MQchoice
#
    for ($i=0; $i<@MQchoiceSelection; $i++) { $MQchoiceSelection[$i] = ""; }
    $MQchoiceSelection[$MQchoiceValue{$form_params{'MQchoice'}}] = $select;


#	BMuchoice
#
    for ($i=0; $i<@BMuchoice1Selection; $i++) { $BMuchoice1Selection[$i] = ""; }
    $BMuchoice1Selection[$BMuchoice1Value{$form_params{'BMuchoice1'}}] = $select;

    for ($i=0; $i<@BMuchoice2Selection; $i++) { $BMuchoice2Selection[$i] = ""; }
    $BMuchoice2Selection[$BMuchoice2Value{$form_params{'BMuchoice2'}}] = $select;

#	KickDirectionChoice
#
    for ($i=0; $i<@KickDirectionChoiceSelection; $i++) 
        { $KickDirectionChoiceSelection[$i] = ""; }
    $KickDirectionChoiceSelection[$KickDirectionChoiceValue{$form_params{'KickDirectionChoice'}}] = $select;

#	StellarWindChoice.
#
    for ($i=0; $i<@StellarWindChoiceSelection; $i++) 
        { $StellarWindChoiceSelection[$i] = ""; }
    $StellarWindChoiceSelection[$StellarWindChoiceValue{$form_params{'StellarWindChoice'}}] = $select;

#	AccretionDecayChoice.
#
    for ($i=0; $i<@AccretionDecayChoiceSelection; $i++) 
        { $AccretionDecayChoiceSelection[$i] = ""; }
    $AccretionDecayChoiceSelection[$AccretionDecayChoiceValue{$form_params{'AccretionDecayChoice'}}] = $select;

#	WDDecayChoice.
#
    for ($i=0; $i<@WDDecayChoiceSelection; $i++) 
        { $WDDecayChoiceSelection[$i] = ""; }
    $WDDecayChoiceSelection[$WDDecayChoiceValue{$form_params{'WDDecayChoice'}}] = $select;

#	NSDecayChoice.
#
    for ($i=0; $i<@NSDecayChoiceSelection; $i++) 
        { $NSDecayChoiceSelection[$i] = ""; }
    $NSDecayChoiceSelection[$NSDecayChoiceValue{$form_params{'NSDecayChoice'}}] = $select;

#	CESuperAccretionChoice.
#
    for ($i=0; $i<@CESuperAccretionChoiceSelection; $i++) 
        { $CESuperAccretionChoiceSelection[$i] = ""; }
    $CESuperAccretionChoiceSelection[$CESuperAccretionChoiceValue{$form_params{'CESuperAccretionChoice'}}] = $select;

#	AcceptMatterByNormalStarChoice.
#
    for ($i=0; $i<@AcceptMatterByNormalStarChoiceSelection; $i++) 
        { $AcceptMatterByNormalStarChoiceSelection[$i] = ""; }
    $AcceptMatterByNormalStarChoiceSelection[$AcceptMatterByNormalStarChoiceValue{$form_params{'AcceptMatterByNormalStarChoice'}}] = $select;

#	Mbhchoice.
#
    for ($i=0; $i<@MbhchoiceSelection; $i++) 
        { $MbhchoiceSelection[$i] = ""; }
    $MbhchoiceSelection[$MbhchoiceValue{$form_params{'Mbhchoice'}}] = $select;

#	PinitChoice.
#
    for ($i=0; $i<@PinitChoiceSelection; $i++) 
        { $PinitChoiceSelection[$i] = ""; }
    $PinitChoiceSelection[$PinitChoiceValue{$form_params{'PinitChoice'}}] = $select;

#	OutRowsChoice.
#
    for ($i=0; $i<@OutRowsChoiceSelection; $i++) 
        { $OutRowsChoiceSelection[$i] = ""; }
    $OutRowsChoiceSelection[$OutRowsChoiceValue{$form_params{'OutRowsChoice'}}] = $select;

#	OutputChoice.
#
    for ($i=0; $i<@OutputChoiceSelection; $i++) 
        { $OutputChoiceSelection[$i] = ""; }
    $OutputChoiceSelection[$OutputChoiceValue{$form_params{'OutputChoice'}}] = $select;

##	.
##
#    for ($i=0; $i<@Selection; $i++) 
#        { $Selection[$i] = ""; }
#    $Selection[$Value{$form_params{''}}] = $select;
#
}

sub printChoice {
	
    local($i, $p1, $p2);  $p1 = $_[1]; $p2 = $_[2];

    print STDOUT " <SELECT NAME=\"", $_[0], "\">\n";

    for( $i=0; $i<$_[3]; $i++ )
    {
         print STDOUT "      <option", $$p2[$i], "> ", $$p1[$i], "\n"
    }

    print STDOUT " </SELECT>\n";

}

sub printHidden {

    local($keyname, $i);

    print STDOUT "\n<!--- Hidden Form Fields ---------------------------------------------------------->\n\n";

    if ( $form_params{'whereIam'} eq "MainMenu" )
    {
       foreach $keyname ( keys(%form_params) )
       {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$keyname\"  VALUE=\"$form_params{$keyname}\">\n";
       }
    }
    elsif ( $form_params{'whereIam'} eq "BasicMenu" )
    {
       foreach $keyname ( keys(%form_params) )
       {
          if( ! exists $basic_defaults{$keyname} )
          {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$keyname\"  VALUE=\"$form_params{$keyname}\">\n";
          }
       }
    }
    elsif ( $form_params{'whereIam'} eq "KickMenu" )
    {
       foreach $keyname ( keys(%form_params) )
       {
          if( ! exists $kick_defaults{$keyname} )
          {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$keyname\"  VALUE=\"$form_params{$keyname}\">\n";
          }
       }
    }
    elsif ( $form_params{'whereIam'} eq "BranchesMenu" )
    {
       foreach $keyname ( keys(%form_params) )
       {
          if( ! exists $branches_defaults{$keyname} )
          {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$keyname\"  VALUE=\"$form_params{$keyname}\">\n";
          }
       }
    }
    elsif ( $form_params{'whereIam'} eq "AdditionalMenu" )
    {
       foreach $keyname ( keys(%form_params) )
       {
          if( ! exists $additional_defaults{$keyname} )
          {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$keyname\"  VALUE=\"$form_params{$keyname}\">\n";
          }
       }
    }
    elsif ( $form_params{'whereIam'} eq "OutputMenu" )
    {
       foreach $keyname ( keys(%form_params) )
       {
          if( ! exists $output_defaults{$keyname} )
          {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$keyname\"  VALUE=\"$form_params{$keyname}\">\n";
          }
       }
    }
    elsif ( $form_params{'whereIam'} eq "SaveMenu" )
    {
       print STDOUT "<INPUT TYPE=HIDDEN NAME=\"saved-version\" VALUE=\"$version\">\n";
       print STDOUT "<INPUT TYPE=HIDDEN NAME=\"saved-release\" VALUE=\"$release\">\n";

       foreach $keyname ( keys(%form_params) )
       {
          if( ! exists $save_defaults{$keyname} )
          {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$keyname\"  VALUE=\"$form_params{$keyname}\">\n";
          }
       }
    }
}

sub printBegForm {

    print STDOUT <<EOM;

<CENTER>
<FORM METHOD=post ACTION="$myname">

EOM
}

sub printEndForm {

    &printHidden;

    print STDOUT <<EOM;

</FORM>
</CENTER>

EOM
}

sub printHeader {

    print STDOUT <<EOM;

<CENTER>
<IMG SRC="/sciwork/images/scenario_head1.gif" alt="Scenario Machine 4.0.x.beta"><BR>
<IMG SRC="/sciwork/images/subtitle.gif" alt="evolution track constructor"><BR>
<hr>

If you have some comments or find errors please fill free to
<A href="mailto:scenario\@sai.msu.su">send a letter to us</A>.
</CENTER>

EOM
}

sub printTopKey {

    print STDOUT <<EOM;

<!-- Main Buttons ------------------------------------------------------->

<hr size=5>
<CENTER>
<font size=5 color=RED><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Start ">
</b>
</font>
<font size=5 color=GREEN><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Default ">
EOM
if( $localuser ) {
    print STDOUT ' <INPUT TYPE="submit" NAME=action VALUE=" Debug ">';
}
    print STDOUT <<EOM;
</b>
</font>
<font size=5 color=GRAY><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Save ">
</b>
</font>
</CENTER>
<hr>

EOM
}

sub printSubmenuKey {

    print STDOUT <<EOM;

<!-- Common Buttons ------------------------------------------------------->

<A NAME="BasicParameters">
<CENTER>
<font size=5 color=RED><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Start ">
</b>
</font>
<font size=5 color=GREEN><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Top ">
 <INPUT TYPE="submit" NAME=action VALUE=" Default ">
EOM
if( $localuser ) {
    print STDOUT ' <INPUT TYPE="submit" NAME=action VALUE=" Debug "></b></font>';
}

print STDOUT "\n<font size=5 color=Blue><b>\n";

if( $form_params{'whereIam'} eq 'BasicMenu' ) {
  if( $form_params{'binary'} eq 'Y' ) {
    print STDOUT ' <INPUT TYPE="submit" NAME=action VALUE=" Single ">';
  } else {
    print STDOUT ' <INPUT TYPE="submit" NAME=action VALUE=" Binary ">';
  }
}

print STDOUT "</b></font>\n</CENTER>\n";

}

sub printMainMenuKey {

    &ReadIndex;

    print STDOUT <<EOM;
<!-- Main Menu --------------------------------------------------------->

<CENTER>
<font size=7>Main Menu</font><br>
<font size=5 color=BLUE><pre>
<INPUT TYPE="submit" NAME=action VALUE=" Basic Parameters      ">
<INPUT TYPE="submit" NAME=action VALUE=" Kick Velocity         ">
<INPUT TYPE="submit" NAME=action VALUE=" Scenario Branches     ">
<INPUT TYPE="submit" NAME=action VALUE=" Additional Parameters ">
<INPUT TYPE="submit" NAME=action VALUE=" Output Parameters     ">
</pre></font>
<em><font size=5>
EOM

if( $localuser ) { print STDOUT $counter_all,"/",$counter_remout; }
else             { print STDOUT $counter_all; }

    print STDOUT <<EOM;
</font><font size=4> calls since Dec 1, 1996</em></font><br>
</CENTER>

EOM
}

sub printBasicParametersKey {
    local($len);

    print STDOUT <<EOM;

<!-- BASIC Initial Parameters --------------------------------------------->

<CENTER>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH COLSPAN=3><font size=4>BASIC Initial Parameters</font>

EOM

# A/P
if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="AP" SIZE=10 value="$form_params{'AP'}">
 <TD>
EOM
 
 $len = @APchoiceSelection;
 &printChoice( APchoice, \@APchoiceTitle, \@APchoiceSelection, $len );

    print STDOUT <<EOM;
 <TD><A href="/sciwork/scenario/description.html#AP">More info...</A>
EOM
} else {
 print STDOUT "<INPUT TYPE=HIDDEN NAME=\"AP\" VALUE=\"$form_params{'AP'}\">\n";
 print STDOUT "<INPUT TYPE=HIDDEN NAME=\"APchoice\" VALUE=\"$form_params{'APchoice'}\">\n";
}

# M1
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="Mass1" SIZE=10 value="$form_params{'Mass1'}">
 <TD> M1 - primary mass (Solar masses)
 <TD> <A href="/sciwork/scenario/description.html#Mass">More info...</A>
EOM

# M2/q
if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="M2q" SIZE=10 value="$form_params{'M2q'}">
 <TD>
EOM
 
 $len = @MQchoiceSelection;
 &printChoice( MQchoice, \@MQchoiceTitle, \@MQchoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#MQ">More info...</A>
EOM
} else {
 print STDOUT "<INPUT TYPE=HIDDEN NAME=\"M2q\" VALUE=\"$form_params{'M2q'}\">\n";
 print STDOUT "<INPUT TYPE=HIDDEN NAME=\"MQchoice\" VALUE=\"$form_params{'MQchoice'}\">\n";
}

# Ecc
if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="Ecc" SIZE=10 value="$form_params{'Ecc'}">
 <TD> E - orbital eccentricity
 <TD> <A href="/sciwork/scenario/description.html#Ecc">More info...</A>
EOM
} else {
 print STDOUT "<INPUT TYPE=HIDDEN NAME=\"Ecc\" VALUE=\"$form_params{'Ecc'}\">\n";
}

# Topt
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="Topt" SIZE=10 value="$form_params{'Topt'}">
 <TD> T - evolution time (yr)
 <TD> <A href="/sciwork/scenario/description.html#Topt">More info...</A>
EOM

# B1/mu1
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="BMuinit1" SIZE=10 value="$form_params{'BMuinit1'}">
 <TD>
EOM

 $len = @BMuchoice1Selection;
 &printChoice( BMuchoice1, \@BMuchoice1Title, \@BMuchoice1Selection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#BMuinit">More info...</A>
EOM

# B2/mu2
if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="BMuinit2" SIZE=10 value="$form_params{'BMuinit2'}">
 <TD>
EOM
 
 $len = @BMuchoice2Selection;
 &printChoice( BMuchoice2, \@BMuchoice2Title, \@BMuchoice2Selection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#BMuinit">More info...</A>
EOM
} else {
 print STDOUT "<INPUT TYPE=HIDDEN NAME=\"BMuchoice2\" VALUE=\"$form_params{'BMuchoice2'}\">\n";
 print STDOUT "<INPUT TYPE=HIDDEN NAME=\"BMuinit2\" VALUE=\"$form_params{'BMuinit2'}\">\n";
}

print STDOUT "\n</TABLE>\n";

}

sub printKickVelocityKey {

    print STDOUT <<EOM;

<!-- Kick Velocity ------------------------------------------------------>

<CENTER>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH COLSPAN=4><font size=4>Kick Velocity</font>
<TR><TH> for 1-st NS/BH <TH> for 2-nd NS/BH <TH> Short Description: <TH> &nbsp
<TR> 
EOM

if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
 <TD><INPUT NAME="Kick1" value="$form_params{'Kick1'}">
 <TD><INPUT NAME="Kick2" value="$form_params{'Kick2'}">
EOM
} else {
 print STDOUT " <TD COLSPAN=2 ALIGN=CENTER><INPUT NAME=\"Kick1\" value=\"$form_params{'Kick1'}\">\n";
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"Kick2\" VALUE=\"$form_params{'Kick2'}\">\n";
}
    print STDOUT <<EOM;
 <TD> kick velocity (km/s)
 <TD> <A href="/sciwork/scenario/description.html#Kick">More info...</A><TR>
 <TD COLSPAN=2 ALIGN=CENTER>
EOM
 
 $len = @KickDirectionChoiceSelection;
 &printChoice(  KickDirectionChoice, \@KickDirectionChoiceTitle,
                  \@KickDirectionChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> kick direction
 <TD> <A href="/sciwork/scenario/description.html#KickDirection">More info...</A>
<TR> 
EOM

if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
 <TD><INPUT NAME="KickPhi1" value="$form_params{'KickPhi1'}">
 <TD><INPUT NAME="KickPhi2" value="$form_params{'KickPhi2'}">
EOM
} else {
 print STDOUT " <TD COLSPAN=2 ALIGN=CENTER><INPUT NAME=\"KickPhi1\" value=\"$form_params{'KickPhi1'}\">\n";
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"KickPhi2\" VALUE=\"$form_params{'KickPhi2'}\">\n";
}
    print STDOUT <<EOM;
 <TD> Phi-angle of kick velocity (degree)
 <TD> <A href="/sciwork/scenario/description.html#KickPhi">More info...</A>
<TR> 
EOM

if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
 <TD><INPUT NAME="KickTheta1" value="$form_params{'KickTheta1'}">
 <TD><INPUT NAME="KickTheta2" value="$form_params{'KickTheta2'}">
EOM
} else {
 print STDOUT " <TD COLSPAN=2 ALIGN=CENTER><INPUT NAME=\"KickTheta1\" value=\"$form_params{'KickTheta1'}\">\n";
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"KickTheta2\" VALUE=\"$form_params{'KickTheta2'}\">\n";
}
    print STDOUT <<EOM;
 <TD> Theta-angle of kick velocity (degree)
 <TD> <A href="/sciwork/scenario/description.html#KickTheta">More info...</A>
EOM

if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="KickPhiOrb1" value="$form_params{'KickPhiOrb1'}">
 <TD><INPUT NAME="KickPhiOrb2" value="$form_params{'KickPhiOrb2'}">
 <TD> Orbital place of SN explosion for e &gt; 0 (degree)
 <TD> <A href="/sciwork/scenario/description.html#KickPhiOrb">More info...</A>
EOM
} else {
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"KickPhiOrb1\" VALUE=\"$form_params{'KickPhiOrb1'}\">\n";
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"KickPhiOrb2\" VALUE=\"$form_params{'KickPhiOrb2'}\">\n";
}
    print STDOUT <<EOM;
</TABLE>
</CENTER>

EOM
}

sub printScenarioBranchesKey {

    print STDOUT <<EOM;

<!-- Scenario Branches ---------------------------------------------------->

<CENTER>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH COLSPAN=3><font size=4> Scenario versions </font>
<TR><TH> Short Description : <TH> Versions <TH> &nbsp
<TR>
 <TD>Normal star mass loss:
 <TD ALIGN=CENTER>
EOM
 
 $len = @StellarWindChoiceSelection;
 &printChoice( StellarWindChoice, \@StellarWindChoiceTitle, 
		\@StellarWindChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#StellarWindChoice">More info...</A>
<TR>
 <TD>White Dwarfs Magnetic field decay: 
 <TD ALIGN=CENTER>
EOM
 
 $len = @WDDecayChoiceSelection;
 &printChoice( WDDecayChoice, \@WDDecayChoiceTitle, 
		\@WDDecayChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#WDDecayChoice">More info...</A>
<TR>
 <TD>Neutron Star Magnetic field decay: 
 <TD ALIGN=CENTER>
EOM
 
 $len = @NSDecayChoiceSelection;
 &printChoice( NSDecayChoice, \@NSDecayChoiceTitle, 
		\@NSDecayChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#NSDecayChoice">More info...</A>
<TR>
 <TD>Magnetic field accretion decay: 
 <TD ALIGN=CENTER>
EOM
 
 $len = @AccretionDecayChoiceSelection;
 &printChoice( AccretionDecayChoice, \@AccretionDecayChoiceTitle, 
		\@AccretionDecayChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#AccretionDecayChoice">More info...</A>
EOM

if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
<TR>
 <TD>Maximal accretion rate into CE:
 <TD ALIGN=CENTER>
EOM
 
 $len = @CESuperAccretionChoiceSelection;
 &printChoice( CESuperAccretionChoice, \@CESuperAccretionChoiceTitle, 
		\@CESuperAccretionChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#CESuperAccretionChoice">More info...</A>
<TR>
 <TD> Matter acception by normal star during accretion:
 <TD ALIGN=CENTER>
EOM
 
 $len = @AcceptMatterByNormalStarChoiceSelection;
 &printChoice( AcceptMatterByNormalStarChoice, 
		\@AcceptMatterByNormalStarChoiceTitle, 
		\@AcceptMatterByNormalStarChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#AcceptMatterByNormalStarChoice">More info...</A>
EOM
} else {
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"CESuperAccretionChoice\" VALUE=\"$form_params{'CESuperAccretionChoice'}\">\n";
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"AcceptMatterByNormalStarChoice\" VALUE=\"$form_params{'AcceptMatterByNormalStarChoice'}\">\n";
}
    print STDOUT <<EOM;
</TABLE>
</CENTER>

EOM
}

sub printAdditionalParametersKey {

    print STDOUT <<EOM;

<!-- Additional Parameters ------------------------------------------------>

<CENTER>
<TABLE BORDER=5 CELLPADDING=5>
<TR><TH COLSPAN=3><font size=4>Additional Scenario Parameters</font>
<TR><TH> Value : <TH> Short Description : <TH> &nbsp
EOM

if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="AlphaCE" SIZE=10 value="$form_params{'AlphaCE'}">
 <TD> common envelope efficiency
 <TD> <A href="/sciwork/scenario/description.html#AlphaCE">More info...</A>
EOM
} else {
 print STDOUT " <INPUT TYPE=HIDDEN NAME=\"AlphaCE\" VALUE=\"$form_params{'AlphaCE'}\">\n";
}
    print STDOUT <<EOM;
<TR>
 <TD><INPUT NAME="Mbh" SIZE=10 value="$form_params{'Mbh'}">
 <TD>
EOM
 
 $len = @MbhchoiceSelection;
 &printChoice( Mbhchoice, \@MbhchoiceTitle, \@MbhchoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#Mbhchoice">More info...</A><TR>
 <TD><INPUT NAME="Kbh" SIZE=10 value="$form_params{'Kbh'}">
 <TD> collapse mass fraction
 <TD> <A href="/sciwork/scenario/description.html#Kbh">More info...</A><TR>
 <TD><INPUT NAME="Mov" SIZE=10 value="$form_params{'Mov'}">
 <TD> Oppenheimer-Volkoff limit (Solar masses)
 <TD> <A href="/sciwork/scenario/description.html#Mov">More info...</A><TR>
EOM

if( $form_params{'WDDecayChoice'} eq "yes" ){
    print STDOUT <<EOM;
 <TD><INPUT NAME="TdissWD" SIZE=10 value="$form_params{'TdissWD'}">
 <TD> time of magnetic field decay for WD (yr)
 <TD> <A href="/sciwork/scenario/description.html#Tdiss">More info...</A><TR>
EOM
} else {
    print STDOUT <<EOM;
 <INPUT TYPE=HIDDEN NAME="TdissWD" VALUE="$form_params{'TdissWD'}">
EOM
}

if( $form_params{'NSDecayChoice'} eq "yes" ){
    print STDOUT <<EOM;
 <TD><INPUT NAME="TdissNS" SIZE=10 value="$form_params{'TdissNS'}">
 <TD> time of magnetic field decay NS (yr)
 <TD> <A href="/sciwork/scenario/description.html#Tdiss">More info...</A><TR>
EOM
} else { 
    print STDOUT <<EOM;
 <INPUT TYPE=HIDDEN NAME="TdissNS" VALUE="$form_params{'TdissNS'}">
EOM
}

if( $form_params{'binary'} eq 'Y' ) 
{
    print STDOUT <<EOM;
 <TD><INPUT NAME="Pinit1" SIZE=10 value="$form_params{'Pinit1'}">
 <TD ROWSPAN=2 ALIGN=CENTER> initial spin period:<br>
EOM
 
 $len = @PinitChoiceSelection;
 &printChoice( PinitChoice, \@PinitChoiceTitle, 
	\@PinitChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#Pinit">More info...</A><TR>
 <TD><INPUT NAME="Pinit2" SIZE=10 value="$form_params{'Pinit2'}">
 <TD> <A href="/sciwork/scenario/description.html#Pinit">More info...</A>
EOM
} else {
    print STDOUT <<EOM;
 <TD><INPUT NAME="Pinit1" SIZE=10 value="$form_params{'Pinit1'}">
 <TD ALIGN=CENTER> initial spin period:<br>
EOM
 
 $len = @PinitChoiceSelection;
 &printChoice( PinitChoice, \@PinitChoiceTitle, 
	\@PinitChoiceSelection, $len );

    print STDOUT <<EOM;
 <TD> <A href="/sciwork/scenario/description.html#Pinit">More info...</A><TR>
 <INPUT TYPE=HIDDEN NAME="Pinit2" VALUE="$form_params{'Pinit2'}">
EOM
}
    print STDOUT <<EOM;
</TABLE>
</CENTER>

EOM
}

sub printOutputParametersKey {

    print STDOUT <<EOM;

<!-- Output Parameters -------------------------------------------------->

</b>
<CENTER>
<H1><font size=7><b> Output parameters </b></font></H1>

<H2>Window label: <INPUT NAME=label SIZE=3 VALUE="$form_params{'label'}"></H2>

<H2>What type of Output?</H2>
EOM
 
 $len = @OutputChoiceSelection; if(!$localuser) { $len=2; }
 &printChoice( OutputChoice, \@OutputChoiceTitle, 
				\@OutputChoiceSelection, $len );

    print STDOUT <<EOM;
<H2>Which rows to show?</H2>
EOM
 
 $len = @OutRowsChoiceSelection;
 &printChoice( OutRowsChoice, \@OutRowsChoiceTitle, 
			\@OutRowsChoiceSelection, $len );

    print STDOUT <<EOM;

<H2>Which columns to show?</H2>
<font size=4 color=GREEN><b>
 <INPUT TYPE="submit" NAME=action VALUE="   All On   " >
 <INPUT TYPE="submit" NAME=action VALUE="   All Off  " >
</b></font>
<TABLE BORDER=0 WIDTH=100%>
EOM

local($colcount) = 0;
local($col,$i);
for( $i = "01"; exists $columns{ "col".$i }; $i++ )
{
    $col = "col".$i;
    if( $form_params{'binary'} eq 'N' && $columns_bynaryonly{$col} eq 'Y' )
    {
             print STDOUT "<INPUT TYPE=HIDDEN NAME=\"$col\"  VALUE=\"$form_params{$col}\">\n";
    }
    else
    {
      if( ($colcount - 4*int($colcount/4)) == 0 )
      {
         print STDOUT "<TR>\n";
         $colcount = 0;
      }
      if( $form_params{$col} eq "on" )
      {
         print STDOUT "<TD><INPUT TYPE=\"CHECKBOX\" CHECKED NAME=$col>&nbsp;<a href=\"$outhelp_base#$columns_help{$col}\">$columns_names{$col}</a>\n";
      }
      else
      {
         print STDOUT "<TD><INPUT TYPE=\"CHECKBOX\" NAME=$col>&nbsp;<a href=\"$outhelp_base#$columns_help{$col}\">$columns_names{$col}</a>\n";
      }
      $colcount++;
    }
}

    print STDOUT <<EOM;                                    
</TABLE>

</CENTER>

EOM
}

sub WaoDeb { 
 if(-f "/tmp/waolog") { open(WAOLOG,">>/tmp/waolog"); }
             else { open(WAOLOG,">/tmp/waolog"); }  
 print WAOLOG @_;
 close(WAOLOG);
}

sub printPictureOutParamForm {
    $| = 1;
    print STDOUT <<EOM;
<BR><BR><BR>
<CENTER>
<H3>There is no parameters for output type <font color=GREEN><i><blink>IMAGE</blink></i></font></H3>
</CENTER>
<BR><BR><BR>
EOM
    $| = 0;
}

sub ValidateBasicParameters {

   foreach ( keys(%errors) ){ $form_params{$_} *= 1; }

   $errors{'AP'}      = 1 if( $form_params{'AP'} <= 0 );
   $errors{'Mass1'}   = 1 if( $form_params{'Mass1'} < 0.1 || $form_params{'Mass1'} > 120 );
   if( $form_params{'MQchoice'} eq 'q=M2/M1' )
   {
      $errors{'M2q'}  = 1 if( $form_params{'M2q'} <= 0.1/120 || $form_params{'M2q'} > 1 );
   }
   else
   {
      $errors{'M2q'}  = 1 if( $form_params{'M2q'} < 0.1 || $form_params{'M2q'} > $form_params{'Mass1'} );
   }   
   $errors{'Ecc'}     = 1 if( $form_params{'Ecc'} < 0 || $form_params{'Ecc'} >= 1 );
   $errors{'Topt'}    = 1 if( $form_params{'Topt'} < 0 || $form_params{'Topt'} > 2e10 );
   if( $form_params{'BMuchoice1'} eq 'B1-initialmagneticfieldof1-stcompactstar(G)' )
   {
       $errors{'BMuinit1'}  = 1 if( $form_params{'BMuinit1'} < 1e8 || $form_params{'BMuinit1'} > 1e15 );
   }
   else
   {
       $errors{'BMuinit1'}  = 1 if( $form_params{'BMuinit1'} < 1e22 || $form_params{'BMuinit1'} > 1e55 );
   }
   if( $form_params{'BMuchoice2'} eq 'B2-initialmagneticfieldof2-ndcompactstar(G)' )
   {
       $errors{'BMuinit2'}  = 1 if( $form_params{'BMuinit2'} < 1e8 || $form_params{'BMuinit2'} > 1e15 );
   }
   else
   {
       $errors{'BMuinit2'}  = 1 if( $form_params{'BMuinit2'} < 1e22 || $form_params{'BMuinit2'} > 1e55 );
   }

   foreach ( keys(%errors) ){ 
      if( $errors{$_} == 1 ){ return "0"; } 
   }

   return ("1");
}

sub ValidateKickVelocity {

   foreach ( keys(%errors) ){ $form_params{$_} *= 1; }

   $errors{'Kick1'}   = 1 if( $form_params{'Kick1'} < 0 || $form_params{'Kick1'} > 299000 );
   $errors{'Kick2'}   = 1 if( $form_params{'Kick2'} < 0 || $form_params{'Kick2'} > 299000 );
   $errors{'KickPhi1'}= 1 if( $form_params{'KickPhi1'} < 0 || $form_params{'KickPhi1'} > 360 );
   $errors{'KickPhi2'}= 1 if( $form_params{'KickPhi2'} < 0 || $form_params{'KickPhi2'} > 360 );
   $errors{'KickTheta1'}= 1 if( $form_params{'KickTheta1'} < 0 || $form_params{'KickTheta1'} > 360 );
   $errors{'KickTheta2'}= 1 if( $form_params{'KickTheta2'} < 0 || $form_params{'KickTheta2'} > 360 );
   $errors{'KickPhiOrb1'}= 1 if( $form_params{'KickPhiOrb1'} < 0 || $form_params{'KickPhiOrb1'} > 360 );
   $errors{'KickPhiOrb2'}= 1 if( $form_params{'KickPhiOrb2'} < 0 || $form_params{'KickPhiOrb2'} > 360 );

   foreach ( keys(%errors) ){ 
      if( $errors{$_} == 1 ){ return "0"; } 
   }

   return ("1");
}

sub ValidateAdditionalParameters {

   foreach ( keys(%errors) ){ $form_params{$_} *= 1; }

   $errors{'AlphaCE'} = 1 if( $form_params{'AlphaCE'} < 0 );
   $errors{'Mbh'}     = 1 if( $form_params{'Mbh'} < 0 );
   $errors{'Kbh'}     = 1 if( $form_params{'Kbh'} <= 0 || $form_params{'Kbh'} > 1 );
   $errors{'Mov'}     = 1 if( $form_params{'Mov'} < 1.3 || $form_params{'Mov'} > 5 );
   $errors{'TdissWD'} = 1 if( $form_params{'TdissWD'} < 1e6 );
   $errors{'TdissNS'} = 1 if( $form_params{'TdissNS'} < 1e6 );
   $errors{'Pinit1'}  = 1 if( $form_params{'Pinit1'} < 1e-3 );
   $errors{'Pinit2'}  = 1 if( $form_params{'Pinit2'} < 1e-3 );

   foreach ( keys(%errors) ){ 
      if( $errors{$_} == 1 ){ return "0"; } 
   }

   return ("1");
}

sub StartProgram {

      local($M1) = $form_params{'Mass1'};
      local($M2) = ($form_params{'MQchoice'} eq "q=M2/M1" )?
                     ($form_params{'M2q'}*$form_params{'Mass1'}):
                     ($form_params{'M2q'});

      local($A);
      if    ($form_params{'APchoice'} eq "A-semimajoraxis(Solarradii)" )
      {
             $A = $form_params{'AP'};
      }
      elsif ($form_params{'APchoice'} eq "A-semimajoraxis(cm)" )
      {
             $A = $form_params{'AP'} / $Units{'Solarradii'};
      }
      elsif ($form_params{'APchoice'} eq "P-orbitalperiod(s)" )
      {
             $A = ( ($form_params{'AP'}/10056.)**2 * ($M1+$M2) )**(1./3.);
      }
      elsif ($form_params{'APchoice'} eq "P-orbitalperiod(h)" )
      {
             $A = ( ($form_params{'AP'}*$Units{'hour'}/10056.)**2 
                        * ($M1+$M2) )**(1./3.);
      }
      elsif ($form_params{'APchoice'} eq "P-orbitalperiod(day)" )
      {
             $A = ( ($form_params{'AP'}*$Units{'day'}/10056.)**2 
                        * ($M1+$M2) )**(1./3.);
      }
      elsif ($form_params{'APchoice'} eq "P-orbitalperiod(yr)" )
      {
             $A = ( ($form_params{'AP'}*$Units{'yr'}/10056.)**2 
                        * ($M1+$M2) )**(1./3.);
      }

      local($E) = $form_params{'Ecc'};
      local($chMu1)  = ( $form_params{'BMuchoice1'} eq 
          'B1-initialmagneticfieldof1-stcompactstar(G)' )?"F":"T";
      local($chMu2)  = ( $form_params{'BMuchoice2'} eq 
          'B2-initialmagneticfieldof2-ndcompactstar(G)' )?"F":"T";
      local($BMu1, $BMu2) = ($form_params{'BMuinit1'}, $form_params{'BMuinit2'});
      local($useWDP0) = ( ($form_params{'PinitChoice'} eq 'WD-userdefined,NS-momentumconserwation')
          or ($form_params{'PinitChoice'} eq 'both-userdefined') )?"T":"F";
      local($useNSP0) = ( ($form_params{'PinitChoice'} eq 'WD-momentumconserwation,NS-userdefined')
          or ($form_params{'PinitChoice'} eq 'both-userdefined') )?"T":"F";
      local($P1, $P2) = ($form_params{'Pinit1'}, $form_params{'Pinit2'});
      local($T)    =  $form_params{'Topt'};
      local($RandomKickDirection) = ( $form_params{'KickDirectionChoice'} eq 
            'uniformrandomdirection' )?"T":"F";
      local($KICK1, $KICK2) = ($form_params{'Kick1'}, $form_params{'Kick2'}); 
      local($KICKPHI1, $KICKPHI2) =  
            ($form_params{'KickPhi1'}, $form_params{'KickPhi2'}); 
      local($KICKTHETA1, $KICKTHETA2) =  
            ($form_params{'KickTheta1'}, $form_params{'KickTheta2'}); 
      local($KICKPHIORB1, $KICKPHIORB2) =  
            ($form_params{'KickPhiOrb1'}, $form_params{'KickPhiOrb2'}); 
      local($TauWD) =  $form_params{'TdissWD'}/1000000.; 
      local($TauNS) =  $form_params{'TdissNS'}/1000000.; 
      local($MBH)  =  $form_params{'Mbh'};
      local($MBHT) =  ($form_params{'Mbhchoice'} eq "initialmassforBHformation(Solarmasses)")?
                         (0):(1);
      local($ALCE) =  $form_params{'AlphaCE'};
      local($KBH)  =  $form_params{'Kbh'};
      local($MLT)  = ( $form_params{'StellarWindChoice'} eq 'high' )?(1):(0);
      local($MOV)  =  $form_params{'Mov'};
      local($ACCRDECAY)  =  ($form_params{'AccretionDecayChoice'} eq "yes" )?
                         (1):(0);
      local($WDDECAY)  =  ($form_params{'WDDecayChoice'} eq "yes" )?
                         (T):(F);
      local($NSDECAY)  =  ($form_params{'NSDecayChoice'} eq "yes" )?
                         (T):(F);
      local($CESUPERACCRETION)  =  
           ( $form_params{'CESuperAccretionChoice'} eq "Eddington" )?
                         (0):(1);
      local($MSACCR);
      if( $form_params{'AcceptMatterByNormalStarChoice'} eq "conservative" )
      {
         $MSACCR = 0;
      }
      elsif( $form_params{'AcceptMatterByNormalStarChoice'} eq "fullynonconservative" )
      {
         $MSACCR = 1;
      }
      else
      {
         $MSACCR = 2;
      }
      
      if( $form_params{'OutRows'} eq 'Showsystemstateatthestagebeginning' )
      {
         local($PRBEG,$PREND) = ( "T", "F" );
      }
      elsif( $form_params{'OutRows'} eq 'Showsystemstateatthestageend' )
      {
         local($PRBEG,$PREND) = ( "F", "T" );
      }
      else
      {
         local($PRBEG,$PREND) = ( "T", "T" );
      }

#WAO      print STDOUT "Somethiong\n";
      if( $form_params{'OutputChoice'} eq 'Output-TextTable' ){
          open  TO_PROGRAM, "| ./MainA_Table";}
      elsif ( $form_params{'OutputChoice'} eq 'Output-Image' ) {
          open  TO_PROGRAM, "| ./MainA_Picture";}
      elsif( $form_params{'OutputChoice'} eq 'ViewScriptOutput(fordebug)' ) {
          open  TO_PROGRAM, "| ./MainA_View";}
      elsif( $form_params{'OutputChoice'} eq 'ViewImageInput(fordebug)' ) {
          open  TO_PROGRAM, "| ./MainA_ViewInput";}
      else { print STDOUT "no OutputChoise\n";}

      local($BINARY) = ($form_params{'binary'} eq "Y" )?("T"):("F");

      print TO_PROGRAM  <<EOPAR;
 &SCENAR
   MWRcr     = $MBH,
   MBHType   = $MBHT,
   prMbh     = $KBH,
   YdecayWD  = $WDDECAY,
   YdecayNS  = $NSDECAY,
   AccrDecay = $ACCRDECAY,
   SuperCEaccr  = $CESUPERACCRETION,
   AccrType  = $MSACCR,
   useNSP0   = $useNSP0,
   useWDP0   = $useWDP0,
   MLossType = $MLT,
   MOV       = $MOV,
   TauWD     = $TauWD,
   TauNS     = $TauNS,
   CEalf     = $ALCE,
   BINAR0    = $BINARY,
   ScrOutput = 1000,
 /

 &EXAMPLE
   Mex       = $M1, $M2,
   Aex       = $A,
   ECCex     = $E,
   Ymu       = $chMu1, $chMu2,
   BMuEx     = $BMu1, $BMu2,
   Pex       = $P1, $P2,
   T0ex      = $T,
   KICKex    = $KICK1, $KICK2,
   RndKickEx = $RandomKickDirection,
   KickPhi   = $KICKPHI1, $KICKPHI2,
   KickTheta = $KICKTHETA1, $KICKTHETA2,
   FiOrbEx   = $KICKPHIORB1, $KICKPHIORB2,
   Prbeg     = $PRBEG,
   Prend     = $PREND,
EOPAR
      print TO_PROGRAM  "   Printex   = T,";

      local($i);
      for( $i = "01"; exists $columns{ "col".$i }; $i++ )
      {
         if( $form_params{"col".$i} eq "on" ){ print TO_PROGRAM " T,"; }
         else                                { print TO_PROGRAM " F,"; }
      }

      print TO_PROGRAM  "\n /\n";
      close TO_PROGRAM;
}

sub printSaveMenu {
    &setChoice;

    &start_out( "Scenario Machine: Save Menu" );
    &printHeader;
    &printBegForm;

    &printSaveMenuForms;

    &printEndForm;
    &end_out;
}

sub printSaveMenuForms {

    print STDOUT <<EOM;

<!-- Save Menu Title ------------------------------------------------------>

<hr size=5>
<CENTER>
<font size=5><b>Please enter Title and Comments</b></font><br>

<br><br>
<br><br>

<!-- Save Menu Forms ------------------------------------------------------>

<b>Title</b><br>
<INPUT NAME="title" SIZE=60 value="$form_params{'title'}"><br><br>

<b>Comments</b><br>
<textarea name="comment" rows=5 cols=59>$form_params{'comment'}</textarea>
<br><br>

<!-- Save Menu Buttoms ---------------------------------------------------->

<font size=5 color=RED><b>
 <INPUT TYPE="submit" NAME=action VALUE=" OK "> 
</b></font>
&nbsp;&nbsp;&nbsp;&nbsp
<font size=5 color=Black><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Cancel "> 
</b></font>
<br><br>

</CENTER>

EOM
}

sub printSaveFile {

    $| = 1;

    print STDOUT <<EOM;
Content-type: application/octet-stream

<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<HTML>
<HEAD>
<TITLE>Scenario Machine: Saved Version</TITLE>
</HEAD>
<BODY bgcolor=\"lightgrey\">

<CENTER>
<font size=5><em>Scenario Machine: Saved Version</em></font>
<br><br>
<br><br>

<font size=5><b>$form_params{'title'}</b></font>
<br><br>

<font size=5>$form_params{'comment'}</font>
<br><br>

<hr size=5>

<FORM METHOD=POST ACTION="$myurl">

<font size=5 color=RED><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Start "> 
</b></font>
&nbsp
<font size=5 color=GREEN><b>
 <INPUT TYPE="submit" NAME=action VALUE=" Top "> 
</b></font>

EOM


$| = 0;

&printHidden;

$| = 1;

print STDOUT <<EOM;

</FORM>
</CENTER>

</BODY>
</HTML>
EOM

$| = 0;

}

__END__

