<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright 1999-2004 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

    <!-- ====================================================================== -->
    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->
    <!-- Main Page Section -->
    <!-- ====================================================================== -->
    
     <html>
        <head>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
		<meta name="author" content="OpenMeetings Team">
		<meta name="email" content="sebawagner@apache.org">
		<title>OpenMeetings API Classes</title>
		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">
        </head>
	<body>
		#set( $foo = ".html" )
	
       <div class="navigation">
	   #foreach ( $class in $classes )
            <div>
            <a href="$class.get("name")$foo" target="_PARENT"><b>$class.get("name")</b></a><br/>
            <div class="navigation_comment"><i >$class.get("comment")</i></div>
            </div>
        #end
        </div>
	
	
	</body>
	</html>