extensions/net.sf.basedb.reggie/trunk/resources/personal/bloodfollowupform.js

Code
Comments
Other
Rev Date Author Line
2602 27 Aug 14 nicklas 1 var Blood = function()
2602 27 Aug 14 nicklas 2 {
2602 27 Aug 14 nicklas 3   var blood = {};
2656 11 Sep 14 nicklas 4   var debug = 0;
2602 27 Aug 14 nicklas 5   
2602 27 Aug 14 nicklas 6   var patientInfo = null;
2602 27 Aug 14 nicklas 7   var bloodInfo = null;
2602 27 Aug 14 nicklas 8   var consentInfo = null;
2602 27 Aug 14 nicklas 9   var caseInfo = null;
2602 27 Aug 14 nicklas 10
2602 27 Aug 14 nicklas 11   var rccidIsValid = false;
2602 27 Aug 14 nicklas 12   var pnrIsValid = false;
2602 27 Aug 14 nicklas 13   var pnrIsAcceptable = false;
2602 27 Aug 14 nicklas 14
2602 27 Aug 14 nicklas 15   var samplingDateIsValid = true;
2602 27 Aug 14 nicklas 16   var freezerDateIsValid = true;
2602 27 Aug 14 nicklas 17
2602 27 Aug 14 nicklas 18   blood.initPage = function()
2602 27 Aug 14 nicklas 19   {
2602 27 Aug 14 nicklas 20     // Step 1
2602 27 Aug 14 nicklas 21     Events.addEventHandler('step-1', 'wizard-validate', blood.validateStep1);
2602 27 Aug 14 nicklas 22     Events.addEventHandler('rccidNumber', 'keypress', Wizard.focusOnEnter);
2602 27 Aug 14 nicklas 23     Events.addEventHandler('rccidNumber', 'blur', blood.rccidNumberOnChange);
2602 27 Aug 14 nicklas 24     Events.addEventHandler('personalNumber', 'keyup', blood.personalNumberOnChange);
2602 27 Aug 14 nicklas 25     Events.addEventHandler('personalNumber', 'keypress', Wizard.goNextOnTabOrEnter);
2602 27 Aug 14 nicklas 26     
2602 27 Aug 14 nicklas 27     // Step 2
2602 27 Aug 14 nicklas 28     Events.addEventHandler('step-2', 'wizard-initialize', blood.initializeStep2);
2602 27 Aug 14 nicklas 29     Events.addEventHandler('step-2', 'wizard-validate', blood.validateStep2);
2602 27 Aug 14 nicklas 30     
2602 27 Aug 14 nicklas 31     // Step 3
2602 27 Aug 14 nicklas 32     Events.addEventHandler('step-3', 'wizard-initialize', blood.initializeStep3);
2602 27 Aug 14 nicklas 33     Events.addEventHandler('step-3', 'wizard-validate', blood.validateStep3);
2602 27 Aug 14 nicklas 34     Events.addEventHandler('samplingDate', 'blur', blood.samplingDateTimeOnChange);
2602 27 Aug 14 nicklas 35     Events.addEventHandler('samplingTime', 'blur', blood.samplingDateTimeOnChange);
2602 27 Aug 14 nicklas 36     Events.addEventHandler('freezerDate', 'blur', blood.freezerDateTimeOnChange);
2602 27 Aug 14 nicklas 37     Events.addEventHandler('freezerTime', 'blur', blood.freezerDateTimeOnChange);
2602 27 Aug 14 nicklas 38
2602 27 Aug 14 nicklas 39     // Navigation
2602 27 Aug 14 nicklas 40     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
2602 27 Aug 14 nicklas 41     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
2602 27 Aug 14 nicklas 42     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
2602 27 Aug 14 nicklas 43     Buttons.addClickHandler('goregister', Wizard.goRegister);
2602 27 Aug 14 nicklas 44     Buttons.addClickHandler('goupdate', Wizard.goRegister);
2602 27 Aug 14 nicklas 45     
2602 27 Aug 14 nicklas 46     // Final registration
2602 27 Aug 14 nicklas 47     Events.addEventHandler('wizard', 'wizard-submit', blood.submit);
2602 27 Aug 14 nicklas 48     
2602 27 Aug 14 nicklas 49     Doc.show('step-1');
2602 27 Aug 14 nicklas 50     Doc.show('gonext');
2602 27 Aug 14 nicklas 51   }
2602 27 Aug 14 nicklas 52   
2602 27 Aug 14 nicklas 53
2602 27 Aug 14 nicklas 54   blood.rccidNumberOnChange = function()
2602 27 Aug 14 nicklas 55   {
2602 27 Aug 14 nicklas 56     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 57     Wizard.setInputStatus('rccidNumber');
2602 27 Aug 14 nicklas 58     
2602 27 Aug 14 nicklas 59     var rccidNumber = frm.rccidNumber.value.toUpperCase();
2602 27 Aug 14 nicklas 60     rccidIsValid = false;
2602 27 Aug 14 nicklas 61     if (rccidNumber == '')
2602 27 Aug 14 nicklas 62     {
2602 27 Aug 14 nicklas 63       Wizard.setInputStatus('rccidNumber', 'invalid', 'Missing');
2602 27 Aug 14 nicklas 64       frm.rccidNumber.focus();
2602 27 Aug 14 nicklas 65       return;
2602 27 Aug 14 nicklas 66     }
2602 27 Aug 14 nicklas 67     
2602 27 Aug 14 nicklas 68     if (!Reggie.isValidRccidNumber(rccidNumber))
2602 27 Aug 14 nicklas 69     {
6801 11 Aug 22 nicklas 70       Wizard.setInputStatus('rccidNumber', 'invalid', 'Expected NNNN-NNNNNNNN where N is a digit, or 10 digits + \'B\', \'C\', or \'D\'');
2602 27 Aug 14 nicklas 71       frm.rccidNumber.focus();
2602 27 Aug 14 nicklas 72       return;
2602 27 Aug 14 nicklas 73     }
2602 27 Aug 14 nicklas 74
2602 27 Aug 14 nicklas 75     frm.rccidNumber.value = rccidNumber;
2602 27 Aug 14 nicklas 76     Wizard.setInputStatus('rccidNumber', 'valid');
2602 27 Aug 14 nicklas 77     rccidIsValid = true;
2602 27 Aug 14 nicklas 78
2602 27 Aug 14 nicklas 79
2602 27 Aug 14 nicklas 80     var url = '../BloodFollowUpRegistration.servlet?ID='+App.getSessionId();
2602 27 Aug 14 nicklas 81     url += '&cmd=GetBloodFollowUpInfo';
2602 27 Aug 14 nicklas 82     url += '&rccidNumber=' + encodeURIComponent(rccidNumber);
2602 27 Aug 14 nicklas 83     Wizard.showLoadingAnimation('Loading information follow-up blood...');
2602 27 Aug 14 nicklas 84     Wizard.asyncJsonRequest(url, blood.bloodInfoLoadedFromRccid);
2602 27 Aug 14 nicklas 85   }
2602 27 Aug 14 nicklas 86   
2602 27 Aug 14 nicklas 87   blood.bloodInfoLoadedFromRccid = function(response)
2602 27 Aug 14 nicklas 88   {
2602 27 Aug 14 nicklas 89     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 90     bloodInfo = response.bloodInfo;
2602 27 Aug 14 nicklas 91     patientInfo = response.patientInfo;
2602 27 Aug 14 nicklas 92     consentInfo = response.consentInfo;
2602 27 Aug 14 nicklas 93     caseInfo = response.caseInfo;
2602 27 Aug 14 nicklas 94     
2602 27 Aug 14 nicklas 95     if (patientInfo)
2602 27 Aug 14 nicklas 96     {
2602 27 Aug 14 nicklas 97       // Move to next step
2602 27 Aug 14 nicklas 98       frm.personalNumber.value = patientInfo.personalNumber;
2602 27 Aug 14 nicklas 99       blood.personalNumberOnChange();
2602 27 Aug 14 nicklas 100       Wizard.goNext(false);
2602 27 Aug 14 nicklas 101     }
2602 27 Aug 14 nicklas 102   }
2602 27 Aug 14 nicklas 103   
2602 27 Aug 14 nicklas 104   blood.personalNumberOnChange = function()
2602 27 Aug 14 nicklas 105   {
2602 27 Aug 14 nicklas 106     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 107     var pnr = frm.personalNumber.value;
2602 27 Aug 14 nicklas 108     pnrIsValid = false;
2602 27 Aug 14 nicklas 109     pnrIsAcceptable = true;
2602 27 Aug 14 nicklas 110     
2602 27 Aug 14 nicklas 111     var pnrLen = pnr.length;
2602 27 Aug 14 nicklas 112     if (pnrLen != 12 && pnrLen != 10)
2602 27 Aug 14 nicklas 113     {
2602 27 Aug 14 nicklas 114       Wizard.setInputStatus('personalNumber', 'warning', pnrLen < 12 ? 'Too short' : 'Too long');
2602 27 Aug 14 nicklas 115       return;
2602 27 Aug 14 nicklas 116     }
2602 27 Aug 14 nicklas 117
2602 27 Aug 14 nicklas 118     if (!pnr.match(/^\d+$/))
2602 27 Aug 14 nicklas 119     {
2602 27 Aug 14 nicklas 120       Wizard.setInputStatus('personalNumber', 'warning', 'Non-standard personal number');
2602 27 Aug 14 nicklas 121       return;
2602 27 Aug 14 nicklas 122     }
2602 27 Aug 14 nicklas 123     
2602 27 Aug 14 nicklas 124     var datePart = pnr.substring(0, pnrLen - 4); // Remove last four digits
2602 27 Aug 14 nicklas 125     var dateFormat = pnrLen == 10 ? 'yyMMdd' : 'yyyyMMdd';
2602 27 Aug 14 nicklas 126     var isValidDate = Dates.isDate(datePart, dateFormat);
2602 27 Aug 14 nicklas 127     if (!isValidDate)
2602 27 Aug 14 nicklas 128     {
2602 27 Aug 14 nicklas 129       var dayInMonth = parseInt(datePart.substring(-2), 10); // Last two characters
2602 27 Aug 14 nicklas 130       if (dayInMonth > 60)
2602 27 Aug 14 nicklas 131       {
2602 27 Aug 14 nicklas 132         // 'Samordningsnummer' has day-in-month + 60; check this
2602 27 Aug 14 nicklas 133         dayInMonth -= 60;
2602 27 Aug 14 nicklas 134         var tmpPnr = pnr.substring(0, pnrLen - 6); // First 4 or 6 digits is year+month
2602 27 Aug 14 nicklas 135         if (dayInMonth < 10) tmpPnr += '0';
2602 27 Aug 14 nicklas 136         tmpPnr += dayInMonth;
2602 27 Aug 14 nicklas 137         isValidDate = Dates.isDate(tmpPnr, dateFormat);
2602 27 Aug 14 nicklas 138       }
2602 27 Aug 14 nicklas 139     }
2602 27 Aug 14 nicklas 140     if (!isValidDate)
2602 27 Aug 14 nicklas 141     {
2602 27 Aug 14 nicklas 142       Wizard.setInputStatus('personalNumber', 'warning', 'Not a valid date');
2602 27 Aug 14 nicklas 143       return;
2602 27 Aug 14 nicklas 144     }
2602 27 Aug 14 nicklas 145     
2602 27 Aug 14 nicklas 146     if (!Reggie.personalNumberControlDigitCheck(pnr.substr(pnrLen == 10 ? 0 : 2)))
2602 27 Aug 14 nicklas 147     {
2602 27 Aug 14 nicklas 148       Wizard.setInputStatus('personalNumber', 'warning', 'Invalid control digit');
2602 27 Aug 14 nicklas 149       return;
2602 27 Aug 14 nicklas 150     }
2602 27 Aug 14 nicklas 151     
2602 27 Aug 14 nicklas 152     Wizard.setInputStatus('personalNumber', 'valid');
2602 27 Aug 14 nicklas 153     pnrIsValid = true;
2602 27 Aug 14 nicklas 154     Wizard.hideGoNextConfirmation();
2602 27 Aug 14 nicklas 155   }
2602 27 Aug 14 nicklas 156
2602 27 Aug 14 nicklas 157   blood.validateStep1 = function(event)
2602 27 Aug 14 nicklas 158   {
2602 27 Aug 14 nicklas 159     App.debug('gonext:'+event.detail.auto);
2602 27 Aug 14 nicklas 160     if (event.detail.auto)
2602 27 Aug 14 nicklas 161     {
2602 27 Aug 14 nicklas 162       if (!rccidIsValid || !pnrIsValid) 
2602 27 Aug 14 nicklas 163       {
2602 27 Aug 14 nicklas 164         if (pnrIsAcceptable)
2602 27 Aug 14 nicklas 165         {
2602 27 Aug 14 nicklas 166           var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 167           frm.personalNumber.focus();
2602 27 Aug 14 nicklas 168           Wizard.showGoNextConfirmation(true, 'Check to verify registration of non-standard personal number.');
2602 27 Aug 14 nicklas 169         }
2602 27 Aug 14 nicklas 170         event.preventDefault();
2602 27 Aug 14 nicklas 171       }
2602 27 Aug 14 nicklas 172     }
2602 27 Aug 14 nicklas 173     else
2602 27 Aug 14 nicklas 174     {
2602 27 Aug 14 nicklas 175       if (!rccidIsValid || !pnrIsAcceptable) event.preventDefault();
2602 27 Aug 14 nicklas 176     }
2602 27 Aug 14 nicklas 177
2602 27 Aug 14 nicklas 178   }
2602 27 Aug 14 nicklas 179   
6824 30 Aug 22 nicklas 180   blood.initializeStep2 = function()
2602 27 Aug 14 nicklas 181   {
2602 27 Aug 14 nicklas 182     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 183     if (!patientInfo || !patientInfo.id)
2602 27 Aug 14 nicklas 184     {
2602 27 Aug 14 nicklas 185       var pnr = frm.personalNumber.value;
2602 27 Aug 14 nicklas 186       if (pnr.length == 10 && pnrIsValid) 
2602 27 Aug 14 nicklas 187       {
2602 27 Aug 14 nicklas 188         var year = Reggie.fullYear(parseInt(pnr.substr(0, 2), 10));
2602 27 Aug 14 nicklas 189         pnr = year + pnr.substr(2);
2602 27 Aug 14 nicklas 190       }
2602 27 Aug 14 nicklas 191       var url = '../PersonalRegistration.servlet?ID='+App.getSessionId();
2602 27 Aug 14 nicklas 192       url += '&cmd=GetPatientInfo';
2602 27 Aug 14 nicklas 193       url += '&personalNumber=' + encodeURIComponent(pnr);
2602 27 Aug 14 nicklas 194       url += '&pnrIsValid=' + pnrIsValid;
2602 27 Aug 14 nicklas 195       
2602 27 Aug 14 nicklas 196       Wizard.showLoadingAnimation('Loading patient information...');
6824 30 Aug 22 nicklas 197       Wizard.asyncJsonRequest(url, blood.patientInfoLoaded);
2602 27 Aug 14 nicklas 198     }
2602 27 Aug 14 nicklas 199     else
2602 27 Aug 14 nicklas 200     {
2602 27 Aug 14 nicklas 201       blood.patientInfoLoaded();
2602 27 Aug 14 nicklas 202     }
2602 27 Aug 14 nicklas 203   }
2602 27 Aug 14 nicklas 204   
2602 27 Aug 14 nicklas 205   blood.patientInfoLoaded = function(response)
2602 27 Aug 14 nicklas 206   {
2602 27 Aug 14 nicklas 207     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 208     if (response) patientInfo = response.patientInfo;
2602 27 Aug 14 nicklas 209     if (!patientInfo || !patientInfo.id)
2602 27 Aug 14 nicklas 210     {
2602 27 Aug 14 nicklas 211       Wizard.setFatalError('No patient found for personal number: ' + Strings.encodeTags(frm.personalNumber.value));
2602 27 Aug 14 nicklas 212       return;
2602 27 Aug 14 nicklas 213     }
2602 27 Aug 14 nicklas 214   
2602 27 Aug 14 nicklas 215     Doc.element('existing.patientCode').innerHTML = Strings.encodeTags(patientInfo.name);
2602 27 Aug 14 nicklas 216     Doc.element('existing.familyName').innerHTML = Strings.encodeTags(patientInfo.familyName);
2602 27 Aug 14 nicklas 217     Doc.element('existing.allFirstNames').innerHTML = Strings.encodeTags(patientInfo.allFirstNames);
2602 27 Aug 14 nicklas 218     if (patientInfo.gender) 
2602 27 Aug 14 nicklas 219     {
2602 27 Aug 14 nicklas 220       Doc.element('existing.gender').innerHTML = Strings.encodeTags(patientInfo.gender);
2602 27 Aug 14 nicklas 221     }
2602 27 Aug 14 nicklas 222     if (patientInfo.dateOfBirth) 
2602 27 Aug 14 nicklas 223     {
2602 27 Aug 14 nicklas 224       Doc.element('existing.dateOfBirth').innerHTML = Strings.encodeTags(patientInfo.dateOfBirth);
2602 27 Aug 14 nicklas 225     }
2602 27 Aug 14 nicklas 226     
2602 27 Aug 14 nicklas 227     // Get case option list JSON object from personal number with AJAX
2602 27 Aug 14 nicklas 228     var url = '../BloodFollowUpRegistration.servlet?ID='+App.getSessionId();
2602 27 Aug 14 nicklas 229     url += '&cmd=GetCaseOptions';
6801 11 Aug 22 nicklas 230     url += '&patientId='+patientInfo.id;
2602 27 Aug 14 nicklas 231     if (caseInfo && caseInfo.id)
2602 27 Aug 14 nicklas 232     {
2602 27 Aug 14 nicklas 233       url += '&caseId='+caseInfo.id;
2602 27 Aug 14 nicklas 234     }
2602 27 Aug 14 nicklas 235     
2602 27 Aug 14 nicklas 236     Wizard.showLoadingAnimation('Loading case information...');
2602 27 Aug 14 nicklas 237     Wizard.asyncJsonRequest(url, blood.caseInfoLoaded);
2602 27 Aug 14 nicklas 238   }
2602 27 Aug 14 nicklas 239   
2602 27 Aug 14 nicklas 240   blood.caseInfoLoaded = function(response)
2602 27 Aug 14 nicklas 241   {
2602 27 Aug 14 nicklas 242     var frm = document.forms['reggie'];
6801 11 Aug 22 nicklas 243     var caseOptions = response.caseOptionArray || [];
2602 27 Aug 14 nicklas 244     // Construct case name menu from JSON data
2602 27 Aug 14 nicklas 245     for (var i = 0; i < caseOptions.length; i++)
2602 27 Aug 14 nicklas 246     {
2602 27 Aug 14 nicklas 247       var option = caseOptions[i];
2602 27 Aug 14 nicklas 248       frm.caseName[frm.caseName.length] = new Option(option.text, option.id);
2602 27 Aug 14 nicklas 249     }
2602 27 Aug 14 nicklas 250     Wizard.setCurrentStep(2);
2602 27 Aug 14 nicklas 251
2602 27 Aug 14 nicklas 252     if (caseOptions.length == 0)
2602 27 Aug 14 nicklas 253     {
2602 27 Aug 14 nicklas 254       Wizard.setFatalError('Can\'t find any case for this patient');
2602 27 Aug 14 nicklas 255       return;
2602 27 Aug 14 nicklas 256     }
2602 27 Aug 14 nicklas 257     else if (caseOptions.length == 1)
2602 27 Aug 14 nicklas 258     {
2602 27 Aug 14 nicklas 259       // Only one case, go directly to blood data entries
2602 27 Aug 14 nicklas 260       Wizard.setInputStatus('caseName', 'valid', 'Only one case found');
2602 27 Aug 14 nicklas 261       Wizard.goNext(true);
2602 27 Aug 14 nicklas 262       return;
2602 27 Aug 14 nicklas 263     }
2602 27 Aug 14 nicklas 264     else if (caseOptions.length > 1)
2602 27 Aug 14 nicklas 265     {
2602 27 Aug 14 nicklas 266       // More than one case, let user select case to use
2602 27 Aug 14 nicklas 267       Wizard.setInputStatus('caseName', 'valid', caseOptions.length + ' cases found. Select case to use.')
2602 27 Aug 14 nicklas 268     }
2602 27 Aug 14 nicklas 269     
2602 27 Aug 14 nicklas 270     Doc.show('gonext');
2602 27 Aug 14 nicklas 271     Doc.show('gocancel');
2602 27 Aug 14 nicklas 272   }
2602 27 Aug 14 nicklas 273   
2602 27 Aug 14 nicklas 274   // Nothing to validate
2602 27 Aug 14 nicklas 275   blood.validateStep2 = function(event)
2602 27 Aug 14 nicklas 276   {}
2602 27 Aug 14 nicklas 277   
2602 27 Aug 14 nicklas 278   
6824 30 Aug 22 nicklas 279   blood.initializeStep3 = function()
2602 27 Aug 14 nicklas 280   {
2602 27 Aug 14 nicklas 281     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 282
2602 27 Aug 14 nicklas 283     var caseId = frm.caseName.value;
2602 27 Aug 14 nicklas 284     
2602 27 Aug 14 nicklas 285     if (!bloodInfo)
2602 27 Aug 14 nicklas 286     {
2602 27 Aug 14 nicklas 287       var url = '../BloodFollowUpRegistration.servlet?ID='+App.getSessionId();
2602 27 Aug 14 nicklas 288       url += '&cmd=GetNextBloodName';
2602 27 Aug 14 nicklas 289       url += '&caseId=' + caseId;
2602 27 Aug 14 nicklas 290
2602 27 Aug 14 nicklas 291       Wizard.showLoadingAnimation('Loading blood information...');
2602 27 Aug 14 nicklas 292       Wizard.asyncJsonRequest(url, blood.bloodInfoLoadedFromCase);
2602 27 Aug 14 nicklas 293     }
2602 27 Aug 14 nicklas 294     else
2602 27 Aug 14 nicklas 295     {
2602 27 Aug 14 nicklas 296       blood.bloodInfoLoadedFromCase();
2602 27 Aug 14 nicklas 297     }
2602 27 Aug 14 nicklas 298   }
2602 27 Aug 14 nicklas 299   
2602 27 Aug 14 nicklas 300   blood.bloodInfoLoadedFromCase = function(response)
2602 27 Aug 14 nicklas 301   {
2602 27 Aug 14 nicklas 302     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 303     if (response) 
2602 27 Aug 14 nicklas 304     {
2602 27 Aug 14 nicklas 305       bloodInfo = response.bloodInfo;
2602 27 Aug 14 nicklas 306       consentInfo = response.consentInfo;
2602 27 Aug 14 nicklas 307     }
2602 27 Aug 14 nicklas 308     
2602 27 Aug 14 nicklas 309     var updateMode = bloodInfo.id;
2602 27 Aug 14 nicklas 310     
2602 27 Aug 14 nicklas 311     if (updateMode)
2602 27 Aug 14 nicklas 312     {
2602 27 Aug 14 nicklas 313       Doc.element('step-3-title').innerHTML = 'Update blood \''+Strings.encodeTags(bloodInfo.name)+'\'';
2602 27 Aug 14 nicklas 314       if (bloodInfo.samplingDate != null)
2602 27 Aug 14 nicklas 315       {
2602 27 Aug 14 nicklas 316         frm.samplingDate.value = bloodInfo.samplingDate.substring(0, 8);
2602 27 Aug 14 nicklas 317         frm.samplingTime.value = bloodInfo.samplingDate.substring(9, 13);
2602 27 Aug 14 nicklas 318         blood.samplingDateTimeOnChange();
2602 27 Aug 14 nicklas 319       }
2602 27 Aug 14 nicklas 320       if (bloodInfo.freezerDate != null)
2602 27 Aug 14 nicklas 321       {
2602 27 Aug 14 nicklas 322         frm.freezerDate.value = bloodInfo.freezerDate.substring(0, 8);
2602 27 Aug 14 nicklas 323         frm.freezerTime.value = bloodInfo.freezerDate.substring(9, 13);
2602 27 Aug 14 nicklas 324         blood.freezerDateTimeOnChange();
2602 27 Aug 14 nicklas 325       }
2602 27 Aug 14 nicklas 326       frm.serum.checked = bloodInfo.serum == 'Yes';
2602 27 Aug 14 nicklas 327       if (bloodInfo.bloodSample)
2602 27 Aug 14 nicklas 328       {
2602 27 Aug 14 nicklas 329         Forms.selectListOption(frm.bloodSample, bloodInfo.bloodSample);
2602 27 Aug 14 nicklas 330       }
2602 27 Aug 14 nicklas 331       if (bloodInfo.otherPathNote)
2602 27 Aug 14 nicklas 332       {
2602 27 Aug 14 nicklas 333         frm.otherPathNote.value = bloodInfo.otherPathNote;
2602 27 Aug 14 nicklas 334       }
2602 27 Aug 14 nicklas 335     }
2602 27 Aug 14 nicklas 336     else
2602 27 Aug 14 nicklas 337     {
2602 27 Aug 14 nicklas 338       frm.serum.checked = true;
2602 27 Aug 14 nicklas 339       frm.serum.disabled = true;
2602 27 Aug 14 nicklas 340       // Select follow-up blood annotation from RCCID suffix letter (last character in name)
2602 27 Aug 14 nicklas 341       var rccidNumber = frm.rccidNumber.value;
2602 27 Aug 14 nicklas 342       var rccidSuffixLetter = rccidNumber.substring(rccidNumber.length-1, rccidNumber.length);
2602 27 Aug 14 nicklas 343       var followUpCode = null;
2602 27 Aug 14 nicklas 344       if (rccidSuffixLetter == 'B')
2602 27 Aug 14 nicklas 345       {
2602 27 Aug 14 nicklas 346         followUpCode = 'FollowUp06';
2602 27 Aug 14 nicklas 347       }
2602 27 Aug 14 nicklas 348       else if (rccidSuffixLetter == 'C')
2602 27 Aug 14 nicklas 349       {
2602 27 Aug 14 nicklas 350         followUpCode = 'FollowUp12';
2602 27 Aug 14 nicklas 351       }
2602 27 Aug 14 nicklas 352       else if (rccidSuffixLetter == 'D')
2602 27 Aug 14 nicklas 353       {
2602 27 Aug 14 nicklas 354         followUpCode = 'FollowUp36';
2602 27 Aug 14 nicklas 355       }
2602 27 Aug 14 nicklas 356       if (followUpCode != null)
2602 27 Aug 14 nicklas 357       {
2602 27 Aug 14 nicklas 358         Forms.selectListOption(frm.bloodSample, followUpCode);
2602 27 Aug 14 nicklas 359         frm.bloodSample.disabled = true;
2602 27 Aug 14 nicklas 360       }
2602 27 Aug 14 nicklas 361       if (consentInfo && consentInfo.consent)
2602 27 Aug 14 nicklas 362       {
2602 27 Aug 14 nicklas 363         frm.copyConsent.value = consentInfo.id;
2602 27 Aug 14 nicklas 364         var html = "From '" + Strings.encodeTags(consentInfo.name) + "' (" + consentInfo.consent;
2602 27 Aug 14 nicklas 365         if (consentInfo.consentDate) html += '; ' + consentInfo.consentDate;
2602 27 Aug 14 nicklas 366         html += ')';
2602 27 Aug 14 nicklas 367         Doc.element('copyConsent.text').innerHTML =  html;
2602 27 Aug 14 nicklas 368         Doc.show("copyConsentSection");
2602 27 Aug 14 nicklas 369       }
2602 27 Aug 14 nicklas 370     }
2602 27 Aug 14 nicklas 371     
2602 27 Aug 14 nicklas 372     if (updateMode)
2602 27 Aug 14 nicklas 373     {
2602 27 Aug 14 nicklas 374       Doc.show('goupdate');
2602 27 Aug 14 nicklas 375     }
2602 27 Aug 14 nicklas 376     else
2602 27 Aug 14 nicklas 377     {
2602 27 Aug 14 nicklas 378       Doc.show('goregister');
2602 27 Aug 14 nicklas 379     }
2602 27 Aug 14 nicklas 380     Doc.show('gocancel');
2602 27 Aug 14 nicklas 381     Wizard.setCurrentStep(3);
2602 27 Aug 14 nicklas 382     frm.samplingDate.focus();
2602 27 Aug 14 nicklas 383   }
2602 27 Aug 14 nicklas 384   
2602 27 Aug 14 nicklas 385   blood.validateStep3 = function(event)
2602 27 Aug 14 nicklas 386   {
2602 27 Aug 14 nicklas 387     if (!samplingDateIsValid || !freezerDateIsValid)
2602 27 Aug 14 nicklas 388     {
2602 27 Aug 14 nicklas 389       event.preventDefault();
2602 27 Aug 14 nicklas 390     }
2602 27 Aug 14 nicklas 391   }
2602 27 Aug 14 nicklas 392
2602 27 Aug 14 nicklas 393   blood.samplingDateTimeOnChange = function()
2602 27 Aug 14 nicklas 394   {
2602 27 Aug 14 nicklas 395     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 396     samplingDateIsValid = false;
2602 27 Aug 14 nicklas 397     Wizard.setInputStatus('samplingDate');
2602 27 Aug 14 nicklas 398     
2602 27 Aug 14 nicklas 399     var samplingDate = frm.samplingDate.value;
2602 27 Aug 14 nicklas 400     var samplingTime = frm.samplingTime.value;
2602 27 Aug 14 nicklas 401     
2602 27 Aug 14 nicklas 402     if (samplingDate != '' || samplingTime != '')
2602 27 Aug 14 nicklas 403     {
2602 27 Aug 14 nicklas 404       // Auto-fill the date if it's only given with 4(MMdd) or 6(yyMMdd) digits.
2602 27 Aug 14 nicklas 405       samplingDate = Reggie.autoFillDate(samplingDate, true);
2602 27 Aug 14 nicklas 406       frm.samplingDate.value = samplingDate;
2602 27 Aug 14 nicklas 407
2602 27 Aug 14 nicklas 408       samplingTime = Reggie.autoFillTime(samplingTime);
2602 27 Aug 14 nicklas 409       frm.samplingTime.value = samplingTime;
2602 27 Aug 14 nicklas 410       
2602 27 Aug 14 nicklas 411       if (!Dates.isDate(samplingDate, 'yyyyMMdd'))
2602 27 Aug 14 nicklas 412       {
2602 27 Aug 14 nicklas 413         Wizard.setInputStatus('samplingDate', 'invalid', 'Not a valid date');
2602 27 Aug 14 nicklas 414         return;
2602 27 Aug 14 nicklas 415       }
2602 27 Aug 14 nicklas 416       if (frm.freezerDate.value == '') frm.freezerDate.value = samplingDate;
2602 27 Aug 14 nicklas 417       
2602 27 Aug 14 nicklas 418       if (!Dates.isDate(samplingDate + ' ' + samplingTime, 'yyyyMMdd HHmm'))
2602 27 Aug 14 nicklas 419       {
2602 27 Aug 14 nicklas 420         if (samplingDate != '') 
2602 27 Aug 14 nicklas 421         {
2602 27 Aug 14 nicklas 422           Wizard.setInputStatus('samplingDate', 'invalid', 'Not a valid time');
2602 27 Aug 14 nicklas 423         }
2602 27 Aug 14 nicklas 424         return;
2602 27 Aug 14 nicklas 425       }
2602 27 Aug 14 nicklas 426       Wizard.setInputStatus('samplingDate', 'valid');
2602 27 Aug 14 nicklas 427     }
2602 27 Aug 14 nicklas 428     samplingDateIsValid = true;
2602 27 Aug 14 nicklas 429   }
2602 27 Aug 14 nicklas 430
2602 27 Aug 14 nicklas 431   blood.freezerDateTimeOnChange = function()
2602 27 Aug 14 nicklas 432   {
2602 27 Aug 14 nicklas 433     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 434     freezerDateIsValid = false;
2602 27 Aug 14 nicklas 435     Wizard.setInputStatus('freezerDate');
2602 27 Aug 14 nicklas 436     
2602 27 Aug 14 nicklas 437     var freezerDate = frm.freezerDate.value;
2602 27 Aug 14 nicklas 438     var freezerTime = frm.freezerTime.value;
2602 27 Aug 14 nicklas 439     var freezerTimestamp;
2602 27 Aug 14 nicklas 440     
2602 27 Aug 14 nicklas 441     if (freezerDate != '' || freezerTime != '')
2602 27 Aug 14 nicklas 442     {
2602 27 Aug 14 nicklas 443       // Auto-fill the date if it's only given with 4(MMdd) or 6(yyMMdd) digits.
2602 27 Aug 14 nicklas 444       freezerDate = Reggie.autoFillDate(freezerDate, true);
2602 27 Aug 14 nicklas 445       frm.freezerDate.value = freezerDate;
2602 27 Aug 14 nicklas 446
2602 27 Aug 14 nicklas 447       freezerTime = Reggie.autoFillTime(freezerTime);
2602 27 Aug 14 nicklas 448       frm.freezerTime.value = freezerTime;
2602 27 Aug 14 nicklas 449       
2602 27 Aug 14 nicklas 450       if (!Dates.isDate(freezerDate, 'yyyyMMdd'))
2602 27 Aug 14 nicklas 451       {
2602 27 Aug 14 nicklas 452         Wizard.setInputStatus('freezerDate', 'invalid', 'Not a valid date');
2602 27 Aug 14 nicklas 453         return;
2602 27 Aug 14 nicklas 454       }
2602 27 Aug 14 nicklas 455       freezerTimestamp = Dates.parseString(freezerDate + ' ' + freezerTime, 'yyyyMMdd HHmm');
2602 27 Aug 14 nicklas 456       if (freezerTimestamp == null)
2602 27 Aug 14 nicklas 457       {
2602 27 Aug 14 nicklas 458         if (freezerDate != '') 
2602 27 Aug 14 nicklas 459         {
2602 27 Aug 14 nicklas 460           Wizard.setInputStatus('freezerDate', 'invalid', 'Not a valid time');
2602 27 Aug 14 nicklas 461         }
2602 27 Aug 14 nicklas 462         return;
2602 27 Aug 14 nicklas 463       }
2602 27 Aug 14 nicklas 464       Wizard.setInputStatus('freezerDate', 'valid');
2602 27 Aug 14 nicklas 465     }
2602 27 Aug 14 nicklas 466     
2602 27 Aug 14 nicklas 467     freezerDateIsValid = true;
2602 27 Aug 14 nicklas 468
2602 27 Aug 14 nicklas 469     if (samplingDateIsValid && freezerTimestamp)
2602 27 Aug 14 nicklas 470     {
2602 27 Aug 14 nicklas 471       var samplingTimestamp = Dates.parseString(frm.samplingDate.value + ' ' + frm.samplingTime.value, 'yyyyMMdd Hmm');
2602 27 Aug 14 nicklas 472       if (samplingTimestamp && samplingTimestamp.getDate() != freezerTimestamp.getDate())
2602 27 Aug 14 nicklas 473       {
2602 27 Aug 14 nicklas 474         Wizard.setInputStatus('freezerDate', 'warning', 'Sampling and freezer dates are different');
2602 27 Aug 14 nicklas 475       }
2602 27 Aug 14 nicklas 476     }
2602 27 Aug 14 nicklas 477   }
2602 27 Aug 14 nicklas 478
2602 27 Aug 14 nicklas 479
2602 27 Aug 14 nicklas 480   blood.submit = function()
2602 27 Aug 14 nicklas 481   {
2602 27 Aug 14 nicklas 482     var frm = document.forms['reggie'];
2602 27 Aug 14 nicklas 483
2602 27 Aug 14 nicklas 484     bloodInfo.rccidNumber = frm.rccidNumber.value;
2602 27 Aug 14 nicklas 485     bloodInfo.samplingDate = Strings.trim(frm.samplingDate.value + ' ' + frm.samplingTime.value);
2602 27 Aug 14 nicklas 486     bloodInfo.freezerDate = Strings.trim(frm.freezerDate.value + ' ' + frm.freezerTime.value);
2602 27 Aug 14 nicklas 487     bloodInfo.serum = "Yes";
2602 27 Aug 14 nicklas 488     bloodInfo.bloodSample = frm.bloodSample.value;
2602 27 Aug 14 nicklas 489     bloodInfo.otherPathNote = frm.otherPathNote.value;
2602 27 Aug 14 nicklas 490     if (frm.copyConsent.checked && frm.copyConsent.value)
2602 27 Aug 14 nicklas 491     {
2602 27 Aug 14 nicklas 492       bloodInfo.copyConsent = parseInt(frm.copyConsent.value, 10);
2602 27 Aug 14 nicklas 493     }
2602 27 Aug 14 nicklas 494
2602 27 Aug 14 nicklas 495     var updateMode = bloodInfo.id;
2602 27 Aug 14 nicklas 496     var submitInfo = {};
2602 27 Aug 14 nicklas 497     submitInfo.patientInfo = patientInfo;
2602 27 Aug 14 nicklas 498     submitInfo.bloodInfo = bloodInfo;
2602 27 Aug 14 nicklas 499
2602 27 Aug 14 nicklas 500     var url = '../BloodFollowUpRegistration.servlet?ID='+App.getSessionId();
2602 27 Aug 14 nicklas 501     url += '&cmd=' + (updateMode ? 'UpdateBlood' : 'CreateBlood');
2602 27 Aug 14 nicklas 502
2602 27 Aug 14 nicklas 503     Wizard.showLoadingAnimation('Registering blood information...');
2602 27 Aug 14 nicklas 504     Wizard.asyncJsonRequest(url, blood.submissionResults, 'POST', JSON.stringify(submitInfo));
2602 27 Aug 14 nicklas 505   }
2602 27 Aug 14 nicklas 506   
2602 27 Aug 14 nicklas 507   blood.submissionResults = function(response)
2602 27 Aug 14 nicklas 508   {
2602 27 Aug 14 nicklas 509     Wizard.showFinalMessage(response.messages);
2602 27 Aug 14 nicklas 510     Doc.show('gorestart');
2602 27 Aug 14 nicklas 511   }
2602 27 Aug 14 nicklas 512   
2602 27 Aug 14 nicklas 513   return blood;
2602 27 Aug 14 nicklas 514 }();
2602 27 Aug 14 nicklas 515
2602 27 Aug 14 nicklas 516 Doc.onLoad(Blood.initPage);
2602 27 Aug 14 nicklas 517