<?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'

	#*****************************************************************************
	#
	# template.php
	#
	# Author: 		Denis Roy
	# Date:			2005-06-16
	#
	# Description: Type your page comments here - these are not sent to the browser
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Europa Effect";
	$pageKeywords	= "callisto marketing ";
	$pageAuthor		= "Nathan Gervais";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

	# End: page-specific settings
	#
	// This file is linked to from lots of different places.
	// Use absolute paths to make sure that we can actually test
	// that the file renders properly (i.e. testing using) "/index.php",
	// and "/home/index.php" both work.

	include ("scripts/quotes.php");
	
		
	# Paste your HTML content between the EOHTML markers!
	ob_start();	
	?>
<link rel="stylesheet" type="text/css" href="callisto.css" media="screen" />
<div class="callistoRealEstate">
	<div class="maincontent">
        <h1><?=$pageTitle;?></h1>
        <p>
        The following are just some of the examples of what Eclipse members are doing with Europa.
        </p>
       	
       	<? 
       	$quotesCatalog = $quotesParser->quotesCatalog;
        $counter = count($quotesCatalog);
        $i =0;
        $float = "right";
       	while ($i < $counter)
       	{
       		$text = $quotesCatalog[$i][0];
       		$image = $quotesCatalog[$i][1];
       		$name = $quotesCatalog[$i][2];
       		$position = $quotesCatalog[$i][3];
       		$org = $quotesCatalog[$i][4];
       		$link = $quotesCatalog[$i][5];
       		?>
		       	<table>
		       		<tr>
		       			<? if ($float=="left") { ?>
		       			<td>
				       		<a href="<?=$link;?>">
				       			<img src="<?=$image;?>" border=0 alt="<?=$org;?>" title="<?=$org;?>" >
				       		</a>
				       	</td>
						<? } ?>
		       			<td>
		       				<div class="contentBox"> 
			       				<a href="<?=$link;?>"><b><?=$org;?></b></a>
			       				<br /> <br />
					       		<?=$text;?>
					        	<br /><br />		        
						    	<p style="text-align:right;"><b><?=$name;?></b> - <a href="<?=$link;?>"><?=$position;?></a></p>
				       		</div>
				       	</td>
		       			<? if ($float=="right") { ?>
		       			<td>
				       		<a href="<?=$link;?>">
				       			<img src="<?=$image;?>" border=0 alt="<?=$org;?>" title="<?=$org;?>" >
				       		</a>
				       	</td>
						<? } ?>				       	
					</tr>
				</table>
				<br/><br/>
	
		<? 
		$i++;
		if ($float == "right")
			$float = "left";
		else 
			$float="right";
		}   ?>        
       	
      <br />  


            
        
        
    <? /*    <h2>Add yourself to this page!</h2>
        <p>
  Send an email to <a href="mailto:europa.feedback@eclipse.org">europa.feedback@eclipse.org</a>
        </p>
        
        */?>

	</div>

</div>

<?

$html = ob_get_clean();

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