<?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="is_anonymous"
                  <?php if ($PaymentGateway->Donation->get_donation_is_anonymous()) {print 'checked="checked"';}?>
                /> I prefer to remain anonymous.
              </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>