<!--
     File : events.func.php
     Author : Diego Madruga Sandin (dmadruga)
     Date :	2008-03-13
     Description : This are the functions for the events page on the MTJ project. 
-->
<?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 "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("2009","", "homeitem3col").generateContent("2008","", "homeitem3col").generateContent("2007","", "homeitem3col").generateContent("2006","", "homeitem3col");
            return $defaultContent;
    }
}
?>