<?php

/*
 * File : update.php
 * Author : Diego Madruga Sandin (dmadruga)
 * Date : 2008-10-03
 * Description : Update Sites.
 */

/* Required eclipse basic classes */
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
/* Functions and modules related to Navbar objects */
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
/* Functions and modules related to the page top eclipse menu */
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");

$App    = new App();
/* Left Navbar */
$Nav    = new Nav();
/*  Page top eclipse menu */
$Menu   = new Menu();

/* Find the _projectCommon.php file and include it */
include($App->getProjectCommon());
#
# Begin: page-specific settings.  Change these.
$pageTitle      = "Mobile Tools for Java &nbsp; (MTJ) &nbsp; Update Sites";
$pageKeywords   = "mtj, Update Sites";
$pageAuthor     = "Diego Madruga Sandin";

/* Paste your HTML content between the EOHTML markers!  */
$html = <<<EOHTML

<div id="maincontent">
    <div id="midcolumn">
        <h1>$pageTitle</h1>
        <br>These are the Eclipse update sites maintained by this project. <br><br>We no longer maintain download packages for MTJ projects. 
    Archived MTJ downloads can be reached from the old <a href="/mtj/download/downloads.php">downloads page.</a> 
            <div class="homeitem3col">
            <h3>1.1.2 Update Site</h3>
            <ul>
            <br>
                <li>
                    In order to install MTJ, add the following repository on your Eclipse Install Manager (<b>Help &gt; Software Updates... &gt; Available Software &gt; Add Site... </b>). 
                <ul>
                <br>
                <li>
                 <b>Release</b> : <a href="http://download.eclipse.org/mtj/updates/1.1.2/stable/">http://download.eclipse.org/mtj/updates/1.1.2/stable/</a>
                </li>
                </ul>
                </li>
            </ul>
            <h3>Nightly build Update Site</h3>
            <ul>
            <br>
                <li>
                    In order to install MTJ, add the following repository on your Eclipse Install Manager (<b>Help &gt; Software Updates... &gt; Available Software &gt; Add Site... </b>). 
                <ul>
                <br>
                <li>
                 <b>Bleeding edge nightlies</b> : <a href="http://download.eclipse.org/mtj/updates/nightly">http://download.eclipse.org/mtj/updates/nightly</a>
                </li>
                </ul>
                </li>
            </ul>
            <h3>1.1.1 Update Site</h3>
            <ul>
            <br>
                <li>
                    In order to install MTJ, add the following repository on your Eclipse Install Manager (<b>Help &gt; Software Updates... &gt; Available Software &gt; Add Site... </b>). 
                <ul>
                <br>
                <li>
                 <b>Release</b> : <a href="http://download.eclipse.org/mtj/updates/1.1.1/stable/">http://download.eclipse.org/mtj/updates/1.1.1/stable/</a>
                </li>
                </ul>
                </li>
            </ul>
            <h3>1.1.0 Update Sites URLs</h3>
            <ul>
            <br>
                <li>
                    In order to install MTJ, add the following repository on your Eclipse Install Manager (<b>Help &gt; Software Updates... &gt; Available Software &gt; Add Site... </b>). 
                <ul>
                <br>
                <li>
                 <b>Release</b> : <a href="http://download.eclipse.org/mtj/updates/1.1.0/stable/">http://download.eclipse.org/mtj/updates/1.1.0/stable/</a>
                </li>
                <li>
                  <b>Nightly builds</b> :  <a href="http://download.eclipse.org/mtj/updates/1.1.0/NightlyBuilds/">http://download.eclipse.org/mtj/updates/1.1.0/NightlyBuilds/</a> 
                </li>
                </ul>
                </li>
            </ul>
            </br>          
            <h3>1.0.1 Update Sites URLs</h3>
            <ul>
            <br>
                <li>
                    In order to install MTJ, add the following repository on your Eclipse Install Manager (<b>Help &gt; Software Updates... &gt; Available Software &gt; Add Site... </b>). 
                <ul>
                <br>
                <li>
                 <b>Release</b> : <a href="http://download.eclipse.org/mtj/updates/1.0.1/stable/">http://download.eclipse.org/mtj/updates/1.0.1/stable/</a>
                </li>
                <li>
                  <b>Nightly builds</b> :  <a href="http://download.eclipse.org/mtj/updates/1.0.1/NightlyBuilds/">http://download.eclipse.org/mtj/updates/1.0.1/NightlyBuilds/</a> 
                </li>
                </ul>
                </li>
            </ul>          
            <br>
            <h3>1.0 Update Sites URLs</h3>
            <ul>
            <br>
                <li>
                    In order to install MTJ, add the following repository on your Eclipse Install Manager (<b>Help &gt; Software Updates... &gt; Available Software &gt; Add Site... </b>). 
                <ul>
                <br>
                <li>
                 <b>Release</b> : <a href="http://download.eclipse.org/mtj/updates/1.0/stable/">http://download.eclipse.org/mtj/updates/1.0/stable/</a>
                </li>
                <li>
                  <b>Nightly builds</b> :  <a href="http://download.eclipse.org/mtj/updates/1.0/NightlyBuilds/">http://download.eclipse.org/mtj/updates/1.0/NightlyBuilds/</a> 
                </li>
                </ul>
                </li>
            </ul>            
            <br>        
            <h3>0.9.x Update Sites URLs</h3>
            <ul>
            <br>
                <li>
                    In order to install MTJ, add the following repository on your Eclipse Install Manager (<b>Help &gt; Software Updates... &gt; Available Software &gt; Add Site... </b>). 
                <ul>
                <br>
                <li>
                 <b>Release</b> : <a href="http://download.eclipse.org/mtj/updates/0.9/stable/">http://download.eclipse.org/mtj/updates/0.9/stable/</a>
                </li>
                <li>
                  <b>Nightly builds</b> :  <a href="http://download.eclipse.org/mtj/updates/0.9/NightlyBuilds/">http://download.eclipse.org/mtj/updates/0.9/NightlyBuilds/</a> 
                </li>
                </ul>
                </li>             
            </ul>
         </div>      
    </div>
</div>

<script type="text/javascript">var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));</script><script type="text/javascript">try {var pageTracker = _gat._getTracker("UA-9293663-1");pageTracker._trackPageview();} catch(err) {}</script>

EOHTML;


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