<?php
/*******************************************************************************
 * Copyright (c) 2005,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://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation)
 *    Denis Roy (Eclipse Foundation)
 *******************************************************************************/

  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
  $App = new App();
  $Nav = new Nav();
  $Menu = new Menu();
  include($App->getProjectCommon());

  $pageTitle = "Eclipse Membership";
  $pageKeywords = "eclipse membership, become a member, membership faq, membership explre";
  $pageAuthor = "Christopher Guindon";

  // Custom theme variables
  $variables = array();
  $show_modal = TRUE;
  $hide_tips = TRUE;
  $hide_membership = TRUE;
  $hide_become = TRUE;
  $show_membership_contact = TRUE;

  // Place your html content in a file called content/en_pagename.php
  ob_start();
  include("content/en_" . $App->getScriptName());
  $html = ob_get_clean();

  # Generate the web page
  $App->PageRSS = "/projects/reviews-rss.php";
  $App->AddExtraHtmlHeader('<link type="text/css" href="assets/css/becomemember.min.css" rel="stylesheet"/>');
  $App->generatePage($theme, $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
