source: extensions/net.sf.basedb.reggie/trunk/resources/persinfo.jsp @ 1307

Last change on this file since 1307 was 1307, checked in by Nicklas Nordborg, 11 years ago

References #291: Personal information registration

Allow laterality=unknown option since that is not always known at the time of registration. On the other hand, if a laterality has been selected but the associated specimen tubes doesn't have that information the specimen tubes will be updated with the selected laterality.

File size: 20.8 KB
Line 
1<%@ page
2  pageEncoding="UTF-8"
3  session="false"
4  import="net.sf.basedb.core.Application"
5  import="net.sf.basedb.core.User"
6  import="net.sf.basedb.core.DbControl"
7  import="net.sf.basedb.core.SessionControl"
8  import="net.sf.basedb.clients.web.Base"
9  import="net.sf.basedb.clients.web.util.HTML"
10  import="net.sf.basedb.util.Values"
11%>
12<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
13<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
14<%
15final SessionControl sc = Base.getExistingSessionControl(request, true);
16final String ID = sc.getId();
17final float scale = Base.getScale(sc);
18DbControl dc = null;
19try
20{
21  dc = sc.newDbControl();
22  final User user = User.getById(dc, sc.getLoggedInUserId());
23%>
24<base:page type="default" >
25<base:head scripts="ajax.js" styles="path.css">
26<script language="JavaScript">
27
28var currentStep = 1;
29var pnrIsValid = false;
30var caseIsValid = false;
31var lateralityIsValid = false;
32
33var patientInfo = null;
34var caseInfo = null;
35
36function init()
37{
38  var frm = document.forms['reggie'];
39  frm.caseName.focus();
40}
41
42function step1IsValid()
43{
44  return pnrIsValid && caseIsValid;
45}
46
47function step2IsValid()
48{
49  var formOk = true;
50  var frm = document.forms['reggie'];
51
52  // New patient only
53  if (!patientInfo.id)
54  {
55    // Validate 'New patient' form
56    if (frm.allFirstNames.value == '')
57    {
58      setInputStatus('allFirstNames', 'Missing', 'invalid');
59      frm.allFirstNames.focus();
60      formOk = false;
61    }
62    else
63    {
64      setInputStatus('allFirstNames', '', 'valid');
65    }
66   
67    if (frm.familyName.value == '')
68    {
69      setInputStatus('familyName', 'Missing', 'invalid');
70      frm.familyName.focus();
71      formOk = false;
72    }
73    else
74    {
75      setInputStatus('familyName', '', 'valid');
76    }
77
78    if (frm.patientCode.value == '')
79    {
80      setInputStatus('patientCode', 'Missing', 'invalid');
81      frm.patientCode.focus();
82      formOk = false;
83    }
84    else
85    {
86      setInputStatus('patientCode', '', 'valid');
87    }
88  }
89  return formOk;
90}
91
92function step3IsValid()
93{
94  return lateralityIsValid;
95}
96
97function goNext()
98{
99  if (currentStep == 1)
100  {
101    if (step1IsValid()) gotoStep2();
102  }
103  else if (currentStep == 2)
104  {
105    if (step2IsValid()) gotoStep3();
106  }
107}
108
109function caseNameOnChange()
110{
111  var frm = document.forms['reggie'];
112  var caseName = frm.caseName.value;
113  if (caseName == '')
114  {
115    setInputStatus('case', 'Missing', 'invalid');
116    return;
117  }
118  setInputStatus('case', '', 'valid');
119  caseIsValid = true;
120}
121
122function personalNumberOnChange()
123{
124  var frm = document.forms['reggie'];
125  var pnr = frm.personalNumber.value;
126  pnrIsValid = false;
127 
128  if (pnr.length < 12)
129  {
130    setInputStatus('pnr', 'Too short', 'invalid');
131    return;
132  }
133 
134  if (!Dates.isDate(pnr.substring(0, 8), 'yyyyMMdd'))
135  {
136    setInputStatus('pnr', 'Not a valid date', 'invalid');
137    return;
138  }
139 
140  var sum = 0;
141  var factor = 2;
142  var x = '';
143  for (var i = 2; i < 11; i++)
144  {
145    var digit = parseInt(pnr.substr(i, 1));
146    var tmp = factor * digit;
147    x += '(' + factor + '*' + digit+')';
148    sum += tmp >= 10 ? tmp - 9: tmp;
149    factor = factor == 2 ? 1 : 2;
150  }
151 
152  var control = 10 - (sum % 10);
153  if (control != parseInt(pnr.substr(11, 1)))
154  {
155    setInputStatus('pnr', 'Invalid control digit', 'invalid');
156    return;
157  }
158 
159  setInputStatus('pnr', '', 'valid');
160  pnrIsValid = true;
161}
162
163function lateralityOnChange()
164{
165  lateralityIsValid = false;
166 
167  // Check selected laterality against specimen tubes
168  var frm = document.forms['reggie'];
169  var selectedLaterality = Forms.getCheckedRadio(frm.laterality);
170 
171  // No laterality/case selected
172  if (selectedLaterality == null)
173  {
174    setInputStatus('laterality', 'Not selected', 'invalid');
175    return;
176  }
177  setInputStatus('laterality', '', 'valid');
178  lateralityIsValid = true;
179 
180  var laterality = selectedLaterality.value;
181  if (laterality.match(/\d+/))
182  {
183    // It is the ID of an existing case
184    for (var i = 0; i < patientInfo.cases.length; i++)
185    {
186      var cse = patientInfo.cases[i];
187      if (cse.id == laterality)
188      {
189        laterality = cse.laterality;
190        break;
191      }
192    }
193  }
194  else  if (laterality == '') 
195  {
196    laterality = null;
197  }
198   
199  // No specimen tubes?
200  if (!caseInfo.specimen || caseInfo.specimen.length == 0) return;
201 
202  for (var i = 0; i < caseInfo.specimen.length; i++)
203  {
204    var specimen = caseInfo.specimen[i];
205    if (specimen.laterality != laterality)
206    {
207      if (specimen.laterality == null)
208      {
209        setInputStatus('laterality', 'Specimen tubes are updated to: ' + laterality, 'valid')
210      }
211      else
212      {
213        setInputStatus('laterality', 'Not same laterality as specimen tubes', 'warning');
214      }
215      return;
216    }
217  }
218}
219
220function goNextOnTab(event)
221{
222  if (event.keyCode == 9) setTimeout('goNext()', 200);
223  return true;
224}
225
226function goNextOnTabOrEnter(event)
227{
228  if (event.keyCode == 9 || event.keyCode == 13) setTimeout('goNext()', 200);
229  return true;
230}
231
232function focusOnEnter(event, inputField)
233{
234  if (event.keyCode == 13) setTimeout("document.forms['reggie']."+inputField+".focus()", 200);
235  return true;
236}
237
238function gotoStep2()
239{
240  // Check entered case and pnr with AJAX
241  var frm = document.forms['reggie'];
242  frm.caseName.disabled = true;
243  frm.personalNumber.disabled = true;
244  currentStep = 2;
245 
246  var pnr = frm.personalNumber.value;
247  var caseName = frm.caseName.value;
248  var request = Ajax.getXmlHttpRequest();
249  var url = 'PersonalRegistration.servlet?ID=<%=ID%>&cmd=CheckPersonalNumberAndCaseName';
250  url += '&personalNumber=' + pnr;
251  url += '&caseName=' + caseName;
252  request.open("GET", url, false);
253  request.send(null);
254 
255  //setInnerHTML('debug', request.responseText);
256 
257  var response = JSON.parse(request.responseText);
258  if (response.status != 'ok')
259  {
260    setFatalError(response.message);
261    return false;
262  }
263 
264  Main.show('gocancel');
265 
266  // Get biosource information from the AJAX response
267  patientInfo = response.patientInfo;
268  caseInfo = response.caseInfo;
269 
270  if (!patientInfo.id)
271  {
272    Main.show('newPatientSection');
273    frm.patientCode.value=patientInfo.name;
274    setInnerHTML('new.dateOfBirth', patientInfo.dateOfBirth);
275    setInnerHTML('new.gender', patientInfo.gender);
276    frm.familyName.focus();
277  }
278  else
279  {
280    Main.show('existingPatientSection');
281    setInnerHTML('existing.patientCode', patientInfo.name);
282    setInnerHTML('existing.familyName', patientInfo.familyName);
283    setInnerHTML('existing.allFirstNames', patientInfo.allFirstNames);
284    setInnerHTML('existing.dateOfBirth', patientInfo.dateOfBirth);
285    setInnerHTML('existing.gender', patientInfo.gender);
286    gotoStep3();
287  }
288}
289
290function gotoStep3()
291{
292  // Check entered case and pnr with AJAX
293  var frm = document.forms['reggie'];
294 
295  if (!patientInfo.id)
296  {
297    frm.patientCode.disabled = true;
298    frm.familyName.disabled = true;
299    frm.allFirstNames.disabled = true;
300    patientInfo.familyName = frm.familyName.value;
301    patientInfo.allFirstNames = frm.allFirstNames.value;
302  }
303  currentStep = 3;
304 
305  // Generate list of specimen tubes
306  var hasLeftSpecimen = false;
307  var hasRightSpecimen = false;
308  var hasUnknownSpecimen = false;
309  var thisCaseLaterality = null;
310  if (caseInfo.specimen && caseInfo.specimen.length > 0)
311  {
312    var specimenTubes = '';
313    Main.hide('reasonIfNoSpecimenSection');
314    for (var i = 0; i < caseInfo.specimen.length; i++)
315    {
316      var specimen = caseInfo.specimen[i];
317      specimenTubes += specimen.name;
318      if (specimen.laterality) 
319      {
320        specimenTubes += ' ('+specimen.laterality + ')';
321        Forms.checkRadio(frm.laterality, specimen.laterality);
322        if (specimen.laterality == 'LEFT') hasLeftSpecimen = true;
323        if (specimen.laterality == 'RIGHT') hasRightSpecimen = true;
324        thisCaseLaterality = specimen.laterality;
325      }
326      else
327      {
328        hasUnknownSpecimen = true;
329        specimenTubes += ' (<i>unknown laterality</i>)';
330      }
331      specimenTubes += '<br>';
332    }
333    setInnerHTML('specimenTubes', specimenTubes);
334   
335    // Check that all specimen tubes have the same laterality
336    var numLateralities = 0;
337    if (hasLeftSpecimen) numLateralities++;
338    if (hasRightSpecimen) numLateralities++;
339    if (hasUnknownSpecimen) numLateralities++;
340    if (numLateralities > 1)
341    {
342      setInputStatus('specimenTubes', 'Specimen tubes with different laterality', 'warning');
343      thisCaseLaterality = null;
344    }
345  }
346
347  Main.show('caseSection');
348 
349  // Existing cases for this patient
350  var hasLeftCase = false;
351  var hasRightCase = false;
352  var hasUnknownCase = false;
353  if (patientInfo.cases && patientInfo.cases.length > 0)
354  {
355    var cases = '';
356    for (var i = 0; i < patientInfo.cases.length; i++)
357    {
358      var cc = patientInfo.cases[i];
359      cases += '<input type="radio" name="laterality" value="' + cc.id + '"';
360      if (cc.laterality == 'LEFT') 
361      {
362        if (hasLeftCase) setInputStatus('laterality', 'Two cases with laterality=LEFT', 'warning');
363        hasLeftCase = true;
364      }
365      else if (cc.laterality == 'RIGHT') 
366      {
367        if (hasRightCase) setInputStatus('laterality', 'Two cases with laterality=RIGHT', 'warning');
368        hasRightCase = true;
369      }
370      else
371      {
372        hasUnknownCase = true; 
373      }
374      if (cc.laterality == thisCaseLaterality) cases += ' checked';
375      cases += ' onclick="lateralityOnChange()">' + cc.name;
376      if (cc.laterality)
377      {
378        cases += ' (' + cc.laterality + ')<br>';
379      }
380      else
381      {
382        cases += ' (<i>unknown laterality</i>)<br>';
383      }
384    }
385   
386    if (patientInfo.cases.length == 1)
387    {
388      if (!hasLeftCase)
389      {
390        cases += '<input type="radio" name="laterality" value="LEFT" ';
391        if (thisCaseLaterality == 'LEFT') cases += ' checked';
392        cases += ' onclick="lateralityOnChange()"><i>new case</i> (LEFT)<br>';
393      }
394      if (!hasRightCase)
395      {
396        cases += '<input type="radio" name="laterality" value="RIGHT"';
397        if (thisCaseLaterality == 'RIGHT') cases += ' checked';
398        cases += ' onclick="lateralityOnChange()"><i>new case</i> (RIGHT)<br>';
399      }
400      cases += '<input type="radio" name="laterality" value=""';
401      if (thisCaseLaterality == null) cases += ' checked';
402      cases += ' onclick="lateralityOnChange()"><i>new case</i> (<i>unknown laterality</i>)<br>';
403    }
404   
405    if (patientInfo.cases.length == 2)
406    {
407      setInnerHTML('laterality.prompt', 'Merge with case');
408    }
409    else
410    {
411      setInnerHTML('laterality.prompt', 'Merge/create new case');
412    }
413   
414    setInnerHTML('laterality.input', cases);
415  }
416  lateralityOnChange();
417
418  Main.hide('gonext');
419  Main.show('gocreate');
420}
421
422function goCreate()
423{
424  if (!step3IsValid()) return;
425 
426  Main.hide('gocreate');
427  Main.hide('gocancel');
428  var frm = document.forms['reggie'];
429
430  caseInfo.laterality = Forms.getCheckedRadio(frm.laterality).value;
431  caseInfo.reasonIfNoSpecimen = frm.reasonIfNoSpecimen.value;
432
433  for (var i = 0; i < frm.laterality.length; i++)
434  {
435    frm.laterality[i].disabled = true;
436  }
437  frm.reasonIfNoSpecimen.disabled = true;
438
439  var submitInfo = new Object();
440  submitInfo.patientInfo = patientInfo;
441  submitInfo.caseInfo = caseInfo;
442
443  var request = Ajax.getXmlHttpRequest();
444  var url = 'PersonalRegistration.servlet?ID=<%=ID%>&cmd=Create';
445  request.open("POST", url, false);
446  request.setRequestHeader("Content-Type", "application/json");
447  request.send(JSON.stringify(submitInfo));
448
449  //setInnerHTML('debug', request.responseText);
450 
451  var response = JSON.parse(request.responseText);
452  if (response.status != 'ok')
453  {
454    setFatalError(response.message);
455    return false;
456  }
457 
458  var msg = '<ul>';
459  for (var i = 0; i < response.messages.length; i++)
460  {
461    msg += '<li>' + response.messages[i];
462  }
463  msg += '</ul>';
464  setInnerHTML('done', msg);
465  Main.show('done');
466  Main.show('gorestart');
467
468}
469
470
471function setInnerHTML(id, html)
472{
473  var tag = document.getElementById(id);
474  if (!tag) alert('No tag with id='+id);
475  tag.innerHTML = html;
476}
477
478function setInputStatus(prefix, message, clazz)
479{
480  var tag = document.getElementById(prefix + '.status');
481  tag.className = 'status ' + clazz;
482 
483  setInnerHTML(prefix + '.message', message);
484  if (message)
485  {
486    Main.showInline(prefix + '.message');
487  }
488  else
489  {
490    Main.hide(prefix + '.message');
491  }
492}
493
494function setFatalError(message)
495{
496  setInnerHTML('errorMessage', message);
497  Main.show('errorMessage');
498  Main.hide('gonext');
499  Main.hide('gocancel');
500  Main.show('gorestart');
501}
502
503function goRestart(force)
504{
505  if (!force && !confirm('Cancel this registration?')) return;
506  location.href = location.href;
507}
508</script>
509<style>
510
511.stepform
512{
513  margin-left: 20px;
514  border: 1px solid #999999;
515  width: 800px;
516  table-layout: fixed;
517}
518
519.stepno
520{
521  width: 20px;
522  font-size: 20px;
523  font-weight: bold;
524  color: #E0E0E0;
525  background: #555577;
526  vertical-align: top;
527  text-align: center;
528}
529
530.steptitle
531{
532  width: 780px;
533  color: #333377;
534  background: #E0E0E0;
535  font-weight: bold;
536  padding: 1px 4px 1px 4px;
537  border-bottom: 1px solid #999999;
538}
539
540.nextstep
541{
542  width: 780px;
543  color: #333377;
544  background: #E0E0E0;
545  font-weight: bold;
546  padding: 1px 4px 1px 4px;
547  border-top: 1px solid #999999;
548}
549
550.stepfields
551{
552  width: 780px;
553}
554
555.prompt
556{
557  width: 150px;
558  font-weight: bold;
559  padding: 1px 2px 1px 2px;
560}
561
562.input
563{
564  width: 250px;
565  padding: 1px 2px 1px 2px;
566}
567
568.status
569{
570  width: 30px;
571  padding: 1px 2px 1px 2px;
572}
573
574.help
575{
576  background: #e0e0e0;
577  width: 350px;
578  font-style: italic;
579  padding: 1px 2px 1px 2px;
580}
581
582.message
583{
584  color: #cc0000;
585  font-weight: bold;
586  padding-right: 6px;
587}
588
589.status.invalid:before
590{
591  content: url('../../images/error.gif');
592}
593.status.warning:before
594{
595  content: url('../../images/warning.gif');
596}
597.status.valid:before
598{
599  content: url('../../images/ok.gif');
600}
601.success ul
602{
603  list-style-image: url('../../images/ok.gif');
604}
605</style>
606</base:head>
607<base:body onload="init()">
608
609  <p:path style="margin-top: 20px; margin-bottom: 10px;">
610    <p:pathelement title="Reggie" href="<%="index.jsp?ID="+ID%>" />
611    <p:pathelement title="Personal information registration" />
612  </p:path>
613
614  <form name="reggie" onsubmit="return false;">
615 
616  <!-- 1. Case + Personal number -->
617  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
618  <tr>
619    <td rowspan="3" class="stepno">1</td>
620    <td class="steptitle">Enter Case Name and Personal Number</td>
621  </tr>
622  <tr>
623    <td class="stepfields">
624      <table border="0" cellspacing="0" cellpadding="0" width="100%">
625      <tr valign="top">
626        <td class="prompt">Case name</td>
627        <td class="input"><input type="text" name="caseName" 
628          size="18" maxlength="12" onblur="caseNameOnChange()" onkeypress="focusOnEnter(event, 'personalNumber')"></td>
629        <td class="status" id="case.status"></td>
630        <td class="help"><span id="case.message" class="message" style="display: none;"></span>The case (barcode) associated with this patient.</td>
631      </tr>
632      <tr>
633        <td class="prompt">Personal number</td>
634        <td class="input"><input type="text" name="personalNumber" 
635          size="18" maxlength="12" onkeyup="personalNumberOnChange()" onkeypress="goNextOnTabOrEnter(event)"></td>
636        <td class="status" id="pnr.status"></td>
637        <td class="help"><span id="pnr.message" class="message" style="display: none;"></span>(YYYYMMDDZZZZ)</td>
638      </tr>
639      </table>
640    </td>
641  </tr>
642  </table>
643
644  <!-- 2. New patient registration -->
645  <div id="newPatientSection" style="display: none;">
646  <p>
647  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
648  <tr>
649    <td rowspan="2" class="stepno">2</td>
650    <td class="steptitle">New patient: Enter all names</td>
651  </tr>
652  <tr>
653    <td class="stepfields">
654      <table border="0" cellspacing="0" cellpadding="0" width="100%">
655      <tr>
656        <td class="prompt">Patient code</td>
657        <td class="input"><input type="text" name="patientCode" 
658          value="" size="18" maxlength="12" 
659          onkeypress="focusOnEnter(event, 'familyName')"></td>
660        <td class="status" id="patientCode.status"></td>
661        <td class="help"><span id="patientCode.message" class="message" style="display: none;"></span></td>
662      </tr>
663      <tr valign="top">
664        <td class="prompt">Family name</td>
665        <td class="input"><input type="text" name="familyName" 
666          value="" size="35" maxlength="255"
667          onkeypress="focusOnEnter(event, 'allFirstNames')"></td>
668        <td class="status" id="familyName.status"></td>
669        <td class="help"><span id="familyName.message" class="message" style="display: none;"></span>Keep hyphens, keep åäö, replace all special accented letters [e.g. éèü etc] with standard alphabet character.</td>
670      </tr>
671      <tr valign="top">
672        <td class="prompt">All first names</td>
673        <td class="input"><input type="text" name="allFirstNames" 
674          size="35" maxlength="255" onkeypress="goNextOnTabOrEnter(event)"></td>
675        <td class="status" id="allFirstNames.status"></td>
676        <td class="help"><span id="allFirstNames.message" class="message" style="display: none;"></span>Type all names, see FamilyName comment on valid characters.</td>
677      </tr>
678      <tr>
679        <td class="prompt">Gender</td>
680        <td class="input" id="new.gender"></td>
681        <td class="status"></td>
682        <td class="help"></td>
683      </tr>
684      <tr>
685        <td class="prompt">Date of birth</td>
686        <td class="input" id="new.dateOfBirth"></td>
687        <td class="status"></td>
688        <td class="help"></td>
689      </tr>
690      </table>
691    </td>
692  </tr>
693  </table>
694  </div>
695 
696  <!-- 2b. Existing patient -->
697  <div id="existingPatientSection" style="display: none;">
698  <p>
699  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
700  <tr>
701    <td rowspan="2" class="stepno">2</td>
702    <td class="steptitle">Existing patient: Verify names</td>
703  </tr>
704  <tr>
705    <td class="stepfields">
706      <table border="0" cellspacing="0" cellpadding="0" width="100%">
707      <tr>
708        <td class="prompt">Patient code</td>
709        <td class="input" id="existing.patientCode"></td>
710        <td class="status"></td>
711        <td class="help"></td>
712      </tr>
713      <tr>
714        <td class="prompt">Family name</td>
715        <td class="input" id="existing.familyName"></td>
716        <td class="status"></td>
717        <td class="help"></td>
718      </tr>
719      <tr>
720        <td class="prompt">All first names</td>
721        <td class="input" id="existing.allFirstNames"></td>
722        <td class="status"></td>
723        <td class="help"></td>
724      </tr>
725      <tr>
726        <td class="prompt">Gender</td>
727        <td class="input" id="existing.gender"></td>
728        <td class="status"></td>
729        <td class="help"></td>
730      </tr>
731      <tr>
732        <td class="prompt">Date of birth</td>
733        <td class="input" id="existing.dateOfBirth"></td>
734        <td class="status"></td>
735        <td class="help"></td>
736      </tr>
737      </table>
738    </td>
739  </tr>
740  </table>
741  </div>
742
743
744  <!-- 3. Case registration -->
745  <div id="caseSection" style="display: none;">
746  <p>
747  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
748  <tr>
749    <td rowspan="2" class="stepno">3</td>
750    <td class="steptitle">About this case</td>
751  </tr>
752  <tr>
753    <td class="stepfields">
754      <table border="0" cellspacing="0" cellpadding="0" width="100%">
755      <tr valign="top">
756        <td class="prompt" id="laterality.prompt">Laterality</td>
757        <td class="input" id="laterality.input">
758          <input type="radio" name="laterality" value="LEFT" onclick="lateralityOnChange()">LEFT<br>
759          <input type="radio" name="laterality" value="RIGHT" onclick="lateralityOnChange()">RIGHT<br>
760          <input type="radio" name="laterality" value="" checked onclick="lateralityOnChange()"><i>unknown</i>
761        </td>
762        <td class="status" id="laterality.status"></td>
763        <td class="help"><span id="laterality.message" class="message" style="display: none;"></span></td>
764      </tr>
765      <tr valign="top">
766        <td class="prompt">Specimen tubes</td>
767        <td class="input" id="specimenTubes"><i>not found</i></td>
768        <td class="status" id="specimenTubes.status"></td>
769        <td class="help"><span id="specimenTubes.message" class="message" style="display: none;"></span>The specimen tube(s) associated with this case.</td>
770      </tr>
771      <tr id="reasonIfNoSpecimenSection" valign="top">
772        <td class="prompt">Reason if no specimen</td>
773        <td class="input"><textarea rows="3" cols="30" name="reasonIfNoSpecimen" value=""></textarea></td>
774        <td class="status"></td>
775        <td class="help">Comment why there was no specimen tubes in the delivery.</td>
776      </tr>
777      </table>
778    </td>
779  </tr>
780  </table>
781  </div>
782
783  <div class="error" id="errorMessage" style="display: none; width: 800px; margin-left: 20px; margin-bottom: 0px;"></div>
784
785  <div id="done" class="success" style="display: none; width: 800px; margin-left: 20px; margin-top: 20px;"></div>
786
787  <table style="margin-left: 20px; margin-top: 10px;">
788  <tr>
789    <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" style="display: none;"/></td>
790    <td><base:button id="gonext" title="Next" image="gonext.gif" onclick="goNext()"/></td>
791    <td><base:button id="gocreate" title="Create" image="gonext.gif" onclick="goCreate()" style="display: none;"/></td>
792    <td><base:button id="gorestart" title="Restart" image="goback.gif" onclick="goRestart(true)" style="display: none;"/></td>
793  </tr>
794  </table>
795  </form>
796
797  <pre>
798  <div id="debug"></div>
799  </pre>
800 
801</base:body>
802</base:page>
803<%
804}
805finally
806{
807  if (dc != null) dc.close();
808}
809%>
Note: See TracBrowser for help on using the repository browser.