source: extensions/net.sf.basedb.reggie/trunk/resources/bloodform.jsp @ 1622

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

References #381: Handle core biopsies

Added support to the consent registration wizard and fixed blood registration wizard to also find consent-related and patient information in other blood samples for the same case (with or without 'C' suffix).

File size: 22.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.clients.web.extensions.ExtensionsControl"
11  import="net.sf.basedb.util.Values"
12%>
13<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
14<%@ taglib prefix="p" uri="/WEB-INF/path.tld" %>
15<%
16final SessionControl sc = Base.getExistingSessionControl(request, true);
17final String ID = sc.getId();
18final float scale = Base.getScale(sc);
19final String home = ExtensionsControl.getHomeUrl("net.sf.basedb.reggie");
20
21DbControl dc = null;
22try
23{
24  dc = sc.newDbControl();
25  final User user = User.getById(dc, sc.getLoggedInUserId());
26%>
27<base:page type="default" >
28<base:head scripts="ajax.js" styles="path.css">
29  <link rel="stylesheet" type="text/css" href="css/reggie.css">
30  <%
31  if (Application.getMajorVersion() == 3 && Application.getMinorVersion() == 0)
32  {
33    %>
34    <link rel="stylesheet" type="text/css" href="css/base30.css">
35    <%
36  }
37  %>
38  <script language="JavaScript" src="reggie.js" type="text/javascript" charset="UTF-8"></script>
39 
40 
41<script language="JavaScript">
42
43var debug = true;
44var currentStep = 1;
45var pnrIsValid = false;
46var pnrIsAcceptable = false;
47var caseIsValid = false;
48var samplingDateIsValid = true;
49var freezerDateIsValid = true;
50
51var patientInfo = null;
52var bloodInfo = null;
53var consentInfo = null;
54
55function init()
56{
57  var frm = document.forms['reggie'];
58  frm.caseName.focus();
59}
60
61function step1IsValid()
62{
63  return pnrIsValid && caseIsValid;
64}
65
66function step1IsAcceptable()
67{
68  return pnrIsAcceptable && caseIsValid;
69}
70
71function step2IsValid()
72{
73  var formOk = true;
74  var frm = document.forms['reggie'];
75
76  // New patient only
77  if (!patientInfo.id)
78  {
79    // Validate 'New patient' form
80    if (frm.allFirstNames.value == '')
81    {
82      setInputStatus('allFirstNames', 'Missing', 'invalid');
83      frm.allFirstNames.focus();
84      formOk = false;
85    }
86    else
87    {
88      setInputStatus('allFirstNames', '', 'valid');
89    }
90   
91    if (frm.familyName.value == '')
92    {
93      setInputStatus('familyName', 'Missing', 'invalid');
94      frm.familyName.focus();
95      formOk = false;
96    }
97    else
98    {
99      setInputStatus('familyName', '', 'valid');
100    }
101
102    if (frm.patientCode.value == '')
103    {
104      setInputStatus('patientCode', 'Missing', 'invalid');
105      frm.patientCode.focus();
106      formOk = false;
107    }
108    else
109    {
110      setInputStatus('patientCode', '', 'valid');
111    }
112  }
113  return formOk;
114}
115
116function step3IsValid()
117{
118  var isValid = samplingDateIsValid && freezerDateIsValid;
119  return isValid;
120}
121
122function goNextAuto()
123{
124  goNext(false);
125}
126
127function goNext(manual)
128{
129  var frm = document.forms['reggie'];
130  setInnerHTML('gonext.message', '');
131  if (currentStep == 1)
132  {
133    if (step1IsValid())
134    {
135      gotoStep2();
136    }
137    else if (step1IsAcceptable())
138    {
139      if (manual)
140      {
141        gotoStep2();
142      }
143      else
144      {
145        frm.personalNumber.focus();
146        setInnerHTML('gonext.message', 'Personal number is non-standard. Click \'Next\' to continue registration.');
147      }
148    }
149  }
150  else if (currentStep == 2)
151  {
152    if (step2IsValid()) gotoStep3();
153  }
154}
155
156function caseNameOnChange()
157{
158  var frm = document.forms['reggie'];
159  var caseName = frm.caseName.value;
160  caseIsValid = false;
161  if (caseName == '')
162  {
163    setInputStatus('case', 'Missing', 'invalid');
164    frm.caseName.focus();
165    return;
166  }
167  if (!isValidCaseName(caseName, true)) // Allow 'C' suffix to be used
168  {
169    setInputStatus('case', 'Only 7-digits name is allowed.', 'invalid');
170    frm.caseName.focus();
171    return;
172  }
173
174  setInputStatus('case', '', 'valid');
175  caseIsValid = true;
176 
177  getBloodInfo();
178}
179
180function personalNumberOnChange()
181{
182  var frm = document.forms['reggie'];
183  var pnr = frm.personalNumber.value;
184  pnrIsValid = false;
185  pnrIsAcceptable = true;
186 
187  var pnrLen = pnr.length;
188  if (pnrLen != 12 && pnrLen != 10)
189  {
190    setInputStatus('pnr', pnrLen < 12 ? 'Too short' : 'Too long', 'warning');
191    return;
192  }
193
194  if (!pnr.match(/^\d+$/))
195  {
196    setInputStatus('pnr', 'Non-standard personal number', 'warning');
197    return;
198  }
199 
200  var datePart = pnr.substring(0, pnrLen - 4); // Remove last four digits
201  var dateFormat = pnrLen == 10 ? 'yyMMdd' : 'yyyyMMdd';
202  var isValidDate = Dates.isDate(datePart, dateFormat);
203  if (!isValidDate)
204  {
205    var dayInMonth = parseInt(datePart.substring(-2)); // Last two characters
206    if (dayInMonth > 60)
207    {
208      // 'Samordningsnummer' has day-in-month + 60; check this
209      dayInMonth -= 60;
210      var tmpPnr = pnr.substring(0, pnrLen - 6); // First 4 or 6 digits is year+month
211      if (dayInMonth < 10) tmpPnr += '0';
212      tmpPnr += dayInMonth;
213      isValidDate = Dates.isDate(tmpPnr, dateFormat);
214    }
215  }
216  if (!isValidDate)
217  {
218    setInputStatus('pnr', 'Not a valid date', 'warning');
219    return;
220  }
221 
222  if (!personalNumberControlDigitCheck(pnr.substr(pnrLen == 10 ? 0 : 2)))
223  {
224    setInputStatus('pnr', 'Invalid control digit', 'warning');
225    return;
226  }
227 
228  setInputStatus('pnr', '', 'valid');
229  pnrIsValid = true;
230}
231
232function samplingDateTimeOnChange()
233{
234  var frm = document.forms['reggie'];
235  samplingDateIsValid = false;
236  setInputStatus('samplingDate', '', '');
237 
238  var samplingDate = frm.samplingDate.value;
239  var samplingTime = frm.samplingTime.value;
240 
241  if (samplingDate != '' || samplingTime != '')
242  {
243    // Auto-fill the date if it's only given with 4(MMdd) or 6(yyMMdd) digits.
244    samplingDate = autoFillDate(samplingDate);
245    frm.samplingDate.value = samplingDate;
246
247    samplingTime = autoFillTime(samplingTime);
248    frm.samplingTime.value = samplingTime;
249   
250    if (!Dates.isDate(samplingDate, 'yyyyMMdd'))
251    {
252      setInputStatus('samplingDate', 'Not a valid date', 'invalid');
253      return;
254    }
255    if (frm.freezerDate.value == '') frm.freezerDate.value = samplingDate;
256   
257    if (!Dates.isDate(samplingDate + ' ' + samplingTime, 'yyyyMMdd HHmm'))
258    {
259      if (samplingDate != '') setInputStatus('samplingDate', 'Not a valid time', 'invalid');
260      return;
261    }
262    setInputStatus('samplingDate', '', 'valid');
263  }
264  samplingDateIsValid = true;
265}
266
267function freezerDateTimeOnChange()
268{
269  var frm = document.forms['reggie'];
270  freezerDateIsValid = false;
271  setInputStatus('freezerDate', '', '');
272 
273  var freezerDate = frm.freezerDate.value;
274  var freezerTime = frm.freezerTime.value;
275  var freezerTimestamp;
276 
277  if (freezerDate != '' || freezerTime != '')
278  {
279    // Auto-fill the date if it's only given with 4(MMdd) or 6(yyMMdd) digits.
280    freezerDate = autoFillDate(freezerDate);
281    frm.freezerDate.value = freezerDate;
282
283    freezerTime = autoFillTime(freezerTime);
284    frm.freezerTime.value = freezerTime;
285   
286    if (!Dates.isDate(freezerDate, 'yyyyMMdd'))
287    {
288      setInputStatus('freezerDate', 'Not a valid date', 'invalid');
289      return;
290    }
291    freezerTimestamp = Dates.parseString(freezerDate + ' ' + freezerTime, 'yyyyMMdd HHmm');
292    if (freezerTimestamp == null)
293    {
294      if (freezerDate != '') setInputStatus('freezerDate', 'Not a valid time', 'invalid');
295      return;
296    }
297    setInputStatus('freezerDate', '', 'valid');
298  }
299 
300  freezerDateIsValid = true;
301
302  if (samplingDateIsValid && freezerTimestamp)
303  {
304    var samplingTimestamp = Dates.parseString(frm.samplingDate.value + ' ' + frm.samplingTime.value, 'yyyyMMdd Hmm');
305    if (samplingTimestamp && freezerTimestamp.getDate() != freezerTimestamp.getDate())
306    {
307      setInputStatus('freezerDate', 'Sampling and freezer dates are different', 'warning');
308    }
309  }
310}
311
312function getBloodInfo()
313{
314  // Check entered case and pnr with AJAX
315  var frm = document.forms['reggie'];
316  var caseName = frm.caseName.value;
317  var request = Ajax.getXmlHttpRequest();
318  var url = 'BloodRegistration.servlet?ID=<%=ID%>&cmd=GetBloodInfo';
319  url += '&caseName=' + caseName;
320  request.open("GET", url, false);
321  request.send(null);
322 
323  if (debug) Main.debug(request.responseText);
324
325  var response = JSON.parse(request.responseText);
326  if (response.status != 'ok')
327  {
328    setFatalError(response.message);
329    return false;
330  }
331 
332  // Get biosource information from the AJAX response
333  bloodInfo = response.bloodInfo;
334  patientInfo = response.patientInfo;
335  consentInfo = response.consentInfo;
336 
337  if (patientInfo)
338  {
339    frm.personalNumber.value = patientInfo.personalNumber;
340    gotoStep2();
341  }
342 
343}
344
345function gotoStep2()
346{
347  // Check entered case and pnr with AJAX
348  var frm = document.forms['reggie'];
349  frm.caseName.disabled = true;
350  frm.personalNumber.disabled = true;
351  currentStep = 2;
352 
353  if (!patientInfo)
354  {
355    var pnr = frm.personalNumber.value;
356    if (pnr.length == 10 && pnrIsValid) 
357    {
358      var year = fullYear(parseInt(pnr.substr(0, 2)));
359      pnr = year + pnr.substr(2);
360    }
361    var request = Ajax.getXmlHttpRequest();
362    var url = 'PersonalRegistration.servlet?ID=<%=ID%>&cmd=GetPatientInfo';
363    url += '&personalNumber=' + pnr;
364    url += '&pnrIsValid=' + pnrIsValid;
365    request.open("GET", url, false);
366    request.send(null);
367   
368    if (debug) Main.debug(request.responseText);
369   
370    var response = JSON.parse(request.responseText);
371    if (response.status != 'ok')
372    {
373      setFatalError(response.message);
374      return false;
375    }
376   
377    // Get patient information from the AJAX response
378    patientInfo = response.patientInfo;
379  }
380
381  Main.show('gocancel');
382 
383  if (!patientInfo.id)
384  {
385    Main.show('newPatientSection');
386    frm.patientCode.value=patientInfo.name;
387    setInnerHTML('new.dateOfBirth', patientInfo.dateOfBirth ? patientInfo.dateOfBirth : "---");
388    setInnerHTML('new.gender', patientInfo.gender ? patientInfo.gender : "---");
389    frm.familyName.focus();
390    if (!pnrIsValid)
391    {
392      setInputStatus('gender', 'Gender and DateOfBirth can\'t be automatically generated for non-standard Personal number', 'warning');
393    }
394  }
395  else
396  {
397    Main.show('existingPatientSection');
398    setInnerHTML('existing.patientCode', patientInfo.name);
399    setInnerHTML('existing.familyName', patientInfo.familyName);
400    setInnerHTML('existing.allFirstNames', patientInfo.allFirstNames);
401    if (patientInfo.dateOfBirth) setInnerHTML('existing.dateOfBirth', patientInfo.dateOfBirth);
402    if (patientInfo.gender) setInnerHTML('existing.gender', patientInfo.gender);
403    gotoStep3();
404  }
405}
406
407function gotoStep3()
408{
409  // Check entered case and pnr with AJAX
410  var frm = document.forms['reggie'];
411 
412  if (!patientInfo.id)
413  {
414    frm.patientCode.disabled = true;
415    frm.familyName.disabled = true;
416    frm.allFirstNames.disabled = true;
417    patientInfo.familyName = frm.familyName.value;
418    patientInfo.allFirstNames = frm.allFirstNames.value;
419  }
420  currentStep = 3;
421 
422  var updateMode = bloodInfo.id;
423  Main.show('bloodSection');
424 
425  if (updateMode)
426  {
427    setInnerHTML('step3.title', 'Update blood \''+bloodInfo.name+'\'');
428    if (bloodInfo.samplingDate != null)
429    {
430      frm.samplingDate.value = bloodInfo.samplingDate.substring(0, 8);
431      frm.samplingTime.value = bloodInfo.samplingDate.substring(9, 13);
432      samplingDateTimeOnChange();
433    }
434    if (bloodInfo.freezerDate != null)
435    {
436      frm.freezerDate.value = bloodInfo.freezerDate.substring(0, 8);
437      frm.freezerTime.value = bloodInfo.freezerDate.substring(9, 13);
438      freezerDateTimeOnChange();
439    }
440    frm.serum.checked = bloodInfo.serum == 'Yes';
441    if (bloodInfo.bloodSample)
442    {
443      Forms.selectListOption(frm.bloodSample, bloodInfo.bloodSample);
444    }
445  }
446  else
447  {
448    // Select 'PreNeo' if case name has 'C' suffix
449    var caseName = frm.caseName.value;
450    if (caseName.length > 7 && caseName.substring(7, 8) == 'C')
451    {
452      Forms.selectListOption(frm.bloodSample, 'PreNeo');
453    }
454    if (consentInfo && consentInfo.consent)
455    {
456      frm.copyConsent.value = consentInfo.id;
457      var html = "From '" + consentInfo.name + "' (" + consentInfo.consent;
458      if (consentInfo.consentDate) html += '; ' + consentInfo.consentDate;
459      html += ')';
460      setInnerHTML('copyConsent.text', html);
461      Main.show("copyConsentSection");
462    }
463  }
464 
465  Main.hide('gonext');
466  if (updateMode)
467  {
468    Main.show('goupdate');
469  }
470  else
471  {
472    Main.show('gocreate');
473  }
474 
475  frm.samplingDate.focus();
476}
477
478function goCreate()
479{
480  if (!step3IsValid()) return;
481 
482  Main.hide('gocreate');
483  Main.hide('gocancel');
484  Main.hide('goupdate');
485  var frm = document.forms['reggie'];
486
487  bloodInfo.samplingDate = Main.trimString(frm.samplingDate.value + ' ' + frm.samplingTime.value);
488  bloodInfo.freezerDate = Main.trimString(frm.freezerDate.value + ' ' + frm.freezerTime.value);
489  bloodInfo.serum = frm.serum.checked ? "Yes" : "No";
490  bloodInfo.bloodSample = frm.bloodSample[frm.bloodSample.selectedIndex].value;
491  if (frm.copyConsent.checked && frm.copyConsent.value)
492  {
493    bloodInfo.copyConsent = parseInt(frm.copyConsent.value);
494  }
495
496  frm.samplingDate.disabled = true;
497  frm.samplingTime.disabled = true;
498  frm.freezerDate.disabled = true;
499  frm.freezerTime.disabled = true;
500  frm.bloodSample.disabled = true;
501
502  var updateMode = bloodInfo.id;
503  var submitInfo = new Object();
504  submitInfo.patientInfo = patientInfo;
505  submitInfo.bloodInfo = bloodInfo;
506
507  if (debug) Main.debug(JSON.stringify(submitInfo));
508 
509  var request = Ajax.getXmlHttpRequest();
510  var url = 'BloodRegistration.servlet?ID=<%=ID%>&cmd=';
511  url += updateMode ? 'UpdateBlood' : 'CreateBlood';
512  request.open("POST", url, false);
513  request.setRequestHeader("Content-Type", "application/json");
514  request.send(JSON.stringify(submitInfo));
515
516  if (debug) Main.debug(request.responseText);
517
518  var response = JSON.parse(request.responseText);
519  if (response.status != 'ok')
520  {
521    setFatalError(response.message);
522    return false;
523  }
524 
525  var msg = '<ul>';
526  for (var i = 0; i < response.messages.length; i++)
527  {
528    msg += '<li>' + response.messages[i];
529  }
530  msg += '</ul>';
531  setInnerHTML('done', msg);
532  Main.show('done');
533  Main.show('gorestart');
534
535}
536</script>
537
538</base:head>
539<base:body onload="init()">
540
541  <p:path><p:pathelement 
542    title="Reggie" href="<%="index.jsp?ID="+ID%>" 
543    /><p:pathelement title="Blood referral form registration" 
544    /></p:path>
545
546  <div class="content">
547  <%
548  if (sc.getActiveProjectId() == 0)
549  {
550    %>
551    <div class="messagecontainer note" style="width: 800px; margin-left: 20px; margin-bottom: 20px; margin-right: 0px; font-weight: bold; color: #cc0000;">
552      No project has been selected. You may proceed with the registration but
553      created items will not be shared.
554    </div>
555    <%
556  }
557  %>
558
559  <form name="reggie" onsubmit="return false;">
560 
561  <!-- 1. Case + Personal number -->
562  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
563  <tr>
564    <td rowspan="3" class="stepno">1</td>
565    <td class="steptitle">Enter Case Name and Personal Number</td>
566  </tr>
567  <tr>
568    <td class="stepfields">
569      <table border="0" cellspacing="0" cellpadding="0" width="100%">
570      <tr valign="top">
571        <td class="prompt">Case name</td>
572        <td class="input"><input type="text" name="caseName" 
573          size="18" maxlength="12" onblur="caseNameOnChange()" onkeypress="focusOnEnter(event, 'personalNumber')"></td>
574        <td class="status" id="case.status"></td>
575        <td class="help"><span id="case.message" class="message" style="display: none;"></span>The case (barcode) associated with this patient.</td>
576      </tr>
577      <tr>
578        <td class="prompt">Personal number</td>
579        <td class="input"><input type="text" name="personalNumber" 
580          size="18" maxlength="12" onkeyup="personalNumberOnChange()" onkeypress="doOnTabOrEnter(event, goNextAuto)"></td>
581        <td class="status" id="pnr.status"></td>
582        <td class="help"><span id="pnr.message" class="message" style="display: none;"></span>([YY]YYMMDDZZZZ)</td>
583      </tr>
584      </table>
585    </td>
586  </tr>
587  </table>
588
589  <!-- 2. New patient registration -->
590  <div id="newPatientSection" style="display: none;">
591  <p>
592  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
593  <tr>
594    <td rowspan="2" class="stepno">2</td>
595    <td class="steptitle">New patient: Enter all names</td>
596  </tr>
597  <tr>
598    <td class="stepfields">
599      <table border="0" cellspacing="0" cellpadding="0" width="100%">
600      <tr>
601        <td class="prompt">Patient code</td>
602        <td class="input"><input type="text" name="patientCode" 
603          value="" size="18" maxlength="12" 
604          onkeypress="focusOnEnter(event, 'familyName')"></td>
605        <td class="status" id="patientCode.status"></td>
606        <td class="help"><span id="patientCode.message" class="message" style="display: none;"></span></td>
607      </tr>
608      <tr valign="top">
609        <td class="prompt">Family name</td>
610        <td class="input"><input type="text" name="familyName" 
611          value="" size="35" maxlength="255"
612          onkeypress="focusOnEnter(event, 'allFirstNames')"></td>
613        <td class="status" id="familyName.status"></td>
614        <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>
615      </tr>
616      <tr valign="top">
617        <td class="prompt">All first names</td>
618        <td class="input"><input type="text" name="allFirstNames" 
619          size="35" maxlength="255" onkeypress="doOnTabOrEnter(event, goNextAuto)"></td>
620        <td class="status" id="allFirstNames.status"></td>
621        <td class="help"><span id="allFirstNames.message" class="message" style="display: none;"></span>Type all names, see FamilyName comment on valid characters.</td>
622      </tr>
623      <tr>
624        <td class="prompt">Gender</td>
625        <td class="input" id="new.gender"></td>
626        <td class="status" id="gender.status" rowspan="2"></td>
627        <td class="help" rowspan="2"><span id="gender.message" class="message" style="display:none;"></span></td>
628      </tr>
629      <tr>
630        <td class="prompt">Date of birth</td>
631        <td class="input" id="new.dateOfBirth"></td>
632      </tr>
633      </table>
634    </td>
635  </tr>
636  </table>
637  </div>
638 
639  <!-- 2b. Existing patient -->
640  <div id="existingPatientSection" style="display: none;">
641  <p>
642  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
643  <tr>
644    <td rowspan="2" class="stepno">2</td>
645    <td class="steptitle">Existing patient: Verify names</td>
646  </tr>
647  <tr>
648    <td class="stepfields">
649      <table border="0" cellspacing="0" cellpadding="0" width="100%">
650      <tr>
651        <td class="prompt">Patient code</td>
652        <td class="input" id="existing.patientCode"></td>
653        <td class="status"></td>
654        <td class="help"></td>
655      </tr>
656      <tr>
657        <td class="prompt">Family name</td>
658        <td class="input" id="existing.familyName"></td>
659        <td class="status"></td>
660        <td class="help"></td>
661      </tr>
662      <tr>
663        <td class="prompt">All first names</td>
664        <td class="input" id="existing.allFirstNames"></td>
665        <td class="status"></td>
666        <td class="help"></td>
667      </tr>
668      <tr>
669        <td class="prompt">Gender</td>
670        <td class="input" id="existing.gender"></td>
671        <td class="status"></td>
672        <td class="help"></td>
673      </tr>
674      <tr>
675        <td class="prompt">Date of birth</td>
676        <td class="input" id="existing.dateOfBirth"></td>
677        <td class="status"></td>
678        <td class="help"></td>
679      </tr>
680      </table>
681    </td>
682  </tr>
683  </table>
684  </div>
685
686
687  <!-- 3. Blood registration -->
688  <div id="bloodSection" style="display: none;">
689  <p>
690  <table border="0" cellspacing="0" cellpadding="0" class="stepform">
691  <tr>
692    <td rowspan="2" class="stepno">3</td>
693    <td class="steptitle" id="step3.title">Create new blood</td>
694  </tr>
695  <tr>
696    <td class="stepfields">
697      <table border="0" cellspacing="0" cellpadding="0" width="100%">
698      <tr id="samplingDateSection" valign="top">
699        <td class="subprompt">Blood sampling date</td>
700        <td class="input"><input type="text" name="samplingDate" value="" size="12" maxlength="10" 
701            onkeypress="focusOnEnter(event, 'samplingTime')" onblur="samplingDateTimeOnChange()">
702          Time <input type="text" name="samplingTime" value="" size="6" maxlength="5" 
703            onkeypress="focusOnEnter(event, 'freezerDate')" onblur="samplingDateTimeOnChange()"></td>
704        <td class="status" id="samplingDate.status"></td>
705        <td class="help"><span id="samplingDate.message" class="message" style="display: none;"></span>Date+time of blood sampling (YYYYMMDD, HHMM)</td>
706      </tr>
707      <tr id="freezerDateSection" valign="top">
708        <td class="subprompt">Freezer date</td>
709        <td class="input"><input type="text" name="freezerDate" value="" size="12" maxlength="10"
710            onkeypress="focusOnEnter(event, 'freezerTime')" onblur="freezerDateTimeOnChange()">
711          Time <input type="text" name="freezerTime" value="" size="6" maxlength="5"
712            onblur="freezerDateTimeOnChange()"></td>
713        <td class="status" id="freezerDate.status"></td>
714        <td class="help"><span id="freezerDate.message" class="message" style="display: none;"></span>Date+time when put in freezer (YYYYMMDD, HHMM)</td>
715      </tr>
716      <tr id="serumSection" valign="top">
717        <td class="subprompt">Plasma/serum</td>
718        <td class="input">
719          <input type="checkbox" name="serum" id="serum" value="1"><label for="serum">Yes</label>
720        <td class="status" id="serum.status"></td>
721        <td class="help">Mark the check box if serum/plasma is available.</td>
722      </tr>
723      <tr>
724        <td class="prompt" id="bloodSample.prompt">Blood sample</td>
725        <td class="input" id="bloodSample.input">
726          <select name="bloodSample">
727            <option selected value="">unknown
728            <option value="PreNeo">PreNeo
729            <option value="PreOp">PreOp
730          </select>
731        </td>
732        <td class="status" id="bloodSample.status"></td>
733        <td class="help"><span id="bloodSample.message" class="message" style="display: none;"></span></td>
734      </tr>
735      <tr id="copyConsentSection" style="display: none;">
736        <td class="prompt">Copy consent?</td>
737        <td class="input">
738          <input type="checkbox" name="copyConsent" id="copyConsent" value="" checked>
739          <label for="copyConsent"><span id="copyConsent.text"></span></label>
740        </td>
741        <td class="status" id="copyConsent.status"></td>
742        <td class="help"></td>
743      </tr>
744      </table>
745    </td>
746  </tr>
747  </table>
748  </div>
749
750  <div class="messagecontainer error" id="errorMessage" style="display: none; width: 800px; margin-left: 20px; margin-bottom: 0px;"></div>
751
752  <div id="done" class="success" style="display: none; width: 800px; margin-left: 20px; margin-top: 20px;"></div>
753
754  <table style="margin-left: 20px; margin-top: 10px;" class="navigation">
755  <tr>
756    <td><base:button id="gocancel" title="Cancel" onclick="goRestart(false)" style="display: none;"/></td>
757    <td><base:button id="gonext" title="Next" image="<%=home+"/images/gonext.png"%>" onclick="goNext(true)"/></td>
758    <td><base:button id="gocreate" title="Create" image="<%=home+"/images/gonext.png"%>" onclick="goCreate()" style="display: none;"/></td>
759    <td><base:button id="goupdate" title="Update" image="<%=home+"/images/gonext.png"%>" onclick="goCreate()" style="display: none;"/></td>
760    <td><base:button id="gorestart" title="Restart" image="<%=home+"/images/goback.png"%>" onclick="goRestart(true)" style="display: none;"/></td>
761    <td id="gonext.message" class="message"></td>
762  </tr>
763  </table>
764  </form>
765  </div>
766 
767</base:body>
768</base:page>
769<%
770}
771finally
772{
773  if (dc != null) dc.close();
774}
775%>
Note: See TracBrowser for help on using the repository browser.