source: trunk/htdocs/index.php @ 198

Last change on this file since 198 was 198, checked in by MatthewWhiting, 17 years ago

Fixed comments on index page, plus added to User Guide.

File size: 20.7 KB
Line 
1<?php   session_start(); ?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html>
3<?php
4 // index.php
5 // Matthew Whiting Nov 2007
6 // From the original by Albert Teoh
7 //
8 // The opening page for the ATNF Pulsar Data Archive
9 // system. Used to search for observation archive
10 // files.
11 
12 // BEGIN Javascript for expansion blocks
13 // Thanks to:
14 // http://assn9.blogspot.com/
15 // Douglas Bowman
16 // URL:      www.stopdesign.com
17 // Used in: http://www.bloggerforum.com/modules/newbb/viewtopic.php?topic_id=8725&forum=6
18 // Date:     26 Feb 2004
19 //
20
21?>
22<head>
23<link rel="stylesheet" type="text/css" href="styles/style.css" />
24<link rel="stylesheet" type="text/css" href="styles/query.css" />
25<link rel="stylesheet" type="text/css" href="styles/results.css" />
26<link rel="stylesheet" type="text/css" href="styles/atnf.css" />
27<meta http-equiv="Content-Type" content="text/html; charset=iso-8759-1" />
28<meta name="DC.Creator" lang="en" content="personalName=Teoh,Albert" />
29<meta name="ATNF.Maintainer" content="contactName=Webmaster,the" />
30<meta name="DC.Title.alt" lang="en" content="" />
31<meta name="DC.Subject" lang="en" content="pulsar" />
32<meta name="DC.Description" lang="en" content="Searches the data archives at the ATNF" />
33<meta name="DC.Date.created" scheme="ISO8601" content="2002-12-12" />
34<meta name="ATNF.Site" content="Marsfield" />
35<meta name="ATNF.AccessPermission" content="Public" />
36    <meta name="ATNF.MetaVersion" content="1.0" />
37   
38    <script type="text/javascript" src="scripts/atnf-oo-utils.js"></script>
39    <script type="text/javascript" src="scripts/atnf-string-utils.js"></script>
40    <script type="text/javascript" src="scripts/atnf-dom-utils.js"></script>
41    <script type="text/javascript" src="scripts/atnf-validation.js"></script>
42    <script type="text/javascript" src="scripts/atoa-query.js"></script>
43
44<!--
45   <script type="text/javascript" src="scripts/atnf-dom-utils.js"></script>
46   <script type="text/javascript" src="scripts/atoa-query.js"></script>
47   <script type="text/javascript" src="scripts/process.js"></script>
48-->
49
50
51<script type="text/javascript" language="javascript1.2">
52
53function toggleInstructions()
54{
55  var div = document.getElementById( "divInstructions" ) ;
56  if ( div.style.display == 'none' || div.style.display == '' )
57    div.style.display = "block" ;
58  else div.style.display = "none" ;
59}
60
61function togglecomments (id1,id2) {
62
63                var obj1 = document.getElementById(id1);
64                var obj2 = document.getElementById(id2);
65                (obj1.className=="commentshown") ? obj1.className="commenthidden" : obj1.className="commentshown";
66                (obj1.className=="commentshown") ? obj2.innerHTML="<< Hide" : obj2.innerHTML="Show all >>";
67
68}
69
70function checkAll(objName, FormName, FieldName ) {
71
72        var obj = document.getElementsByName(objName);
73        var CheckValue = obj[0].checked;
74
75        if(!document.forms[FormName])
76                return;
77        var objCheckBoxes = document.forms[FormName].elements[FieldName];
78        if(!objCheckBoxes)
79                return;
80        var countCheckBoxes = objCheckBoxes.length;
81        if(!countCheckBoxes)
82                objCheckBoxes.checked = CheckValue;
83        else
84                // set the check value for all check boxes
85                for(var i = 0; i < countCheckBoxes; i++)
86                        objCheckBoxes[i].checked = CheckValue;
87}
88
89function updateSelectAll(objId, allId) {
90        var obj = document.getElementById(objId);
91        var allCheckbox = document.getElementById(allId);       
92       
93        if (!objId.checked && allCheckbox.checked) {
94                allCheckbox.checked = false;
95        }
96               
97               
98}
99</script>
100
101</head>
102
103<title>ATNF Pulsar Data Archive Home</title>
104
105<!-- Start Content -->
106<?php
107       
108include_once("constants.php");
109include_once("security.php");
110include_once("database.php");
111include_once("date.php");
112
113$now_day = date("j");
114$now_month = date("n");
115$now_year = date("Y");
116
117$all_params_id = "all_params";
118$all_others_id = "all_others";
119
120$link = db_connect();
121//$link = db_connect_admin();
122//loadNewTables();
123//////////////////////////////
124// Initialise error messages
125//
126
127$date_error = "";
128
129///////////////////////////////////
130// Find out the first and last dates
131//$query = "select min(mjd), max(mjd) from ".OBSERVATIONS_TABLE;
132$query = "select min(t.mjd), max(t.mjd) from ((select mjd from s70) union (select mjd from obs)) as t";
133$result = mysql_query($query) or die('Query 1 failed: ' . mysql_error());
134
135$row = mysql_fetch_array($result);
136
137$min_mjd = $row[0];
138$max_mjd = $row[1];
139
140// Convert from MJD to JD
141$min_jd = $min_mjd + 2400000.5;
142$max_jd = $max_mjd + 2400000.5;
143
144// convert the mjd to a date
145$min_jd = floor($min_jd);
146$max_jd = ceil($max_jd);
147
148$min_unix = jdtounix($min_jd);
149$max_unix = jdtounix($max_jd);
150$min_date_text = date("j F Y", $min_unix);
151$max_date_text = date("j F Y", $max_unix);
152$minDay   = date("j",$min_unix);
153$minMonth = date("n",$min_unix);
154$minYear  = date("Y",$min_unix);
155$maxDay   = date("j",$max_unix);
156$maxMonth = date("n",$max_unix);
157$maxYear  = date("Y",$max_unix);
158
159// Free resultset
160mysql_free_result($result);
161
162// Clear any old form inputs in session cache
163init($link);
164
165//////////////////////////////////////////////
166// Get the field names to fill form checkboxes
167
168//$query = "SHOW COLUMNS FROM ".OBSERVATIONS_TABLE;
169$query = "SHOW COLUMNS FROM obs";
170$result = mysql_query($query) or die ('Query 2 failed: ' . mysql_error());
171
172$fields = array();
173if (mysql_num_rows($result)) {
174        while($row = mysql_fetch_assoc($result)) {
175          if(($row['Field'] != "data_loc") && ($row['Field'] != "file_size_bytes"))
176            array_push($fields, $row);
177        }
178}
179
180$field_names = Array("filename" => "Filename",
181                     "src_name" => "Source Name",
182                     "project_id" => "Project ID",
183                     "raj" => "RA (J2000, hh:mm:ss)",
184                     "decj" => "Dec (J2000, dd:mm:ss)",
185                     "data_type" => "Data Type",
186                     "obsfreq" => "Frequency",
187                     "bw" => "Bandwidth",
188                     "scanlen" => "Scan Length",
189                     "date" => "UT Date",
190                     "ut" => "UT Time",
191                     "MJD" => "MJD",
192                     "rajd" => "RA (J2000, degs)",
193                     "decjd" => "Dec (J2000, degs)",
194                     "gl" => "Gal. Long. (degs)",
195                     "gb" => "Gal. Lat. (degs)",
196                     "BMAJ" => "Beamsize: BMAJ",
197                     "BMIN" => "Beamsize: BMIN",
198                     "BPA" => "Beam: BPA",
199                     "dm" => "D.M.",
200                     "period" => "Period",
201                     "nchan" => "# channels",
202                     "npol" => "# polarisations",
203                     "nbin" => "# bins",
204                     "nsub" => "# subintegrations",
205                     "tsamp" => "Sample time",
206                     "nbits" => "# bits per sample",
207                     "nbeam" => "# beams",
208                     "cnfg" => "Configuration",
209                     "inst" => "Instrument",
210                     "rcvr" => "Receiver",
211                     "hdrver" => "PSRFITS version",
212                     "survey" => "Survey name",
213                     "telescope" => "Telescope",
214                     "site" => "Site ID",
215                     "obsrvr" => "Observer ID" );
216
217///////////////////////////////////////////////
218// Get the data types available in the database
219//
220
221//$query = "select distinct data_type from " . OBSERVATIONS_TABLE . " order by data_type";
222$query = "(select distinct data_type from obs) union (select distinct data_type from s70)";
223$result = mysql_query($query) or die ('Query 3 failed: ' . mysql_error());
224
225$data_types = array();
226
227if (mysql_num_rows($result)) {
228        while($row = mysql_fetch_array($result, MYSQL_NUM)) {
229                array_push($data_types, $row[0]);
230        }
231}
232
233///////////////////////////////////////////////
234// If the user clicked on the logout button
235if (isset($HTTP_GET_VARS['command'])) {
236        $command = $HTTP_GET_VARS['command'];
237        if ($command == 'logout') {
238                //unset($_SESSION['auth_code']);
239                //unset($_SESSION['username']);
240                $_SESSION = array();
241        }
242}
243
244// If the user hasn't logged in before or if the previous
245// session's authentication wasn't successful
246// Then use the submitted username and password
247if (!isset($_SESSION['auth_code']) || $_SESSION['auth_code'] != OK) {
248        $username = $HTTP_POST_VARS["username"];
249        $password = $HTTP_POST_VARS["password"];
250        $auth_code = authenticate($username, $password);
251}
252else {
253        $auth_code = $_SESSION['auth_code'];
254        $username = $_SESSION['username'];
255}
256
257//echo "auth_code = $auth_code<br>\n";
258
259///////////////////////////////////////////////////////////////
260// Set the new maximum search range if not an atnf staff member
261//
262
263// if (!atnf_staff($username)) {
264//      $max_cal_assoc['day'] = date("j");
265//      $max_cal_assoc['month'] = date("n");
266//      $max_cal_assoc['year'] = date("Y")-2;
267       
268//      echo "$username not atnf<br>\n";
269// }
270
271// Initial state where no username or password supplied OR bad login state
272if ($auth_code != OK) { ?>
273        <body class="front_page">
274
275
276        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
277       
278  <img class="front_page" src="images/front_page01.png"></img>
279        <table class="login">
280        <?php if ( $auth_code == BAD_LOGIN){ ?>
281                <tr><td class="form_field" colspan="2"><font color="red">Incorrect username and/or password</font></td></tr>
282        <?php }?>
283                <tr><td class="form_field"><font color="white">Username: </font></td><td><input type="text" name="username"></td></tr>
284                <tr><td class="form_field"><font color="white">Password: </font></td><td><input type="password" name="password"></td></tr>
285                <tr><td class="form_field" align="left"><font color="white"><a href="register.html">Register</a></font></td><td align="right" rowspan="2"><input type="submit" value="Log in"></td></tr>
286                <tr><td class="form_field" align="left"><font color="white"><a href="forgot.php">Forgot your password?</a></font></td></tr>
287        </table>
288        </form>
289<?php } else {
290        include_once("header.html");
291        $_SESSION['username'] = $username;
292        $_SESSION['auth_code'] = $auth_code;
293
294        $actions = $HTTP_GET_VARS['actions'];
295       
296        if ($actions == "new_query") {
297                init();
298        }
299        else if ($actions == "error") {
300                $date_error = "You are only authorised to access data > 18 months old";
301        }
302?>
303<body class="atoa">
304   
305    <h1>ATNF Pulsar Data Archive</h1>
306
307    <p>This archive provides access to pulsar observations taken at the Parkes radio telescope between the dates of <?php echo $min_date_text." and ".$max_date_text?>. <br>See the Users Guide link for more details. </p>
308   
309    <table width="700" style="border: 0px;">
310    <tr align="center">
311    <td>
312    <a class="top_menu" href="<?php echo $PHP_SELF; ?>?command=logout">Logout</a>
313    <!--a href="login?_action=logout">Logout</a-->
314
315    </td>
316        <td>
317        <a class="top_menu" href="change_password.html?prev_page=<?php echo urlencode("index.php"); ?>">Change Password</a>
318        </td>
319        <td size="30">
320        &nbsp;
321    </td>
322        <td>
323        <a href="#" onClick="toggleInstructions();return false;">Instructions</a>
324        </td>
325        <td size="30">
326        &nbsp;
327    </td>
328        <td>
329        <a href="pulsar_archive_guide.html">Users Guide</a>
330        </td>
331        </tr>
332
333        </table>
334
335        <div id="divInstructions" style="display:none" >
336          <dl class="top">
337            <h2>Instructions</h2>
338              <dt> Display Parameters </dt>
339                <dd> Check the fields you want shown in the results table. Suggested columns are checked by default</dd>
340                <dd> The results can be ordered by one of the parameters in the "Order By" drop-down list</dd>
341              <dt> Coordinates </dt>
342                <dd> The sky position can be specified by a Pulsar name or a RA/Dec position.
343                      The pulsar name takes precedence. The search radius must be given. </dd>
344              <dt> Filter Options </dt>
345                <dd> The date range can be specified - the defaults are the range of dates in the archive.</dd>
346                <dd> Either timing data (particular pulsar) or survey data can be specified. Or both! </dd>
347                <dd> The type of instrument can be specified. Default is any type.</dd>
348                <dd> More than one frequency band can be specified.
349              <dt> Display Other </dt>
350        <dd> Calibraton observations taken within a given time period of the queried observations can also be shown and downloaded. Check the box to do so, and specify the time interval. </dd>
351            </dl>
352        </div>
353
354
355
356<!--<table class="noborder">
357<tr><td><a class="top_menu" href="<?php echo $PHP_SELF; ?>?command=logout">Logout</a> | <a class="top_menu" href="change_password.html?prev_page=<?php echo urlencode("index.php"); ?>">Change Password</a></td>
358</tr>
359</table>-->
360
361
362<form action="query.php" method="GET" name="data_archive_form" id="data_archive_form">
363<input type="hidden" name="state" value="results">
364   
365
366   
367   
368<table class="noborder" cellpadding=0>
369
370    <tr><td colspan=3>
371        <br>
372        <center><input type="submit" value="submit" name="submit_button" style="float: center;"> &nbsp;
373        <input type="reset" value="reset" name="reset_button" style="float: center;"></center>
374        <br>
375    </td></tr>
376   
377    <tr>
378       
379<!-- **************************** -->
380    <td valign="top" class="form_field" rowspan="1">
381
382    <fieldset>
383                <legend>DISPLAY PARAMETERS</legend>
384                <input type="checkbox" name="<?php echo $all_params_id; ?>" id="<?php echo $all_params_id; ?>" onClick="checkAll('<?php echo $all_params_id; ?>', 'data_archive_form', 'params[]')" >Select all<br>
385                        <!--font size="-1"><a href="javascript:togglecomments('params', 'toggler1')" id="toggler1">Show all >></a></font--><br>
386                        <!span class="commenthidden" id="params">
387                        <div id="list">
388                                <?php
389                                $def_fields = Array( "filename", "src_name", "project_id", "raj", "decj",
390                                                     "data_type", "obsfreq", "bw", "scanlen", "date", "ut" );
391
392                                foreach ($fields as $field) {
393                                  echo "<input
394onClick=\"updateSelectAll('".$field['Field']."', '$all_params_id')\" type=\"checkbox\" name=\"params[]\" value=\"".$field['Field']."\" id=\"".$field['Field']."\"";
395                                  if( in_array( $field['Field'], $def_fields ) )
396                                    echo ' checked="true"';
397                                  echo " >".$field_names[$field['Field']]."<br>\n";
398                                }
399                                ?>
400                        </div>
401                        </span>
402        </fieldset>
403                       
404        </td>
405
406<!-- **************************** -->
407
408        <td class="form_field" height="10%" rowspan="1">
409        <!-- Position Options -->
410
411        <table cellspacing=0 cellpadding=0 style="border: 0px;">
412        <tr><td>
413        <fieldset id="flsPosition">
414                <legend>POSITION REQUIREMENTS</legend>
415               
416                <!-- Pulsar Name -->
417                <fieldset>
418                <legend>Pulsar Name</legend>
419                <input type="text" name="pulsar_name" size="20">
420                <br>
421                <p>Note that search-by-name takes precedence over search-by-RA/Dec.</p>
422                </fieldset>
423
424                <br>
425               
426                <fieldset>
427                <legend>Right Ascension (J2000)</legend>
428               
429                <input type="text" id="txtRAHour" name="rahour" size="3" tabindex="1" />
430                <label for="txtRAHour" class="coordinate"><abbr title="hours"><sup>h</sup></abbr></label>
431                                             
432                <input type="text" id="txtRAMinute" name="ramin" size="3" tabindex="1" />
433                <label for="txtRAMinute" class="coordinate"><abbr title="minutes"><sup>m</sup></abbr></label>
434               
435                <input type="text" id="txtRASecond" name="rasec" size="6" tabindex="1" />
436                <label for="txtRASecond" class="coordinate"><abbr title="seconds"><sup>s</sup></abbr></label>
437                </fieldset>
438       
439                <fieldset>
440                <legend>Declination (J2000)</legend>
441               
442                <input type="text" id="txtDecDegree" name="decdeg" size="3" tabindex="1" />
443                <label for="txtDecDegree" class="coordinate"><abbr title="degrees">&deg;</abbr></label>
444               
445                <input type="text" id="txtDecMinute" name="decmin" size="3" tabindex="1" />
446                <label for="txtDecMinute" class="coordinate"><abbr title="minutes">&prime;</abbr></label>
447               
448                <input type="text" id="txtDecSecond" name="decsec" size="6" tabindex="1" />
449                <label for="txtDecSecond" class="coordinate"><abbr title="seconds">&Prime;</abbr></label>
450                </fieldset>
451
452                <br>
453                <br>
454        </fieldset>
455
456        <fieldset id="flsSearchRadius">
457        <legend>SEARCH WINDOW [arcmin]</legend>
458        <input type="text" id="txtSearchWindow" name="radius" size="20" tabindex="1" value="60"/>
459        </fieldset>
460
461        </td></tr>
462</table>
463</td>
464
465<!-- **************************** -->
466
467        <td class="form_field" height="10%">
468        <!-- Filter Options -->
469        <table cellspacing=0 cellpadding=0 style="border: 0px;">
470        <tr><td>
471        <fieldset id="flsObsDate">
472                               
473                <legend>FILTER OPTIONS</legend>
474<br>
475
476                <!-- Date range -->
477                <fieldset>
478                        <legend>Date Range</legend>
479                       
480                          From:                                                                       
481                            <select name="from_day">
482                            <?php
483                            for ($i = 1; $i <= 31; $i++) {
484                              echo "\t\t\t<option";
485                              if ($i == $minDay) { echo " selected"; }
486                              echo " value=\"$i\">$i</option>\n";
487                            }
488                                ?>
489                            </select>
490                        <select name="from_month">
491                                <?php
492                                $monthlist = cal_info(0);
493                                for ($i = 1; $i <= 12; $i++) {
494                                  echo "\t\t\t<option";
495                                  $month = $monthlist[abbrevmonths][$i];
496                                  if ($i == $minMonth) { echo " selected"; }
497                                  echo " value=\"$i\">$month</option>\n";
498                                }
499                                ?>
500                                  </select>
501<!-- <input type="text" size="4" name="from_year" value="<?php echo $min_cal_assoc['year']; ?>"> -->
502                      <select name="from_year">
503                                      <?php
504                                      for ($i = $minYear; $i <= $maxYear; $i++) {
505                                        echo "\t\t\t<option";
506                                        if ($i == $minYear) { echo " selected"; }
507                                  echo " value=\"$i\">$i</option>\n";
508                                }
509                                ?>
510                            </select>
511                        <?php echo "<font size=\"-1\" color=\"red\">$date_error</font>" ?>
512                                &nbsp To:
513                        <select name="to_day">
514                                <?php
515                                        for ($i = 1; $i <= 31; $i++) {
516                                          echo "\t\t\t<option";
517                                          if ($i == $maxDay) { echo " selected"; }
518                                          echo " value=\"$i\">$i</option>\n";
519                                        }
520                                ?>
521                        </select>
522                        <select name="to_month">
523                                <?php
524                            for ($i = 1; $i <= 12; $i++) {
525                              echo "\t\t\t<option";
526                              $month = $monthlist[abbrevmonths][$i];
527                              if ($i == $maxMonth) { echo " selected"; }
528                              echo " value=\"$i\">$month</option>\n";
529                            }
530                                ?>
531                        </select>
532<!-- <input type="text" size="4" name="to_year" value="<?php echo $max_cal_assoc['year']; ?>"> -->
533                      <select name="to_year">
534                                      <?php
535                                      for ($i = $minYear; $i <= $maxYear; $i++) {
536                                        echo "\t\t\t<option";
537                                        if ($i == $maxYear) { echo " selected"; }
538                                  echo " value=\"$i\">$i</option>\n";
539                                }
540                                ?>
541                            </select>
542                </fieldset>
543 
544<br>
545                <!-- Obs Mode -->
546                <fieldset>
547                        <legend>Obs Mode</legend>
548
549                        <select name="obs_mode" onchange="ObsModeChanged()" id="ObsModeList">
550                                <option value="any"> Any </option>
551                                <option value="timing"> Only timing data </option>
552                                <option value="search"> Only search data </option>
553                        </select>
554                </fieldset>
555
556                <!-- Data Type -->
557                <fieldset>
558                        <legend>Data Type</legend>
559
560                        <select name="data_type">
561                                <option value="" selected> Any </option>
562                                <?php
563                                foreach ($data_types as $data_type) {
564                                        echo "
565                                        <option value=\"$data_type\"> $data_type </option>";
566                                }
567                                ?>
568                        </select>
569                </fieldset>     
570
571                <!-- Frequency band -->
572                <fieldset>
573                        <legend>Band Name</legend>
574                            <select id="selBand" name="bandname[]" multiple="multiple" size="5">
575                            <option value="anyBand" selected="selected">Any</option>
576                            <option value="70cm"   >70cm (~0.44 GHz)</option>     
577                            <option value="50cm"   >50cm (~0.66 GHz)</option>     
578                            <option value="20cm">20/18cm (1.2-1.8 GHz)</option>     
579                            <option value="13cm"   >13cm (2.0-2.5 GHz)</option>     
580                            <option value="10cm"   >10cm (2.6-3.6 GHz)</option>     
581                            <option value="6cm"    >6cm (4.5-5.1 GHz)</option>     
582                            <option value="5cm"    >5cm (5.9-6.8 GHz)</option>     
583                            <option value="3cm"    >3cm (8.1-8.6 GHz)</option>     
584                            <option value="1.3cm"  >1.3cm (21.-24. GHz)</option>     
585          </select>
586     </fieldset>
587
588       </fieldset>
589        </td></tr>
590        <tr><td>
591                <fieldset>
592                    <legend>ORDER RESULTS BY</legend>
593                            <table cellspacing="0px" cellpadding="0px" style="border: 0px;">
594                            <tr><td>
595                      <select name="orderBy" id="OrderByList">
596                            <option selected value="distance">Distance
597                            <option value="date">Date
598                            <option value="obsfreq">Frequency
599                            <option value="filename">Filename
600                      </select>
601                            </td><td>
602                            &nbsp;<input type="radio" name="orderDir" id="orderDirectionSel" checked value="asc">Ascending
603                            <br>
604                            &nbsp;<input type="radio" name="orderDir" id="orderDirectionSel" value="desc">Descending
605                            </td></tr>
606                            </table>
607                    <br>
608                </fieldset>
609        </td></tr>
610        <tr><td>
611                <fieldset>
612                    <legend>DISPLAY OTHER DATA</legend>
613                               
614                    <input type="checkbox" name="cals" value="cals" id="cals" checked="true" />
615                                Display Cals taken within
616                    <input type="text" name="cals_within_mins" value="30" maxlength="5" size="3"/>
617                                mins of Observations
618                    <br>
619                                               
620                </fieldset>
621        </td></tr>
622        </table>
623        <br>
624        </td>
625        </tr>   
626</table>
627
628
629</form>
630<div style="min-height: 20px; max-height: 1000px;"> </div>
631<?php
632   include "footer.html";
633}?>
634
635</body>
636
637</html>
638
639
640<?php //////////// Function definitions ///////////////
641
642
643// Initialise the input form variables. If the "New query" button is clicked
644// no argument is passed to init(), hence the need for a default NULL value
645// because there is no need for updating user access statistics
646function init($link=NULL) {
647
648        if ($link) {
649                // Update the users table
650                updateUsersTable($link);
651        }
652       
653        unset($_SESSION['cals']); // The result set of cals
654        unset($_SESSION['obs']); // The result set of observations
655        //unset($_SESSION['cart_items']); // The result set of observations
656}
657
658mysql_close($link);
659
660?>
Note: See TracBrowser for help on using the repository browser.