menu.php3 15.8 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
    echo "<tr><td class=\"menuopt\"><a href=\"$link\">$text</a></td></tr>\n";
Chad Barb's avatar
   
Chad Barb committed
26
}
27

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

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

Chad Barb's avatar
   
Chad Barb committed
40
41
42
43
44
# 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";
Chad Barb's avatar
   
Chad Barb committed
45
    echo "<tr><td class=\"menuoptb\"><a href=\"$link\">$text</a></td></tr>\n";
Chad Barb's avatar
   
Chad Barb committed
46
47
48
49
}

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

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

    #
    # The document base cannot be a mix of secure and nonsecure.
64
    #
Chad Barb's avatar
   
Chad Barb committed
65
66
67
68
69
70
71
72
    
    # 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
73
    WRITESIDEBARBUTTON("Home", $TBDOCBASE, "index.php3");
Leigh B. Stoller's avatar
Leigh B. Stoller committed
74
75
76
    WRITESIDEBARBUTTON_ABS("Kentucky Emulab", $TBDOCBASE,
			   "http://www.uky.emulab.net");
    
77
78
    WRITESIDEBARBUTTON_NEW("Join Netbed (CD)",
			   $TBDOCBASE, "cdrom.php");
Chad Barb's avatar
   
Chad Barb committed
79
80

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

Chad Barb's avatar
   
Chad Barb committed
91
92
93
94
95
96
    # 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;" >[
Chad Barb's avatar
   
Chad Barb committed
97
98
      <a href="<?php echo "$TBDOCBASE/search.php3"; ?>">Advanced 
      Search</a> ]</td></tr>
Chad Barb's avatar
   
Chad Barb committed
99
100
101
102
103
104
    </td></tr>  
  </table>
</form>
<br>
<table class="menu" width=220 cellpadding="0" cellspacing="0">
    <tr><td class="menuheader"><b>Interaction</b></td></tr>
Chad Barb's avatar
   
Chad Barb committed
105
<?php # BACK TO PHP
106

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

112
113
114
115
116
117
118
119
    #
    # 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>",
120
121
			   $TBDOCBASE, "nologins.php3");

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

127
128
129
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	if ($login_status & CHECKLOGIN_ACTIVE) {
	    if ($login_status & CHECKLOGIN_PSWDEXPIRED) {
130
		WRITESIDEBARBUTTON("Change Your Password",
131
				   $TBBASE, "moduserinfo.php3");
132
	    }
133
	    else {
Leigh B. Stoller's avatar
Leigh B. Stoller committed
134
		WRITESIDEBARBUTTON("My Emulab",
135
136
				   $TBBASE,
				   "showuser.php3?target_uid=$login_uid");
137
	    
138
		if (ISADMIN($login_uid)) {
139
140
141
142
143
144
145
146
147
148
149
150
151
152
		    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
153
		WRITESIDEBARBUTTON("Project List",
154
				   $TBBASE, "showproject_list.php3");
155
	    
156
		if (ISADMIN($login_uid)) {
157
158
159
160
		    WRITESIDEBARBUTTON("User List",
				       $TBBASE, "showuser_list.php3");
		}
	    
Leigh B. Stoller's avatar
Leigh B. Stoller committed
161
162
		WRITESIDEBARBUTTON("Experiment List",
				   $TBBASE, "showexp_list.php3");
163
164
		WRITESIDEBARBUTTON("Begin an Experiment",
				   $TBBASE, "beginexp.php3");
Leigh B. Stoller's avatar
Leigh B. Stoller committed
165
166
		WRITESIDEBARBUTTON("OSIDs and ImageIDs",
				   $TBBASE, "showosid_list.php3");
167
		WRITESIDEBARBUTTON("Update User Information",
168
169
				   $TBBASE, "moduserinfo.php3");
		WRITESIDEBARBUTTON("Node Reservation Status",
170
				   $TBBASE, "nodecontrol_list.php3");
171
172
173
174
175
176
177
		WRITESIDEBARBUTTON("Node Up/Down Status",
				   $TBDOCBASE, "updown.php3");
		
		if ($login_status & CHECKLOGIN_CVSWEB) {
		    WRITESIDEBARBUTTON("CVS Repository",
				       $TBBASE, "cvsweb/cvsweb.php3");
		}
178
	    }
179
	}
180
	elseif ($login_status & (CHECKLOGIN_UNVERIFIED|CHECKLOGIN_NEWUSER)) {
181
182
	    WRITESIDEBARBUTTON("New User Verification",
			       $TBBASE, "verifyusr_form.php3");
183
	    WRITESIDEBARBUTTON("Update User Information",
184
			       $TBBASE, "moduserinfo.php3");
185
	}
186
	elseif ($login_status & (CHECKLOGIN_UNAPPROVED)) {
187
	    WRITESIDEBARBUTTON("Update User Information",
188
			       $TBBASE, "moduserinfo.php3");
189
190
	}
    }
