<?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("../_projectCommon.php");    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "Member2Member";
$pageKeywords	= "";
$pageAuthor		= "";

ob_start();
?>
<style type="text/css">
h2 {
border-bottom: solid
}
h3 {
border-bottom: thin dotted
}
</style>

    <div id="maincontent">
	<div id="midcolumn">
        <h1><big>Eclipse Member2Member Marketing Program</big></h1>
          
        <h2><b><big>Goals of this Program</big></b></h2>
        <p>This program has two main goals:</p>
        
        <ol>
           <li>Offer a channel for members to promote their products and services exclusively to the Eclipse Membership.</li>
           <li>Allow members to benefit from product and service special offers not available elsewhere.</li>
        </ol>

        <p>This program is about encouraging Eclipse Member companies to
        interact with each other by providing a channel to offer products and
        services specific to Eclipse members.</p>
        
        <h2><b><big>How do I participate?</big></b></h2>
        <p>Email <a href="mailto:member2member@eclipse.org">member2member@eclipse.org</a> with the following information:
        <ol>
          <li>Title: Not more than 40 Characters</li>
          <li>Body: Not more than 100 Characters</li>
          <li>URL Title: Not more than 15 Characters</li>
          <li>URL Target</li>
        </ol>
		</p>
		
		      <p>Example 1:<br>
<b>Save 20% off MegaCon</b><br>
MegaCon'08, Hyatt Reston<br>
June 20-24.  Learn new<br>
Mega Features.  Meet the<br>
experts of Mega!<br>
<a href="">Register Now...</a><br>

		</p>	
		      <p>Example 2:<br>
<b>33% Off Mista 4.0</b> <br>
Use coupon code ECMEM33<br>
and save 33% on latest<br>
Mista release.  Great<br>
Software product!<br>
<a href="">Free Trial...</a><br>

		      <p>Example 3:<br>
<b>Free Adoption Survey</b><br>
Just released 2008 tool use<br>
trends survey results.<br>
<a href="">See Results...</a><br>
		</p>
          
        <h2><big><b>FAQ</b></big></h2>
		<b>How much does it cost?</b>
        <p>This is a free service for Eclipse Foundation Members only.
        </p>

        <b>When will my offer Appear?</b>
        <p>Eclipse membership newsletters are planned monthly.  
        There is limited Member2Member
        space available in each newsletter.  Priority will be given first-come-first-serve basis.
        You will be advised when you submit your content an expected date.
        </p>

        <b>Can we promote a Free Product/Service?</b>
        <p>Yes, but only depending on space availability -- priority will be given to member2member offers
        that offer a tangible savings/benefit exclusively for other Eclipse Members.
        </p>

        <b>How many people receive the newsletter?</b>
        <p>There are approximately 500 recepients of the Foundation Newsletter.
        </p>
   

      
  </div></div>
<?php
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
