<?php
/**
 * Copyright (c) 2015, 2018 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Christopher Guindon (Eclipse Foundation) - Initial implementation
 * Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/donate/assets/public/stylesheets/improve.min.css" media="screen" />');
$App->AddExtraJSFooter('<script type="text/javascript" src="/donate/assets/public/javascript/scripts.min.js"></script>');
?>
<section class="content ">
  <div class="container">
    <div class="row">
      <div class="col-md-16">
        <h1><?php print $pageTitle;?></h1>
        <p>
          We are pleased to welcome you to the Friends of Eclipse program. To take full advantage of
          the program you will need to enter your Eclipse Account e-mail address, if you have one,
          or <a href="https://accounts.eclipse.org/user/register" title="create an Eclipse account"> create
            an account </a>. This will allow you access to the Friends of Eclipse benefits.
        </p>
        <?php print $PaymentGateway->get_client_message();?>
        <?php if (!$hide_form):?>
          <div class="row">
          <form class="choose-amount" action="" method="POST">
            <div class="col-sm-24 optional-form-fields">
              <input type="email" name="email"
                value="<?php print $PaymentGateway->Donation->Donor->get_active_email();?>"
                placeholder="Email Address (Optional)">
              <textarea name="message" placeholder="Comments (Optional)"><?php print $PaymentGateway->Donation->get_donation_message();?></textarea>
              <div class="padding-top-10 is_anonymous">
                <input type="checkbox" name="is_anonymous" value="recognition"
                  <?php if (!$PaymentGateway->Donation->get_donation_is_anonymous()) {print 'checked="checked"';}?>
                /> I want to be listed on the recognition page
              </div>
              <hr>
            </div>
            <div class="col-sm-6 margin-top-5">
              <input type="submit" class="btn btn-warning donation-button" value="Update donation" />
            </div>
            <input type="hidden" name="form-stage" value="update" />
          </form>
        </div>
        <?php else:?>
        <p>
          <a href="/donate/credit.php" class="btn btn-primary">Return to donation page</a>
        </p>
        <?php endif;?>
      </div>
     <?php include('en_sidebar.php');?>
    </div>
  </div>
</section>