menu.php3 16.6 KB
Newer Older
1
<?php
Leigh B. Stoller's avatar
Leigh B. Stoller committed
2 3 4 5 6
#
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2002 University of Utah and the Flux Group.
# All rights reserved.
#
7

8
$login_status     = CHECKLOGIN_NOTLOGGEDIN;
9
$login_uid        = 0;
10
$drewheader       = 0;
11

12 13 14 15 16 17
#
# This has to be set so we can spit out http or https paths properly!
# Thats because browsers do not like a mix of secure and nonsecure.
# 
$BASEPATH	  = "";

18 19 20 21 22
#
# WRITESIDEBARBUTTON(text, link): Write a button on the sidebar menu.
# We do not currently try to match the current selection so that its
# link looks different. Not sure its really necessary.
#
Chad Barb's avatar
 
Chad Barb committed
23
function WRITESIDEBARBUTTON($text, $base, $link ) {
24
    $link = "$base/$link";
Chad Barb's avatar
 
Chad Barb committed
25 26
    echo "    <tr><td class=\"menuopt\"><a href=\"$link\">$text</a></td></tr>\n";
}
27

Chad Barb's avatar
 
Chad Barb committed
28 29 30 31 32 33
# same as above with "new" gif next to it.
function WRITESIDEBARBUTTON_NEW($text, $base, $link ) {
    $link = "$base/$link";
    echo "    <tr><td class=\"menuopt\"><a href=\"$link\">$text</a>&nbsp;<img src=\"/new.gif\" /></td></tr>\n";
}

Leigh B. Stoller's avatar
Leigh B. Stoller committed
34 35 36 37 38
function WRITESIDEBARBUTTON_ABS($text, $base, $link ) {
    $link = "$link";
    echo "    <tr><td class=\"menuopt\"><a href=\"$link\">$text</a></td></tr>\n";
}

Chad Barb's avatar
 
Chad Barb committed
39 40 41 42 43 44 45 46 47 48 49
# same as above, but uses a slightly different style sheet so there
# is more padding below the last button.
# The devil is, indeed, in the details.
function WRITESIDEBARLASTBUTTON($text, $base, $link) {
    $link = "$base/$link";
    echo "    <tr><td class=\"menuoptb\"><a href=\"$link\">$text</a></td></tr>\n";
}

# writes a message to the sidebar, without clickability.
function WRITESIDEBARNOTICE($text) {
    echo "    <tr><td class=\"menuopt\"><b>$text</b></td></tr>\n";
50 51 52 53 54 55 56
}

