<?php

/*
 * This function generate the message used to inform that the content of the page is outdated.
 */
function generateOutdatedNotice(){
    $notice = <<<EOHTML
    	<p>
    		Recently MTJ has undergone a great <b>restructuring</b> and for this reason the content of these events are <b>outdated</b>.
    	</p>
EOHTML;
    return $notice;
}

/*
 * This function generates the content of the events page according to the year received.
 *
 * The heading atribute is optional. if empty, the year will be used as the header
 * The divclass atribute must be a valid class from eclipse
 */
function generateContent($eventYear, $heading, $divclass){

    /* Create the div header */
    $divheader = $heading == "" ? $eventYear : $heading;

    switch($eventYear){
        case "2010" :
            $content2010 = <<<EOHTML
                <div class="$divclass">
                    <h3>$divheader</h3>
                    <ul>
                        <li>
                            <b>Mar 22-25, 2010</b>: EclipseCon 2010 
                            <ul>
                                <li>
                                    <b>Lightning: </b> 
                                    <a href="http://www.eclipsecon.org/2010/sessions/?page=sessions&id=1100" target="_blank">
                                    DSDP MTJ: News & Note Worthy</a>
                                </li>                              
                            </ul>
                        </li>
                    </ul>
                </div>
EOHTML;
            return $content2010;        
        case "2009" :
            $content2009 = <<<EOHTML
                <div class="$divclass">
                    <h3>$divheader</h3>
                    <ul>
                       <li>
                            <b>April 22, 2009</b>:  <a href="http://live.eclipse.org/node/682">Mobile Tools for Java Webinar</a>
                            <ul>
                                <li>
                                    This webinar will present the project's main features and provide an update on the latest features that have been introduced.
                                </li>
                            </ul>
                        </li>            
                        <li>
                            <b>Mar 23-26, 2009</b>: EclipseCon 2009 
                            <ul>
                                <li>
                                    <b>Short Talk: </b> 
                                    <a href="http://www.eclipsecon.org/2009/sessions?id=314" target="_blank">
                                    Multi-Configuration support in MTJ (Mobile Tools for Java)</a>
                                </li>                              
                                <li>
                                    <b>Long Talk: </b> 
                                    <a href="http://www.eclipsecon.org/2009/sessions?id=291" target="_blank">
                                    MTJ: Taking Mobile Java Developers To The Next Level</a>
                                </li>                            
                                <li>
                                    <b>Birds Of A Feather: </b> 
                                    <a href="http://www.eclipsecon.org/2009/sessions?id=805" target="_blank">
                                    Mobile Tools for Java: Open Project Meeting</a>
                                </li>                   
                                <li>
                                    <b>Short Talk: </b>
                                    <a href="http://www.eclipsecon.org/2009/sessions?id=327" target="_blank">
                                    DSDP Mobile Tools for Java New and Noteworthy</a>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </div>
EOHTML;
            return $content2009;    
        case "2008" :
            $content2008 = <<<EOHTML
                <div class="$divclass">
                    <h3>$divheader</h3>
                    <ul>
                        <li>
                            <b>Nov 18, 2008 </b>: Eclipse Summit Europe 2008
                                <ul>
                                    <li>
                                        <a href="http://www.eclipsecon.org/summiteurope2008/sessions?id=35" target="_blank">
                                        <b>Short Talk</b> (The DSDP Mobile Tools for Java Project)</a>
                                    </li>
                                </ul>
                        </li>
                        <li>
                            <b>Oct 31, 2008 </b>: MTJ Demo Video at Eclipse Live
                                <ul>
                                    <li>
                                        <a href="http://live.eclipse.org/node/614" target="_blank">
                                        <b>Getting Started with MTJ</b></a>
                                    </li>
                                </ul>
                        </li>
                        <li>
                            <b>Oct 08, 2008 </b>: MTJ 0.9 Release Review
                                <ul>
                                    <li>
                                        The review meeting is schedule to <a href="http://www.timeanddate.com/worldclock/fixedtime.html?month=10&amp;day=8&amp;year=2008&amp;hour=15&amp;min=00&amp;sec=0&amp;p1=0">15:00 UTC</a>.
                                        Check out the Release Review <a href="/project-slides/MTJ_0.9_Release_Review_v1.0.pdf">slides</a> and the <a href="/project-slides/MTJ_0.9_IP%20Log.pdf">project log</a>.
                                    </li>
                                </ul>
                        </li>
                        <li>
                            <b>Mar 17-20, 2008</b>: EclipseCon 2008 
                            <ul>
                                <li>
                                    <a href="http://www.eclipsecon.org/2008/index.php?page=sub/&id=79" target="_blank">
                                    <b>Short Talk</b> (Mobile Tools for Java - Current Project Status)</a>
                                </li>
                                <li>
                                	<a href="http://www.eclipsecon.org/2008/?page=sub/&id=506" target="_blank">
                                    <b>Birds Of A Feather</b> (JavaME tooling for the Eclipse Platform: what we can expect?)</a>
                                </li>				    
                        	</ul>
                        </li>
                    </ul>
			  	</div>
EOHTML;
            return $content2008;

        case "2007" :
            $notice = generateOutdatedNotice();
            $content2007 = <<<EOHTML
                <div class="$divclass">
                    <h3>$divheader</h3>
    				<p>
    				{$notice}
    				</p>
                    <ul>
                        <li>
                            <b>Mar 05-08, 2007</b>: EclipseCon 2007
                            <ul>
                                <li>
                                    <a href="http://eclipsezilla.eclipsecon.org/php/attachment.php?bugid=3611" target="_blank">
                                    <b>Short Tutorial</b> (Developing in and for MTJ)</a>
                                </li>
                                <li>
                                	<a href="http://eclipsezilla.eclipsecon.org/php/attachment.php?bugid=4059" target="_blank">
                                    <b>Short Talk</b> (How to develop an application in MTJ)</a>
                                </li>				    
                        	</ul>
                        </li>
                        <li>
                            <b>Jan 23-24, 2007</b>: Eclipse PluginFest
                            <ul>
                                <li>
                                    MTJ Participated in the <a href="http://www.eclipse.org/community/pluginfest/" target="_blank">Eclipse PluginFest </a> 
                                    to test and meet with other embedded development organizations.<br>
                                    <a href="http://wiki.eclipse.org/index.php/PluginFest_2007">Additional details are available.</a>
                                </li>			    
                        	</ul>
                        </li>
                    </ul>
			  	</div>
EOHTML;
    				return $content2007;

        case "2006" :
            $notice = generateOutdatedNotice();
            $content2006 = <<<EOHTML
                <div class="$divclass">
                    <h3>$divheader</h3>
    				<p>
    				{$notice}
    				</p>
                    <ul>
                        <li>
                            <b>Dec 12, 2006</b>: Eclipse Webinar
                            <ul>
                                <li>
									Developing in and for MTJ. Replay and presentation materials available <a href="http://live.eclipse.org/node/210" target="_blank"> here </a>.
                                </li>			    
                        	</ul>
                        </li>
                        <li>
                            <b>Oct 11-12, 2006</b>: Eclipse Summit Europe 2006
                            <ul>
                                <li>
                                	<a href="http://www.eclipsecon.org/summiteurope2006/index.php?page=detail/&id=27" target="_blank">
                                    Eclipse and mobile software development</a>. Presentation available <a href="/dsdp/mtj/development/presentations/1MobileDevelopmentAndMTJ-v2.pdf" target="_blank">here</a> 
                                </li>				    
                        	</ul>
                        </li>
                        <li>
                            <b>Mar 05-08, 2006</b>: EclipseCon 2006
                            <ul>
                                <li>
                                    <a href="http://www.eclipsecon.org/2006/Sub.do?id=214" target="_blank">
                                    <b>Long Talk</b> (Taking it on the road - Developer tools for J2ME)</a>
                                </li>				    
                        	</ul>
                        </li>
                    </ul>
			  	</div>
EOHTML;
    				return  $content2006;

        default:
            $defaultContent = generateContent("2010","", "homeitem3col").generateContent("2009","", "homeitem3col").generateContent("2008","", "homeitem3col").generateContent("2007","", "homeitem3col").generateContent("2006","", "homeitem3col");
            return $defaultContent;
    }
}
?>