Chad Barb's avatar
   
Chad Barb committed
191

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

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

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

227
228
    #
    # Now the login/logout box. Remember, already inside a table.
229
230
    # 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
231
    # http or https, since we do not want to mix them, since they
232
    # cause warnings.
233
    # 
234
    if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
Chad Barb's avatar
   
Chad Barb committed
235
236
237
238
239
240
      echo "<tr>";
      echo "<td class=\"menufooter\" align=center valign=center>";
      echo "<a href=\"$TBBASE/logout.php3?uid=$login_uid\">";
      echo "<img alt=\"logoff\" border=0 ";
      echo "src=\"$BASEPATH/logoff.gif\"></a>\n";
      echo "</td></tr>\n";
241
    }
242
    elseif (!NOLOGINS()) {
Chad Barb's avatar
   
Chad Barb committed
243
244
245
246
247
248
      echo "<tr>";
      echo "<td class=\"menufooter\" align=center valign=center>";
      echo "<a href=\"$TBBASE/login.php3\">";
      echo "<img alt=\"logon\" border=0 ";
      echo "src=\"$BASEPATH/logon.gif\"></a>\n";
      echo "</td></tr>\n";
249
    }
250

Chad Barb's avatar
   
Chad Barb committed
251

252
    #
253
    # MOTD. Set this with the webcontrol script.
254
    #
255
256
    $query_result =
	DBQueryFatal("SELECT message FROM loginmessage");
257
258
259
260
    
    if (mysql_num_rows($query_result)) {
    	$row = mysql_fetch_row($query_result);
	$message = $row[0];
261

Chad Barb's avatar
   
Chad Barb committed
262
263
	# XXX: make this red and big (like the old one)?
	WRITESIDEBARNOTICE($message);    
264
    }
Chad Barb's avatar
   
Chad Barb committed
265
    echo "</table>\n";
266
267
}

Chad Barb's avatar
   
Chad Barb committed
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
#
# spits out beginning part of page
#
function PAGEBEGINNING( $title ) {
    global $BASEPATH, $TBMAINSITE;
?>
<!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
}

#
# finishes sidebar td
#
function FINISHSIDEBAR()
{
?>
<!-- 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
}

323
324
325
326
#
# Spit out a vanilla page header.
#
function PAGEHEADER($title) {
327
328
    global $login_status, $login_uid, $TBBASE, $TBDOCBASE, $THISHOMEBASE;
    global $BASEPATH, $SSL_PROTOCOL, $drewheader;
329
    global $TBMAINSITE;
330
331

    $drewheader = 1;
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347

    #
    # 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;
    }
348

349
    #
350
    # Figure out who is logged in, if anyone.
351
    # 
352
353
354
355
    if (($known_uid = GETUID()) != FALSE) {
        #
        # Check to make sure the UID is logged in (not timed out).
        #
356
357
358
        $login_status = CHECKLOGIN($known_uid);
	if ($login_status & (CHECKLOGIN_LOGGEDIN|CHECKLOGIN_MAYBEVALID)) {
	    $login_uid = $known_uid;
359
360
361
	}
    }

362
    #
363
364
    # Check for NOLOGINS. 
    # We want to allow admin types to continue using the web interface,
365
366
    # and logout anyone else that is currently logged in!
    #
367
368
369
370
    if (NOLOGINS() && $login_uid && !ISADMIN($login_uid)) {
	DOLOGOUT($login_uid);
	$login_status = CHECKLOGIN_NOTLOGGEDIN;
	$login_uid    = 0;
371
    }
372
    
373
374
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    
375
    if (1) {
376
377
378
379
380
381
382
	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
383
384
385
386
387

    PAGEBEGINNING( $title );
    WRITESIDEBAR();
    FINISHSIDEBAR();

Chad Barb's avatar
   
Chad Barb committed
388
389
390
391
392
393
394
395
396
397
398
    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";
	}
399
    }
Chad Barb's avatar
   
Chad Barb committed
400
401
402
    echo "$title</h2></td></tr>\n";
    echo "<tr><td class=\"contentbody\" width=*>";
    echo "<!-- begin content -->\n";