#
# WRITESIDEBAR(): Write the menu. The actual menu options the user
# sees depends on the login status and the DB status.
#
function WRITESIDEBAR() {
57 58
    global $login_status, $login_uid;
    global $TBBASE, $TBDOCBASE, $BASEPATH;
59
    global $THISHOMEBASE;
60 61 62

    #
    # The document base cannot be a mix of secure and nonsecure.
63
    #
Chad Barb's avatar
 
Chad Barb committed
64 65 66 67 68 69 70 71
    
    # create the main menu table, which also happens to reside in a form
    # (for search.)
?>
<FORM method=get ACTION="/cgi-bin/webglimpse/usr/testbed/webglimpse">
  <table class="menu" width=220 cellpadding="0" cellspacing="0">
    <tr><td class="menuheader"><b>Information</b></td></tr>
<?php
72
    WRITESIDEBARBUTTON("Home", $TBDOCBASE, "index.php3");
Leigh B. Stoller's avatar
Leigh B. Stoller committed
73 74 75
    WRITESIDEBARBUTTON_ABS("Kentucky Emulab", $TBDOCBASE,
			   "http://www.uky.emulab.net");
    
76 77
    WRITESIDEBARBUTTON_NEW("Join Netbed (CD)",
			   $TBDOCBASE, "cdrom.php");
Chad Barb's avatar
 
Chad Barb committed
78 79

    WRITESIDEBARBUTTON_NEW("News (August&nbsp;15)", $TBDOCBASE,
80
		       "docwrapper.php3?docname=news.html");
81
    WRITESIDEBARBUTTON("Documentation", $TBDOCBASE, "doc.php3");
Chad Barb's avatar
 
Chad Barb committed
82
    WRITESIDEBARBUTTON_NEW("Papers", $TBDOCBASE, "pubs.php3");
83
    WRITESIDEBARBUTTON("People", $TBDOCBASE, "people.php3");
84
    WRITESIDEBARBUTTON("The Gallery", $TBDOCBASE, "gallery/gallery.php3");
Chad Barb's avatar
 
Chad Barb committed
85
    WRITESIDEBARBUTTON("Projects on Emulab", $TBDOCBASE,
86
		       "projectlist.php3");
Chad Barb's avatar
 
Chad Barb committed
87
    WRITESIDEBARLASTBUTTON("Sponsors", $TBDOCBASE,
Mike Hibler's avatar
Mike Hibler committed
88
		       "docwrapper.php3?docname=sponsors.html");
89

Chad Barb's avatar
 
Chad Barb committed
90 91 92 93 94 95 96 97 98 99 100 101 102 103
    # create the search bit, then the second table for the Web Interface.
?>
    <tr><td class="menuoptst"><b>Search Documentation:</b></td></tr>
    <tr><td class="menuopts"><input name=query />
      <input type=submit style="font-size:10px;" value="Go" /></td></tr>
      <tr><td class="menuoptsb" style="font-size:12px;" >[
      <a href="<?php echo "$TBDOCBASE/search.php3"; ?>">Advanced Search</a> ]</td></tr>
    </td></tr>  
  </table>
</form>
<br>
<table class="menu" width=220 cellpadding="0" cellspacing="0">
    <tr><td class="menuheader"><b>Interaction</b></td></tr>
<?php
104

105
    if ($login_status & CHECKLOGIN_LOGGEDIN) {
Chad Barb's avatar
 
Chad Barb committed
106 107
         $freepcs = TBFreePCs();
	 WRITESIDEBARNOTICE( "($freepcs Free PCs.)" );
108
    }
109

110 111 112 113 114 115 116 117
    #
    # Basically, we want to let admin people continue to use
    # the web interface even when nologins set. But, we want to make
    # it clear its disabled.
    # 
    if (NOLOGINS()) {
        WRITESIDEBARBUTTON("<font color=red> ".
			   "Web Interface Temporarily Unavailable</font>",
118 119
			   $TBDOCBASE, "nologins.php3");

Chad Barb's avatar
 
Chad Barb committed
120 121 122
        if (!$login_uid || !ISADMIN($login_uid)) {	
	    WRITESIDEBARNOTICE("Please Try Again Later");
        }
123
    }
Chad Barb's avatar
 
Chad Barb committed
124

125 126 127
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	if ($login_status & CHECKLOGIN_ACTIVE) {
	    if ($login_status & CHECKLOGIN_PSWDEXPIRED) {
128
		WRITESIDEBARBUTTON("Change Your Password",
129
				   $TBBASE, "moduserinfo.php3");
130
	    }
131
	    else {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
132
		WRITESIDEBARBUTTON("My Emulab",
133 134
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
135
	    
136
		if (ISADMIN($login_uid)) {
137 138 139 140 141 142 143 144 145 146 147 148 149 150
		    WRITESIDEBARBUTTON("New Project Approval",
				       $TBBASE, "approveproject_list.php3");
		}
		if ($login_status & CHECKLOGIN_TRUSTED) {
                    # Only project/group leaders can do these options
		    WRITESIDEBARBUTTON("New User Approval",
				       $TBBASE, "approveuser_form.php3");
		}
		
                #
                # Since a user can be a member of more than one project,
                # display this option, and let the form decide if the user is
                # allowed to do this.
                #
Leigh B. Stoller's avatar
Leigh B. Stoller committed
151
		WRITESIDEBARBUTTON("Project List",
152
				   $TBBASE, "showproject_list.php3");
153
	    
154
		if (ISADMIN($login_uid)) {
155 156 157 158
		    WRITESIDEBARBUTTON("User List",
				       $TBBASE, "showuser_list.php3");
		}
	    
Leigh B. Stoller's avatar
Leigh B. Stoller committed
159 160
		WRITESIDEBARBUTTON("Experiment List",
				   $TBBASE, "showexp_list.php3");
161 162
		WRITESIDEBARBUTTON("Begin an Experiment",
				   $TBBASE, "beginexp.php3");
Leigh B. Stoller's avatar
Leigh B. Stoller committed
163 164
		WRITESIDEBARBUTTON("OSIDs and ImageIDs",
				   $TBBASE, "showosid_list.php3");
165
		WRITESIDEBARBUTTON("Update User Information",
166 167
				   $TBBASE, "moduserinfo.php3");
		WRITESIDEBARBUTTON("Node Reservation Status",
168
				   $TBBASE, "nodecontrol_list.php3");
169 170 171 172 173 174 175
		WRITESIDEBARBUTTON("Node Up/Down Status",
				   $TBDOCBASE, "updown.php3");
		
		if ($login_status & CHECKLOGIN_CVSWEB) {
		    WRITESIDEBARBUTTON("CVS Repository",
				       $TBBASE, "cvsweb/cvsweb.php3");
		}
176
	    }
177
	}
178
	elseif ($login_status & (CHECKLOGIN_UNVERIFIED|CHECKLOGIN_NEWUSER)) {
179 180
	    WRITESIDEBARBUTTON("New User Verification",
			       $TBBASE, "verifyusr_form.php3");
181
	    WRITESIDEBARBUTTON("Update User Information",
182
			       $TBBASE, "moduserinfo.php3");
183
	}
184
	elseif ($login_status & (CHECKLOGIN_UNAPPROVED)) {
185
	    WRITESIDEBARBUTTON("Update User Information",
186
			       $TBBASE, "moduserinfo.php3");
187 188
	}
    }
Chad Barb's avatar
 
Chad Barb committed
189

190 191 192
    #
    # Standard options for anyone.
    #
193
    if (! NOLOGINS()) {
194
	WRITESIDEBARBUTTON("Start Project", $TBBASE, "newproject.php3");
Chad Barb's avatar
 
Chad Barb committed
195
	WRITESIDEBARLASTBUTTON("Join Project",  $TBBASE, "joinproject.php3");
196
    }
197

198 199 200 201 202
    #
    # Cons up a nice message.
    # 
    switch ($login_status & CHECKLOGIN_STATUSMASK) {
    case CHECKLOGIN_LOGGEDIN:
Chad Barb's avatar
 
Chad Barb committed
203
	$login_message = "&quot;$login_uid&quot; Logged In.";
204 205
	    
	if ($login_status & CHECKLOGIN_PSWDEXPIRED)
206
	    $login_message = "$login_message<br>(Password Expired!)";
207 208
	elseif ($login_status & CHECKLOGIN_UNAPPROVED)
	    $login_message = "$login_message<br>(Unapproved!)";
209
	break;
210
    case CHECKLOGIN_TIMEDOUT:
211 212
	$login_message = "Login Timed Out";
	break;
213 214
    default:
	$login_message = 0;
215
	break;
216 217
    }

Chad Barb's avatar
 
Chad Barb committed
218 219 220 221 222 223 224 225
    if ($login_message) {
?>
    <tr>
      <td class="menufooter"><center><b><?php echo "$login_message"; ?></b></center></td>
    </tr>
<?php
    }

226 227
    #
    # Now the login/logout box. Remember, already inside a table.
228 229
    # We want the links to the login/logout pages to always be https,
    # but the images path depends on whether the page was loaded as
230
    # http or https, since we do not want to mix them, since they
231
    # cause warnings.
232
    # 
233
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
Chad Barb's avatar
Chad Barb committed
234

Chad Barb's avatar
 
Chad Barb committed
235 236
?>
    <tr>
Chad Barb's avatar
Chad Barb committed
237 238 239 240 241
      <td class="menufooter" align=center valign=center> <?php
echo "                <a href=\"$TBBASE/logout.php3?uid=$login_uid\">
	           <img alt=\"logoff\" border=0
                        src=\"$BASEPATH/logoff.gif\"></a>\n"
?>
Chad Barb's avatar
 
Chad Barb committed
242 243 244
      </td>
    </tr>
<?php
Chad Barb's avatar
Chad Barb committed
245

Chad Barb's avatar
 
Chad Barb committed
246 247 248 249 250 251 252
#	echo "<tr>
#               <td align=center height=50 valign=center>
#                <a href=\"$TBBASE/logout.php3?uid=$login_uid\">
#	           <img alt=\"logout\" border=0
#                        src=\"$BASEPATH/logoff.gif\"></a>
#               </td>
#              </tr>\n";
253
    }
