<?php  			
	set_include_path($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common" . PATH_SEPARATOR . $_SERVER['DOCUMENT_ROOT'] . "/projects" . PATH_SEPARATOR . get_include_path());																											
    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: 		Igor Vinnykov
	# Date:			2007-11-16
	#
	# Description: Primary Mailing List page
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse Subversive - Mailing Lists";
	$pageKeywords	= "Subversive, Subversion, SVN, Team Provider, Mailing Lists";
	$pageAuthor		= "Igor Vinnykov";
	
	include("_projectCommon.php");    # All on the same line to unclutter the user's desktop'
	
	$sidebar = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/subversive/sidebars/main.php");	
	
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

	<div id="midcolumn">
		<h1>Mailing Lists</h1>
		<p>
		    Mailing lists is a primary communication channel with Subversive development team. If you are interested in getting announcements for new versions, or want to participate in discussions of development or integration topics, then you can subscribe to one of the following mailing lists.
		</p>
		<div class="homeitem3col">	
			<h3>Mailing Lists</h3>
            <ul>
                <li>
                    <b><a href="https://dev.eclipse.org/mailman/listinfo/subversive-dev">subversive-dev@eclipse.org</a></b> - A mail list for developer discussion. It's a place, where Subversive committers, contributors and integrators discuss all topics related with project development.<br/>
                    <img src="/subversive/images/arrow.gif"></img>&nbsp;&nbsp;<a href="https://dev.eclipse.org/mailman/listinfo/subversive-dev">Subscribe/unsubscribe instructions</a><br/>
                    <img src="/subversive/images/arrow.gif"></img>&nbsp;&nbsp;<a href="http://dev.eclipse.org/mhonarc/lists/subversive-dev/maillist.html">Mailing list archive</a><br/>
                    <img src="/subversive/images/arrow.gif"></img>&nbsp;&nbsp;<a href="http://dev.eclipse.org/mhonarc/lists/subversive-dev/maillist.rss">RSS Feed</a><br/>
                </li>
                <li>
                    <b><a href="https://dev.eclipse.org/mailman/listinfo/subversive-defects">subversive-defects@eclipse.org</a></b> - A mail list for defects reporting. If you found a defect, you can send report here. Nevertheless the preferred place for defects reporting is Bugzilla.<br/>
                    <img src="/subversive/images/arrow.gif"></img>&nbsp;&nbsp;<a href="https://dev.eclipse.org/mailman/listinfo/subversive-defects">Subscribe/unsubscribe instructions</a><br/>
                    <img src="/subversive/images/arrow.gif"></img>&nbsp;&nbsp;<a href="http://dev.eclipse.org/mhonarc/lists/subversive-defects/maillist.html">Mailing list archive</a>
                </li>
            </ul>
		</div>
		<h2>Frequently asked questions</h2>
		<h4>What I need to do in order to use mailing lists?</h4>
		<p>
		    First of all you need to subscribe to the mailing list. Please follow subscribe instructions. As soon as you will complete subscription process, you will get posts from mailing list to your mailbox. You can also post to mailing list by sending e-mails to mailing list address.
		</p>
		<h4>You have mailing lists and newsgroups. What is the difference and what should I use?</h4>
        <p>
		    Mailing lists are mostly used for communication between Subversive committers, integrators, contributors and getting announcements from development team. Newsgroups are aimed to organize general discussions in wider community.
		</p>
		<p>
		    Thus, if you use Subversive and need to get the support or ask questions, then you should post to the newsgroup.<br/>
		    If you are Subversive committer, contributor or integrator, then post to the <a href="https://dev.eclipse.org/mailman/listinfo/subversive-dev">subversive-dev@eclipse.org</a> mailing list.<br/>
		    If you want to get announcement about new Subversive versions, then subscribe to the <a href="https://dev.eclipse.org/mailman/listinfo/subversive-announce">subversive-announce@eclipse.org</a> mailing list.
		</p>
		<h4>Can I review mailing lists?</h4>
		<p>
		    Mailing list archives allows you to review all posts though simple web interface. You don't need to subscribe or register in order to have access to archives.
		</p>
		<h4>I subscribed to the mailing list, but receive only new posts. Where I can find old posts?</h4>
		<p>
		    Please take a look to mailing list archive. There you can find all posts.
		</p>
	</div>	

	<div id="rightcolumn">
        $sidebar		
	</div>

EOHTML;


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