403
404
405
406
407
408
}

#
# ENDPAGE(): This terminates the table started above.
# 
function ENDPAGE() {
Chad Barb's avatar
   
Chad Barb committed
409
410
  echo "</td></tr></table>";
  echo "</td></tr></table>";
411
412
413
414
415
416
}

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

Chad Barb's avatar
   
Chad Barb committed
420
421
422
423
424
425
426
427
#    echo "<!-- Force full window! -->
#	  <base target=_top>

?>
<!-- end content -->
              </td>
            </tr><tr>
              <td class="contentbody">
428
429
430
431
	        <center><font size=-1>
		[&nbsp;<a href="http://www.cs.utah.edu/flux"
                >The&nbsp;Flux&nbsp;Research&nbsp;Group</a>&nbsp;]
		[&nbsp;<a href="http://www.cs.utah.edu/"
432
                >School&nbsp;of&nbsp;Computing</a>&nbsp;]
433
		[&nbsp;<a href="http://www.utah.edu/"
434
435
436
                >The&nbsp;University&nbsp;of&nbsp;Utah</a>&nbsp;]
		</font>
		<br>
Chad Barb's avatar
   
Chad Barb committed
437
                <!-- begin copyright -->
438
                <font size=-2>
Chad Barb's avatar
   
Chad Barb committed
439
440
                    &copy; 2000-2002 
                    <a href="http://www.utah.edu/">University of Utah</a>
Chad Barb's avatar
   
Chad Barb committed
441
442
443
                    and the 
                    <a href="http://www.cs.utah.edu/flux/">Flux Group</a>.
<a href="<?php echo "$TBDOCBASE"; ?>/docwrapper.php3?docname=copyright.html">
Chad Barb's avatar
   
Chad Barb committed
444
445
446
                    All rights reserved.</a>
                  </font>
                  <br />
447
448
		</center>
                <p align=right>
Chad Barb's avatar
   
Chad Barb committed
449
450
451
452
453
454
455
456
457
		  <font size=-2>
                    Problems?
	            Contact <?php echo "$TBMAILADDR\n"; ?>
                  </font>
                </p>
                <!-- end copyright -->
<?php

    ENDPAGE();
458
459
460

    if ($TBMAINSITE) {
	echo "<p>
Chad Barb's avatar
   
Chad Barb committed
461
              <a href=\"$TBDOCBASE/netemu.php3\"></a>\n";#
Leigh B. Stoller's avatar
Leigh B. Stoller committed
462
463
464
465
466
467
468
469

	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";
	}
470
    }
Chad Barb's avatar
   
Chad Barb committed
471
    echo "</body></html>\n";
472
}
473
474
475
476
477
478
479
480
481
482
483
484

function PAGEERROR($msg) {
    global $drewheader;

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

    echo "$msg\n";

    PAGEFOOTER();
    die("");
}
485
486
487
488
489

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


492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
    echo "<!-- Table row for button $text -->
          <tr>
            <td valign=center align=left nowrap>
                <b>
         	 <a class=sidebarbutton href='$link'>$text</a>\n";

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

#
# Start/End a page within a page. 
#
function SUBPAGESTART() {
Chad Barb's avatar
   
Chad Barb committed
507
    echo "<!-- begin subpage -->";
Chad Barb's avatar
   
Chad Barb committed
508
509
    echo "<table class=\"stealth\" cellspacing=0 cellpadding=0 width='85%' 
          border=0>\n
510
            <tr>\n
Chad Barb's avatar
   
Chad Barb committed
511
              <td class=\"stealth\"valign=top>\n";
512
513
514
515
516
517
}

function SUBPAGEEND() {
    echo "    </td>\n
            </tr>\n
          </table>\n";
Chad Barb's avatar
   
Chad Barb committed
518
    echo "<!-- end subpage -->";
519
520
521
522
523
524
525
}

#
# 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
526
527
528
529
530
531
532
?>
    <!-- begin submenu -->
    <table class="menu" width=200 cellpadding="0" cellspacing="0">
      <tr>
        <td class="menuheader"><b><?php echo "$title";?></b></td>
      </tr>
<?php
533
534
535
}

function SUBMENUEND() {
Chad Barb's avatar
   
Chad Barb committed
536
537
538
539
540
541
?>
    </table>
    <!-- end submenu -->
  </td>
  <td class="stealth" valign=top align=left width='85%'>
<?php
542
543
}

Chad Barb's avatar
   
Chad Barb committed
544
?>