<?php
/*******************************************************************************
 * Copyright (c) 2004-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:
 *    Denis Roy (Eclipse Foundation)- initial API and implementation
 *******************************************************************************/

	ob_start();
	?>
	<link rel="stylesheet" type="text/css" href="../css/stylesheet.css" />
	<div id="maincontent" style="padding:8px;">
	<h1 style="padding-top:10px;"><?= $pageTitle ?></h1>

	<?php include("inc/en_stats_criteria.php"); ?>

	<table width="100%">
		<tr class="datahdr">
			<td>File (click for daily stats)</td>
			<td align="right">Count</td>
		</tr>
<?php
	$i 			= 0;
	$dl_count 	= 0;
	foreach ($objJSON->rows as $row) {
		$i++;
		$dl_count +=  $row->file_count;

		$filename_cut = $row->file_name;
		if(strlen($filename_cut) > 120) {
			$filename_cut = substr($filename_cut, 0,50) . " (...) " . substr($filename_cut, strlen($filename_cut) - 70);
		} 
?>

		<tr class="data<?= $i % 2 ?>">
			<td><a href="javascript:fnViewDaily('<?= $row->file_name ?>', 'daily');"><?= $filename_cut ?></a></td>
			<td align="right"><?= $row->file_count ?></td>
		</tr>
	

<?php
	}
?>
		<tr>
			<td height="7"></td>
			<td align="right"></td>
		</tr>

		<tr class="datahdr">
			<td><?= $i ?> record<?= $i > 1 ? "s" : "" ?> found.</td>
			<td align="right"><?= $dl_count ?></td>
		</tr>
	</table>
</div>
	<script language="javascript">
		function fnViewDaily(_filename, _view) {
			if(_filename != "File Group") {
				document.forms['form1'].filename.value 	= _filename;
			}
			document.forms['form1'].view.value 		= _view;
			document.forms['form1'].submit();
		}
	</script>