source: extensions/net.sf.basedb.reggie/branches/2.13-stable/resources/personal/bloodform.jsp @ 2139

Last change on this file since 2139 was 2139, checked in by olle, 9 years ago

Refs #519. Refs #449. The two blood registration wizards updated to allow 6-digit dates to be used:

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