254
    elseif (!NOLOGINS()) {
Chad Barb's avatar
 
Chad Barb committed
255 256
?>
    <tr>
Chad Barb's avatar
Chad Barb committed
257 258 259 260 261
      <td class="menufooter" align=center valign=center> <?php
echo "                <a href=\"$TBBASE/login.php3\">
	           <img alt=\"logon\" border=0
                        src=\"$BASEPATH/logon.gif\"></a>\n"
?>
Chad Barb's avatar
 
Chad Barb committed
262 263 264
      </td>
    </tr>
<?php
265

Chad Barb's avatar
 
Chad Barb committed
266 267
#	echo "<tr>
#               <td align=center height=50 valign=center>
Chad Barb's avatar
Chad Barb committed
268

Chad Barb's avatar
 
Chad Barb committed
269 270
#               </td>
#              </tr>\n";
271
    }
272

Chad Barb's avatar
 
Chad Barb committed
273

274
    #
275
    # MOTD. Set this with the webcontrol script.
276
    #
277 278
    $query_result =
	DBQueryFatal("SELECT message FROM loginmessage");
279 280 281 282
    
    if (mysql_num_rows($query_result)) {
    	$row = mysql_fetch_row($query_result);
	$message = $row[0];
283

Chad Barb's avatar
 
Chad Barb committed
284 285
	# XXX: make this red and big (like the old one)?
	WRITESIDEBARNOTICE($message);    
286
    }
