source: extensions/net.sf.basedb.reggie/trunk/resources/specimentube.jsp @ 1375

Last change on this file since 1375 was 1375, checked in by Martin Svensson, 12 years ago

References #317. Some changes to the registration wizard. The fields that are common for all tubes, are gathered in a separate wizard-step.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 19.7 KB
Line 
1<%@ page
2  pageEncoding="UTF-8"
3  session="false"
4  import="net.sf.basedb.core.User"
5  import="net.sf.basedb.core.DbControl"
6  import="net.sf.basedb.core.SessionControl"
7  import="net.sf.basedb.clients.web.Base" 
8%>
9<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
10<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
11<%
12final SessionControl sc = Base.getExistingSessionControl(request, true);
13final String ID = sc.getId();
14final float scale = Base.getScale(sc);
15DbControl dc = null;
16try
17{
18  dc = sc.newDbControl();
19  final User user = User.getById(dc, sc.getLoggedInUserId());
20%>
21<base:page type="default" >
22<base:head scripts="ajax.js" styles="path.css">
23  <link rel="stylesheet" type="text/css" href="reggie.css">
24  <script language="JavaScript" src="reggie.js" type="text/javascript" charset="UTF-8"></script>
25 
26 
27<script language="JavaScript">
28var caseIsValid = false;
29var arrivalDateIsValid = false;
30var nofDeliveredTubesIsValid = true;
31var nofTubesIsValid = false;
32var debug = false;
33var currentStep = 1;
34
35var caseInfo = null;
36var specimenTubeInfo = null;
37
38function init()
39{
40  var frm = document.forms['reggie'];
41  frm.caseName.focus();
42}
43
44function goNext(manual)
45{
46  setInnerHTML('gonext.message', '');
47  if (currentStep == 1)
48  {
49    if(step1IsValid())
50    {
51      gotoStep2();
52    }
53  }
54  if (currentStep == 2)
55  {
56    gotoStep3();
57  }
58}
59
60function gotoStep2()
61{
62  var frm = document.forms['reggie'];
63  frm.caseName.disabled = true;
64  currentStep = 2;
65  var hasSpecimen = caseInfo.specimen && caseInfo.specimen.length > 0;
66  var hasLeftSpecimen = false;
67  var hasRightSpecimen = false;
68  var hasUnknownSpecimen = false;
69  var thisArrivalDate = null;
70  var thisNumberOfTubes = null;
71  var thisCaseSamplingDate = null;
72  var thisCaseRNALaterDate = null;
73  var thisCaseLaterality = null;
74  var thisPad = null;
75
76  Main.show('gocancel');
77  Main.show('caseSection');
78
79  if (caseInfo.id)
80  {
81    setInnerHTML('step2.title', 'Update Case Information');
82    if (caseInfo.pad)
83    {     
84      frm.pad.value = caseInfo.pad;
85    }
86    if (caseInfo.laterality)
87    {
88      if(caseInfo.laterality == 'LEFT') hasLeftSpecimen = true;
89      if(caseInfo.laterality == 'RIGHT') hasRightSpecimen = true;
90      thisCaseLaterality = caseInfo.laterality;
91      Forms.checkRadio(frm.laterality, thisCaseLaterality);
92      lateralityOnChange();
93    }
94    // Load annotations from the actual case
95    if (hasSpecimen)
96    {
97      frm.nofTubes.value = thisNumberOfTubes;
98      frm.nofTubes.disabled = true;
99      for (var i=0; i < caseInfo.specimen.length; i++)
100      {
101        var specimen = caseInfo.specimen[i];       
102        if (specimen.pad && !thisPad)
103        {         
104          thisPad = specimen.pad;
105        }
106        if(specimen.arrivalDate && !thisArrivalDate)
107        { 
108          thisArrivalDate = specimen.arrivalDate;
109        }
110        if (specimen.nofTubes && !thisNumberOfTubes)
111        {
112          thisNumberOfTubes = specimen.nofTubes;
113        }
114        if (specimen.samplingDate && !thisCaseSamplingDate) 
115        {
116          thisCaseSamplingDate = specimen.samplingDate;         
117        }
118        if (specimen.rnaLaterDate && !thisCaseRNALaterDate) 
119        {
120          thisCaseRNALaterDate = specimen.rnaLaterDate;
121        }
122        if (specimen.laterality) 
123        {
124          if (specimen.laterality == 'LEFT') hasLeftSpecimen = true;
125          if (specimen.laterality == 'RIGHT') hasRightSpecimen = true;
126          if (!thisCaseLaterality) thisCaseLaterality = specimen.laterality;
127        }
128        else
129        {
130          hasUnknownSpecimen = true;       
131        }
132      }
133      // If the number of tubes not is set - use the current number of specimen tubes.
134      if (!thisNumberOfTubes) thisNumberOfTubes = caseInfo.specimen.length;
135      frm.nofTubes.value = thisNumberOfTubes;
136      // Check that all specimen tubes have the same laterality
137      var numLateralities = 0;
138      if (hasLeftSpecimen) numLateralities++;
139      if (hasRightSpecimen) numLateralities++;
140      if (hasUnknownSpecimen) numLateralities++;     
141      if (numLateralities > 1)
142      {
143        setInputStatus('laterality', 'Specimen tubes with different laterality', 'warning');
144        thisCaseLaterality = null;
145        Forms.checkRadio(frm.laterality, thisCaseLaterality);       
146      }     
147      Forms.checkRadio(frm.laterality, thisCaseLaterality);
148      lateralityOnChange();
149     
150      if (thisPad != null)
151      {
152        frm.pad.value = thisPad;
153      }
154      if (thisArrivalDate != null)
155      {
156        frm.arrivalDate.value = thisArrivalDate;
157      }
158      if (thisNumberOfTubes != null)
159      {
160        frm.nofTubes.value = thisNumberOfTubes;
161      }
162      if (thisCaseSamplingDate != null)
163      {
164        frm.samplingDate.value = thisCaseSamplingDate.substring(0, 8);
165        frm.samplingTime.value = thisCaseSamplingDate.substring(9, 13);
166        samplingDateTimeOnChange();
167      }
168      if (thisCaseRNALaterDate != null)
169      {
170        frm.rnaLaterDate.value = thisCaseRNALaterDate.substring(0, 8);
171        frm.rnaLaterTime.value = thisCaseRNALaterDate.substring(9, 13);
172        rnaLaterDateTimeOnChange();
173      }
174    }
175  }
176}
177
178function gotoStep3()
179{
180  var frm = document.forms['reggie'];
181  var inputTubeHtml = '';
182  var nofTubes = frm.nofTubes.value;
183
184  frm.arrivalDate.disabled = true;
185  frm.nofTubes.disabled = true;
186  frm.pad.disabled = true;
187  for (var i=0;i<frm.laterality.length;i++)
188  {
189    frm.laterality[i].disabled = true;
190  }
191  frm.rnaLaterDate.disabled = true;
192  frm.samplingDate.disabled = true;
193  frm.rnaLaterTime.disabled = true;
194  frm.samplingTime.disabled = true;
195  frm.pathNote.disabled = true; 
196 
197  for (var i=0;i<nofTubes;i++)
198  {
199    var specimen = null;
200    if (caseInfo.specimen && caseInfo.specimen.length>0 && i<caseInfo.specimen.length)
201    {
202      specimen = caseInfo.specimen[i];
203    }
204    inputTubeHtml += '<tr>';
205    inputTubeHtml += '<td class="prompt">Specimen Tube '+caseInfo.name+'.'+(i+1)+'</td>';
206    inputTubeHtml += '</tr>';
207
208    var box = 'box'+i;
209    inputTubeHtml += '<tr>';
210    inputTubeHtml += '<td class="subprompt">Box</td>';
211    inputTubeHtml += '<td class="input"><input type="text" name='+box+' value="" size="12" maxlength="10"></td>';
212    inputTubeHtml += '<td class="status" id="'+box+'.status"></td>';
213    inputTubeHtml += '<td class="help"><span id="'+box+'.message" class="message" style="display: none;"></span>Box the specimen tube is located in.</td>';   
214    inputTubeHtml += '</tr>';
215
216    var row = 'row'+i;
217    var column = 'column'+i;
218    inputTubeHtml += '<tr>';
219    inputTubeHtml += '<td class="subprompt">Row</td>';
220    inputTubeHtml += '<td class="input"><input type="text" name='+row+' value="" size="3" maxlength="3">';
221    inputTubeHtml += '&nbsp;Column<input type="text" name='+column+' value="" size="3" maxlength="3">';
222    inputTubeHtml += '</td>';
223    inputTubeHtml += '<td class="status" id="rowColumn'+i+'.status"></td>';
224    inputTubeHtml += '<td class="help"><span id="rowColumn'+i+'.message" class="message" style="display: none;"></span>Row and column the specimen tube is located at.</td>';   
225    inputTubeHtml += '</tr>';
226   
227    var his = 'his'+i;   
228    inputTubeHtml += '<tr>';
229    inputTubeHtml += '<td class="subprompt">His</td>';
230    inputTubeHtml += '<td class="input"><input type="text" name='+his+' value="" size="12" maxlength="10"></td>';
231    inputTubeHtml += '<td class="status" id="his.status"></td>';
232    inputTubeHtml += '<td class="help"><span id="'+his+'.message" class="message" style="display: none;"></span>[µg]</td>';   
233    inputTubeHtml += '</tr>';
234
235    var allPrep = 'allPrep' + i;
236    inputTubeHtml += '<tr>';
237    inputTubeHtml += '<td class="subprompt">Allprep</td>';
238    inputTubeHtml += '<td class="input"><input type="text" name='+allPrep+' value="" size="12" maxlength="10"></td>';
239    inputTubeHtml += '<td class="status" id="'+allPrep+'.status"></td>';
240    inputTubeHtml += '<td class="help"><span id="'+allPrep+'.message" class="message" style="display: none;"></span>[µg]</td>';   
241    inputTubeHtml += '</tr>';
242
243    var backupWeight = 'backupWeight'+i;
244    inputTubeHtml += '<tr>';
245    inputTubeHtml += '<td class="subprompt">Backup weight</td>';
246    inputTubeHtml += '<td class="input"><input type="text" name='+backupWeight+' value="" size="12" maxlength="10"></td>';
247    inputTubeHtml += '<td class="status" id="'+backupWeight+'.status"></td>';
248    inputTubeHtml += '<td class="help"><span id="'+backupWeight+'.message" class="message" style="display: none;"></span>[µg]</td>';   
249    inputTubeHtml += '</tr>';
250
251    var deliveryComment = 'deliveryComment'+i;
252    inputTubeHtml += '<tr>';
253    inputTubeHtml += '<td class="subprompt">Operator comment</td>';
254    inputTubeHtml += '<td class="input"><input type="text" name='+deliveryComment+' value="" size="12" maxlength="10"></td>';
255    inputTubeHtml += '<td class="status" id="'+deliveryComment+'.status"></td>';
256    inputTubeHtml += '<td class="help"><span id="'+deliveryComment+'.message" class="message" style="display: none;"></span>Operator delivery comment</td>';   
257    inputTubeHtml += '</tr>';
258  }
259
260  setInnerHTML('tubeInputs', inputTubeHtml);
261  Main.show('tubeSection');
262  Main.hide('gonext');
263  Main.show('gocreate');
264 
265}
266
267function samplingDateTimeOnChange()
268{
269  var frm = document.forms['reggie'];
270  samplingDateIsValid = false;
271  setInputStatus('samplingDate', '', '');
272 
273  var samplingDate = frm.samplingDate.value;
274  var samplingTime = frm.samplingTime.value;
275 
276  if (samplingDate != '' || samplingTime != '')
277  {
278    // Auto-fill the date if it's only given with 4(MMdd) or 6(yyMMdd) digits.
279    samplingDate = autoFillDate(samplingDate);
280    frm.samplingDate.value = samplingDate;
281
282    samplingTime = autoFillTime(samplingTime);
283    frm.samplingTime.value = samplingTime;
284   
285    if (!Dates.isDate(samplingDate, 'yyyyMMdd'))
286    {
287      setInputStatus('samplingDate', 'Not a valid date', 'invalid');
288      return;
289    }
290    if (frm.rnaLaterDate.value == '') frm.rnaLaterDate.value = samplingDate;
291   
292    if (!Dates.isDate(samplingDate + ' ' + samplingTime, 'yyyyMMdd HHmm'))
293    {
294      if (samplingDate != '') setInputStatus('samplingDate', 'Not a valid time', 'invalid');
295      return;
296    }
297    setInputStatus('samplingDate', '', 'valid');
298  }
299  samplingDateIsValid = true;
300}
301
302function rnaLaterDateTimeOnChange()
303{
304  var frm = document.forms['reggie'];
305  rnaLaterDateIsValid = false;
306  setInputStatus('rnaLaterDate', '', '');
307 
308  var rnaLaterDate = frm.rnaLaterDate.value;
309  var rnaLaterTime = frm.rnaLaterTime.value;
310  var rnaLaterTimestamp;
311 
312  if (rnaLaterDate != '' || rnaLaterTime != '')
313  {
314    // Auto-fill the date if it's only given with 4(MMdd) or 6(yyMMdd) digits.
315    rnaLaterDate = autoFillDate(rnaLaterDate);
316    frm.rnaLaterDate.value = rnaLaterDate;
317
318    rnaLaterTime = autoFillTime(rnaLaterTime);
319    frm.rnaLaterTime.value = rnaLaterTime;
320   
321    if (!Dates.isDate(rnaLaterDate, 'yyyyMMdd'))
322    {
323      setInputStatus('rnaLaterDate', 'Not a valid date', 'invalid');
324      return;
325    }
326    rnaLaterTimestamp = Dates.parseString(rnaLaterDate + ' ' + rnaLaterTime, 'yyyyMMdd HHmm');
327    if (rnaLaterTimestamp == null)
328    {
329      if (rnaLaterDate != '') setInputStatus('rnaLaterDate', 'Not a valid time', 'invalid');
330      return;
331    }
332    setInputStatus('rnaLaterDate', '', 'valid');
333  }
334   
335  rnaLaterDateIsValid = true;
336
337  if (samplingDateIsValid && rnaLaterTimestamp)
338  {
339    var samplingTimestamp = Dates.parseString(frm.samplingDate.value + ' ' + frm.samplingTime.value, 'yyyyMMdd Hmm');
340    if (samplingTimestamp && rnaLaterTimestamp.getDate() != samplingTimestamp.getDate())
341    {
342      setInputStatus('rnaLaterDate', 'Sampling and RNA later dates are different', 'warning');
343    }
344  }
345}
346
347function arrivalDateOnBlur()
348{
349  var frm = document.forms['reggie'];
350  var arrivalDate = frm.arrivalDate.value;
351  arrivalDateIsValid = false;
352
353  setInputStatus('arrivalDate', '', '');
354
355  if (arrivalDate != '')
356  {
357    arrivalDate = autoFillDate(arrivalDate);
358    frm.arrivalDate.value = arrivalDate;
359
360    if (!Dates.isDate(arrivalDate, 'yyyyMMdd'))
361    {
362      setInputStatus('arrivalDate', 'Not a valid date', 'invalid');
363      return;
364    }
365    setInputStatus('arrivalDate', '', 'valid');
366    arrivalDateIsValid = true;   
367  }
368  else
369  {
370    setInputStatus('arrivalDate', 'Missing', 'warning');
371  }
372}
373
374function nofTubesOnBlur()
375{
376  var frm = document.forms['reggie'];
377  var nofTubes = frm.nofTubes.value;
378
379  if (nofTubes == '')
380  {
381    setInputStatus('nofTubes', 'Missing', 'invalid');
382    return;
383  }
384  setInputStatus('nofTubes','', 'valid');
385}
386
387function caseNameOnBlur()
388{
389  var frm = document.forms['reggie'];
390  var caseName = frm.caseName.value;
391  if (caseName == '')
392  {
393    setInputStatus('case', 'Missing', 'invalid');
394    return;
395  }
396  setInputStatus('case', '', 'valid');
397  caseIsValid = true;
398
399  getCaseInfo();
400}
401
402function padOnChange()
403{
404  var frm = document.forms['reggie'];
405  var PAD = frm.pad.value;
406  if (PAD == '')
407  {
408    setInputStatus('pad', 'Missing', 'warning');
409    return;
410  }
411  frm.pad.value = PAD.replace(/\+/, '-');
412  setInputStatus('pad', '', 'valid');
413}
414
415function lateralityOnChange()
416{
417  lateralityIsValid = false;
418  var updateMode = caseInfo.id;
419 
420  // Check selected laterality against specimen tubes
421  var frm = document.forms['reggie'];
422  var selectedLaterality = Forms.getCheckedRadio(frm.laterality);
423 
424  // No laterality/case selected
425  if (selectedLaterality == null)
426  {
427    setInputStatus('laterality', 'Not selected', 'invalid');
428    return;
429  }
430  var laterality = selectedLaterality.value; 
431  // No specimen tubes?
432  if (!caseInfo.specimen || caseInfo.specimen.length == 0) return;
433 
434  for (var i = 0; i < caseInfo.specimen.length; i++)
435  {
436    var specimen = caseInfo.specimen[i];
437    if (specimen.laterality != laterality)
438    {
439      if (specimen.laterality == null || updateMode)
440      {
441        setInputStatus('laterality', 'Specimen tubes are updated to: ' + laterality, 'valid')
442      }
443      else
444      {
445        setInputStatus('laterality', 'Not same laterality as specimen tubes', 'warning');
446      }
447      return;
448    }
449  } 
450}
451
452function getCaseInfo()
453{
454  var frm = document.forms['reggie']; 
455  var caseName = frm.caseName.value;
456  var request = Ajax.getXmlHttpRequest();
457  var url = 'SpecimenTubeRegistration.servlet?ID=<%=ID%>&cmd=GetCaseInfo';
458  url += '&caseName=' + caseName;
459  request.open("GET", url, false);
460  request.send(null);
461
462  if (debug) Main.debug(request.responseText);
463
464  var response = JSON.parse(request.responseText);
465  if (response.status != 'ok')
466  {
467    setFatalError(response.message);
468    return false;
469  }
470
471  caseInfo = response.caseInfo;
472  if (caseInfo)
473  {
474    gotoStep2();
475  }
476}
477
478</script>
479
480</base:head>
481<base:body onload="init()">
482<p:path style="margin-top: 20px; margin-bottom: 10px;">
483    <p:pathelement title="Reggie" href="<%="index.jsp?ID="+ID%>" />
484    <p:pathelement title="Specimen tube registration" />
485  </p:path>
486
487  <%
488  if (sc.getActiveProjectId() == 0)
489  {
490    %>
491    <base:note type="warning" style="width: 800px; margin-left: 20px; margin-bottom: 20px; margin-right: 0px; font-weight: bold; color: #cc0000;">
492      No project has been selected. You may proceed with the registration but
493      created items will not be shared.
494    </base:note>
495    <%
496  }
497  %>
498
499  <form name="reggie" onsubmit="return false;">
500 
501  <!-- 1. Case name-->
502  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
503  <tr>
504    <td rowspan="3" class="stepno">1</td>
505    <td class="steptitle">Enter Case Name</td>
506  </tr>
507  <tr>
508    <td class="stepfields">
509      <table border="0" cellspacing="0" cellpadding="0" width="100%">
510      <tr valign="top">
511        <td class="prompt">Case name</td>
512        <td class="input"><input type="text" name="caseName" 
513          size="18" maxlength="12" onblur="caseNameOnBlur()"></td>
514        <td class="status" id="case.status"></td>
515        <td class="help"><span id="case.message" class="message" style="display: none;"></span>The case (barcode) associated with this specimen tube.</td>
516      </tr>
517      </table>
518    </td>
519  </tr>
520  </table>
521 
522  <div id="caseSection" style="display: none;">
523  <p></p>
524  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
525  <tr>
526    <td rowspan="2" class="stepno">2</td>
527    <td id="step2.title" class="steptitle">Enter Case information</td>
528  </tr>
529  <tr>
530    <td class="stepfields">
531    <table border="0" cellspacing="0" cellpadding="0" width="100%">
532    <tr>
533      <td class="prompt">Number of tubes</td>
534      <td class="input"><input type="text" name="nofTubes"
535        value="" size="12" maxlength="10" onblur="nofTubesOnBlur()"></td>
536      <td class="status" id="nofTubes.status"></td>
537      <td class="help"><span id="nofTubes.message" class="message" style="display:none"></span>Number of tubes in this case.</td>
538    </tr>
539    <tr valign="top">
540      <td class="prompt">Arrival date</td>
541      <td class="input"><input type="text" name="arrivalDate"
542        value="" size="12" maxlength="10" onblur="arrivalDateOnBlur()"></td>
543      <td class="status" id="arrivalDate.status"></td>
544      <td class="help"><span id="arrivalDate.message" class="message" style="display:none"></span>Date when the specimen tubes arrived(YYYYMMDD or MMDD).</td>
545    </tr>
546    <tr>
547      <td class="prompt">PAD</td>
548      <td class="input"><input type="text" name="pad" 
549        value="" size="12" maxlength="10"
550        onblur="padOnChange()"></td>
551      <td class="status" id="pad.status"></td>
552      <td class="help"><span id="pad.message" class="message" style="display: none;"></span></td>
553    </tr>
554    <tr id="samplingDateSection" valign="top">
555      <td class="prompt">Sampling date</td>
556      <td class="input"><input type="text" name="samplingDate" value="" size="12" maxlength="10" 
557          onkeypress="focusOnEnter(event, 'samplingTime')" onblur="samplingDateTimeOnChange()">
558        Time <input type="text" name="samplingTime" value="" size="6" maxlength="4" 
559          onkeypress="focusOnEnter(event, 'rnaLaterDate')" onblur="samplingDateTimeOnChange()"></td>
560      <td class="status" id="samplingDate.status"></td>
561      <td class="help"><span id="samplingDate.message" class="message" style="display: none;"></span>Date+time of surgical removal (YYYYMMDD, HHMM)</td>
562    </tr>
563    <tr id="rnaLaterDateSection" valign="top">
564      <td class="prompt">RNA Later date</td>
565      <td class="input"><input type="text" name="rnaLaterDate" value="" size="12" maxlength="10"
566          onkeypress="focusOnEnter(event, 'rnaLaterTime')" onblur="rnaLaterDateTimeOnChange()">
567        Time <input type="text" name="rnaLaterTime" value="" size="6" maxlength="4"
568          onblur="rnaLaterDateTimeOnChange()"></td>
569      <td class="status" id="rnaLaterDate.status"></td>
570      <td class="help"><span id="rnaLaterDate.message" class="message" style="display: none;"></span>Date+time of pathology handling (YYYYMMDD, HHMM)</td>
571    </tr>
572    <tr>
573      <td class="prompt" id="laterality.prompt">Laterality</td>
574      <td class="input" id="laterality.input">
575        <input type="radio" name="laterality" value="LEFT" onclick="lateralityOnChange()">LEFT<br>
576        <input type="radio" name="laterality" value="RIGHT" onclick="lateralityOnChange()">RIGHT<br>
577        <input type="radio" name="laterality" value="" onclick="lateralityOnChange()"><i>unknown</i>
578      </td>
579      <td class="status" id="laterality.status"></td>
580      <td class="help"><span id="laterality.message" class="message" style="display: none;"></span></td>
581    </tr>
582    <tr>
583      <td class="prompt" id="pathNote.prompt">Path note</td>
584      <td class="input" id="pathNote.input"><textarea rows="3" cols="30" name="pathNote" value=""></textarea></td>
585      <td class="status" id="pathNote.status"></td>
586      <td class="help"><span id="pathNote.message" class="message" style="display: none;"></span></td>
587    </tr>
588    </table>
589    </td>
590     
591  </tr>
592  </table>
593  </div>
594 
595  <div id="tubeSection" style="display:none;">
596  <p></p>
597  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
598  <tr>
599    <td rowspan="2" class="stepno">3</td>
600    <td class="steptitle">Enter tube information</td>   
601  </tr>
602  <tr>
603    <td class="stepfields">
604      <table id="tubeInputs" border="0" cellspacing="0" cellpadding="0" width="100%">
605      </table>
606    </td>
607  </tr>
608  </table>
609  </div>
610   
611  <div class="error" id="errorMessage" style="display: none; width: 800px; margin-left: 20px; margin-bottom: 0px;"></div>
612 
613  <div id="done" class="success" style="display: none; width: 800px; margin-left: 20px; margin-top: 20px;"></div>
614 
615  <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
616    <tr>
617      <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" style="display: none;"/></td>
618      <td><base:button id="gonext" title="Next" image="gonext.gif" onclick="goNext(true)"/></td>
619      <td><base:button id="gocreate" title="Create" image="gonext.gif" onclick="goCreate()" style="display: none;"/></td>
620      <td><base:button id="gorestart" title="Restart" image="goback.gif" onclick="goRestart(true)" style="display: none;"/></td>
621      <td id="gonext.message" class="message"></td>
622    </tr>
623  </table>
624  </form>
625 
626</base:body>
627</base:page>
628<%
629}
630finally
631{
632  if (dc != null) dc.close();
633}
634%>
Note: See TracBrowser for help on using the repository browser.