<?php
/*******************************************************************************
 * Copyright (c) 2015 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/
$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://dev.eclipse.org/site_login/" 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>