Chad Barb's avatar
 
Chad Barb committed
287
    echo "</table>\n";
288 289 290 291 292 293
}

#
# Spit out a vanilla page header.
#
function PAGEHEADER($title) {
294 295
    global $login_status, $login_uid, $TBBASE, $TBDOCBASE, $THISHOMEBASE;
    global $BASEPATH, $SSL_PROTOCOL, $drewheader;
296
    global $TBMAINSITE;
297 298

    $drewheader = 1;
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314

    #
    # Determine the proper basepath, which depends on whether the page
    # was loaded as http or https. This lets us be consistent in the URLs
    # we spit back, so that users do not get those pesky warnings. These
    # warnings are generated when a page *loads* (say, images, style files),
    # a mix of http and https. Links can be mixed, and in fact when there
    # is no login active, we want to spit back http for the documentation,
    # but https for the start/join pages.
    #
    if (isset($SSL_PROTOCOL)) {
	$BASEPATH = $TBBASE;
    }
    else {
	$BASEPATH = $TBDOCBASE;
    }
315

316
    #
317
    # Figure out who is logged in, if anyone.
318
    # 
319 320 321 322
    if (($known_uid = GETUID()) != FALSE) {
        #
        # Check to make sure the UID is logged in (not timed out).
        #
323 324 325
        $login_status = CHECKLOGIN($known_uid);
	if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	    $login_uid = $known_uid;
326 327 328
	}
    }

329
    #
330 331
    # Check for NOLOGINS. 
    # We want to allow admin types to continue using the web interface,
332 333
    # and logout anyone else that is currently logged in!
    #
334 335 336 337
    if (NOLOGINS() && $login_uid && !ISADMIN($login_uid)) {
	DOLOGOUT($login_uid);
	$login_status = CHECKLOGIN_NOTLOGGEDIN;
	$login_uid    = 0;
338
    }
339
    
340 341
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
342
    if (1) {
343 344 345 346 347 348 349
	header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
	header("Cache-Control: no-cache, must-revalidate");
	header("Pragma: no-cache");
    }
    else {
	header("Expires: " . gmdate("D, d M Y H:i:s", time() + 300) . " GMT"); 
    }
Chad Barb's avatar
 
