<?php
/**
 * Copyright (c) 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:
 *     Eric Poirier (Eclipse Foundation)
 *     Christopher Guindon (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */

require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");

$App = new App();
$Theme = $App->getThemeClass();

$pageTitle = "The Open Innovation Platform";

ob_start();
?>
<div class="jumbotron featured-jumbotron alternate margin-bottom-0">
  <div class="container">
    <div class="row">
      <div class="col-md-20 col-sm-18">
        <h1>The Platform for Entrepreneurial Open Source</h1>
        <p>Community driven. <br>Code first. <br> <span class="featured-jumbotron-alternate-highlight">Commercial grade.</span></p>
      </div>
    </div>
  </div>
</div>
<?php
$extra_header_html = ob_get_clean();
$Theme->setExtraHeaderHtml($extra_header_html);

$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("open source, business, technology, strategy, operational value, strategic value, financial value");
$Theme->setPageAuthor("Eric Poirier");
$Theme->setTitle("Open Innovation Platform - Business Value");

ob_start();
include("content/en_" . $App->getScriptName());
$html = ob_get_clean();

$Theme->setHtml($html);
$Theme->resetAttributes('main-container', 'class');
$Theme->setThemeVariables(array('main_container_classes' => '')); // Remove the container class from the main-container
$Theme->setAttributes('header-wrapper', 'header-default-bg-img');
$Theme->removeAttributes('breadcrumbs', 'breadcrumbs-default-margin');
$Theme->setAttributes('header-wrapper', 'background-image:url(/org/value/public/images/eclipse_business_value-bg.jpg);', 'style');
$Theme->setExtraHeaders('<link href="/org/value/public/css/value.css" media="screen" rel="stylesheet" type="text/css"/>');
$Theme->preventCaching();
$Theme->generatePage();