<?php  																														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());    # All on the same line to unclutter the user's desktop'

	#*****************************************************************************
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "STEM Downloads";
	$pageKeywords	= "STEM, Eclipse";
	$pageAuthor		= "";

$samplesDownloadPath = "/stem/samples";
$cancelUrl = "/stem/downloads.php";

$disclaimerText = "The following sample archive files contain Content which can be downloaded and extracted into a STEM workspace and imported into STEM to help a Recipient set up A model of disease. For example, one sample archive file configures STEM to run a model with DATA FROM both Mexico and the United States, using a standard deterministic SEIR model with disease parameters which may characterize a new DISEASE. The disease parameters in the sample archive are provided only as examples and are NOT validated against any DISEASE data, including Swine Flu data. Recipients should not use these parameters as accurate predictions for the rate of spread of any specific disease. By following the instructions in STEM, a Recipient can change these parameters as desired and also adjust the parameters in the sample modifiers to create new models and to study the effects of social distancing or other public health policies.";

$requestedFile = $_REQUEST['file'];
$requestedFile = filter_var($requestedFile, FILTER_SANITIZE_STRING);

if (!$requestedFile || $_REQUEST['cancel']) {
	Header("Location: ". $cancelUrl);
	exit();
}

if ($_REQUEST['agree']) {
	Header('Location: ' . $samplesDownloadPath .'/'. $requestedFile);
	exit();
}


$html = <<<EOHTML

<div id="maincontent">
	<div id="midcolumn">
		<h1>$pageTitle</h1>
		<h2>Sample Configuration Download</h2>
		<p>This file is distributed with an addendum to the <a href="/legal/epl/notice.php">Eclipse Foundation Software User Agreement</a>.  
		Please read the disclaimer and click "<strong>I agree</strong>" to accept the additional terms and download the file.  
		Click "<strong>Cancel</strong>" to go back.</p>
		<div class="homeitem3col">
			<h3>Disclaimer</h3>
			<div style="background-color:#e0e0e0; width:80%; border:1px dashed;padding:15px;margin-top:10px;margin-bottom:10px;margin-left:auto; margin-right:auto ;">
			$disclaimerText
			</div>

			<div style="width:80%;margin-left:auto;margin-right:auto;text-align:center;">
				<form method="POST">
					<input type="hidden" name="file" value="$requestedFile" />
					<input type="submit" name="agree" value="I agree" />
					<input type="submit" name="cancel" value="Cancel" />
				</form>
			</div>
		</div>
	</div>
</div>

EOHTML;


	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);


?>