Chad Barb committed
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <title><?php echo "emulab.net - $title"; ?></title>
    <!-- dumbed-down style sheet for any browser that groks (eg NS47). -->
    <link REL="stylesheet" HREF="<?php echo "$BASEPATH/common-style.css" ?>" TYPE="text/css" />
    <!-- don't import full style sheet into NS47, since it does a bad job
         of handling it. NS47 doesn't understand '@import'. -->
    <style type="text/css" media="all"><!-- @import "<?php echo "$BASEPATH/style.css" ?>"; --></style>
<?php if ($TBMAINSITE) { ?>
    <meta NAME="keywords" CONTENT="network, emulation, internet, emulator">
    <meta NAME="ROBOTS" CONTENT="NOARCHIVE">
<?php } ?>
  </head>
  <body bgcolor="#FFFFFF" topmargin=0 leftmargin=0 marginheight=0 marginwidth=0>
    <table cellpadding="0" cellspacing="0" width="100%">
      <tr>
        <td valign="top" class="bannercell" background="<?php echo "$BASEPATH/headerbgbb.jpg" ?>"
            bgcolor=#3D627F ><img width=369 height=100 src="<?php echo "$BASEPATH/overlay.gif" ?>" 
            alt="emulab - the utah network testbed" /></td>
      </tr>
    </table><table cellpadding="8" cellspacing="0" height="100%">
      <tr height=100%>
        <td valign="top" class="leftcell" bgcolor=#ccddee>
<!-- sidebar begins -->
<?php WRITESIDEBAR(); ?>
<!-- sidebar ends -->
        </td>
        <td valign="top" width=* class="rightcell">
          <table class="content" width=100% cellpadding="0" cellspacing="0">
            <tr>
              <td class="contentheader"><h2 class="nomargin"><?php
    if ($login_uid && ISADMININSTRATOR()) {
	if (ISADMIN($login_uid)) {
	    echo "<a href=adminmode.php3?target_uid=$login_uid&adminoff=1>
	             <img src='/redball.gif'
                          border=0 alt='Admin On'></a>\n";
	}
	else {
	    echo "<a href=adminmode.php3?target_uid=$login_uid&adminoff=0>
	             <img src='/greenball.gif'
                          border=0 alt='Admin Off'></a>\n";
	}
394
    }
Chad Barb's avatar
 
Chad Barb committed
395 396 397 398 399 400 401
    echo "$title";
?></h2></td>
            </tr>
            <tr>
              <td class="contentbody" width=*>
<!-- begin content -->
<?php
402 403 404 405 406 407
}

#
# ENDPAGE(): This terminates the table started above.
# 
function ENDPAGE() {
Chad Barb's avatar
 
Chad Barb committed
408 409 410 411

?>
              </td>
            </tr>
412
          </table>
Chad Barb's avatar
 
Chad Barb committed
413 414 415 416
        </td>
      </tr>
    </table>
<?php
417 418 419 420 421 422
}

#
# Spit out a vanilla page footer.
#
function PAGEFOOTER() {
423
    global $TBDOCBASE, $TBMAILADDR, $THISHOMEBASE;
Leigh B. Stoller's avatar
Leigh B. Stoller committed
424
    global $TBMAINSITE, $SSL_PROTOCOL;
425

Chad Barb's avatar
 
Chad Barb committed
426 427 428 429 430 431 432 433
#    echo "<!-- Force full window! -->
#	  <base target=_top>
#          <center>[<a href=\"$TBDOCBASE\">$THISHOMEBASE Home</a>]</center>
#          <center>
#           [<a href=\"http://www.cs.utah.edu/flux/\">Flux Research Group</a>]
#           [<a href=\"http://www.cs.utah.edu/\">School of Computing</a>]
#           [<a href=\"http://www.utah.edu/\">University of Utah</a>]
#          </center>
434

Chad Barb's avatar
 
Chad Barb committed
435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469
# echo      "</td></tr><tr><td class=\"contentbody\">"; # new row.

?>
<!-- end content -->
              </td>
            </tr><tr>
              <td class="contentbody">
                <!-- begin copyright -->
                <p align=right>
                  <font size=-2>
                    &copy; 2000-2002 
                    <a href="http://www.utah.edu/">University of Utah</a>
                    and the <a href="http://www.cs.utah.edu/flux/">Flux Group</a>.
                    <a href="<?php echo "$TBDOCBASE"; ?>/docwrapper.php3?docname=copyright.html">
                    All rights reserved.</a>
                  </font>
                  <br />
		  <font size=-2>
                    Problems?
	            Contact <?php echo "$TBMAILADDR\n"; ?>
                  </font>
                </p>
                <!-- end copyright -->
<?php

#echo      "<p align=right>
#            <font size=-1>
#              &copy; 2000-2002 
#              <a href=\"http://www.utah.edu/\">University of Utah</a>
#              and the <a href=\"http://www.cs.utah.edu/flux/\">Flux Group</a>.
#                <a href='$TBDOCBASE/docwrapper.php3?docname=copyright.html'>
#                  All rights reserved.</a>
#           </font><br />\n";

    ENDPAGE();
470 471 472

    if ($TBMAINSITE) {
	echo "<p>
Chad Barb's avatar
 
Chad Barb committed
473
              <a href=\"$TBDOCBASE/netemu.php3\"></a>\n";#
Leigh B. Stoller's avatar
Leigh B. Stoller committed
474 475 476 477 478 479 480 481

	if (! isset($SSL_PROTOCOL)) {
	    echo "<a href=http://www.addme.com>
	             <img width=8 height=2
	                 src='http://www.addme.com/link8.gif'
   	                 alt='Add Me!' border=0>
	          </a>\n";
	}
482 483
    }

Chad Barb's avatar
 
Chad Barb committed
484 485 486 487
?>
  </body>
</html>
<?php
488
}
489 490 491 492 493 494 495 496 497 498 499 500

function PAGEERROR($msg) {
    global $drewheader;

    if (! $drewheader)
	PAGEHEADER("");

    echo "$msg\n";

    PAGEFOOTER();
    die("");
}
501 502 503 504 505

#
# Sub Page/Menu Stuff
#
function WRITESUBMENUBUTTON($text, $link) {
Chad Barb's avatar
 
Chad Barb committed
506 507


508 509 510 511 512 513 514 515 516
    echo "<!-- Table row for button $text -->
          <tr>
            <td valign=center align=left nowrap>
                <b>
         	 <a class=sidebarbutton href='$link'>$text</a>\n";
    #
    # XXX these blanks look bad in lynx, but add required
    #     spacing between menu and body
    #
Chad Barb's avatar
 
Chad Barb committed
517
#    echo "       &nbsp;&nbsp;\n";
518 519 520 521 522 523 524 525 526 527

    echo "      </b>
            </td>
          </tr>\n";
}

#
# Start/End a page within a page. 
#
function SUBPAGESTART() {
Chad Barb's avatar
 
Chad Barb committed
528 529
    echo "<!-- begin subpage -->";
    echo "<table class=\"stealth\" cellspacing=0 cellpadding=0 width='85%' border=0>\n
530
            <tr>\n
Chad Barb's avatar
 
Chad Barb committed
531
              <td class=\"stealth\"valign=top>\n";
532 533 534 535 536 537
}

function SUBPAGEEND() {
    echo "    </td>\n
            </tr>\n
          </table>\n";
Chad Barb's avatar
 
Chad Barb committed
538
    echo "<!-- end subpage -->";
539 540 541 542 543 544 545
}

#
# Start/End a sub menu, located in the upper left of the main frame.
# Note that these cannot be used outside of the SUBPAGE macros above.
#
function SUBMENUSTART($title) {
Chad Barb's avatar
 
Chad Barb committed
546 547 548 549 550 551 552
?>
    <!-- begin submenu -->
    <table class="menu" width=200 cellpadding="0" cellspacing="0">
      <tr>
        <td class="menuheader"><b><?php echo "$title";?></b></td>
      </tr>
<?php
553 554 555
}

function SUBMENUEND() {
Chad Barb's avatar
 
Chad Barb committed
556 557 558 559 560 561
?>
    </table>
    <!-- end submenu -->
  </td>
  <td class="stealth" valign=top align=left width='85%'>
<?php
562 563
}

Chad Barb's avatar
 
Chad Barb committed
564
?>