extensions/net.sf.basedb.meludi/trunk/resources/personal/consentform.js

Code
Comments
Other
Rev Date Author Line
4785 27 Apr 18 olle 1 var Consent = function()
4785 27 Apr 18 olle 2 {
4785 27 Apr 18 olle 3   var consent = {};
4785 27 Apr 18 olle 4   var consentToId = { "Yes": "consent.yes", "No" : "consent.no", "Not asked": "consent.notAsked" };
4785 27 Apr 18 olle 5   var patientInfo;
4785 27 Apr 18 olle 6   var debug = 0;
4785 27 Apr 18 olle 7   
4785 27 Apr 18 olle 8   var sampleItemPrefix = '';
4785 27 Apr 18 olle 9   var sampleItemNumDigits = 5;
4785 27 Apr 18 olle 10
4785 27 Apr 18 olle 11   consent.initPage = function()
4785 27 Apr 18 olle 12   {
4785 27 Apr 18 olle 13     
4785 27 Apr 18 olle 14     // Step 1
4785 27 Apr 18 olle 15     Events.addEventHandler('step-1', 'wizard-validate', consent.validateStep1);
4785 27 Apr 18 olle 16     Events.addEventHandler('caseName', 'keypress', Wizard.goNextOnTabOrEnter);
4785 27 Apr 18 olle 17     
4785 27 Apr 18 olle 18     // Step 2
4785 27 Apr 18 olle 19     Events.addEventHandler('step-2', 'wizard-initialize', consent.initializeStep2);
4785 27 Apr 18 olle 20     Events.addEventHandler('step-2', 'wizard-validate', consent.validateStep2);
4785 27 Apr 18 olle 21     Events.addEventHandler('consentDate', 'blur', Wizard.validateDate);
4785 27 Apr 18 olle 22     
4785 27 Apr 18 olle 23     Events.addEventHandler('consent.yes', 'change', consent.consentOnChange);
4785 27 Apr 18 olle 24     Events.addEventHandler('consent.no', 'change', consent.consentOnChange);
4785 27 Apr 18 olle 25     Events.addEventHandler('consent.notAsked', 'change', consent.consentOnChange);
4785 27 Apr 18 olle 26     Events.addEventHandler('otherReasonIfNotAsked', 'focus', consent.onOtherReasonFocus);
4785 27 Apr 18 olle 27     
4785 27 Apr 18 olle 28     // Navigation
4785 27 Apr 18 olle 29     Buttons.addClickHandler('gocancel', Wizard.cancelWizard);
4785 27 Apr 18 olle 30     Buttons.addClickHandler('gorestart', Wizard.restartWizard);
4785 27 Apr 18 olle 31     Buttons.addClickHandler('gonext', Wizard.goNextOnClick);
4785 27 Apr 18 olle 32     Buttons.addClickHandler('goregister', Wizard.goRegister);
4785 27 Apr 18 olle 33     
4785 27 Apr 18 olle 34     // Final registration
4785 27 Apr 18 olle 35     Events.addEventHandler('wizard', 'wizard-submit', consent.submit);
4785 27 Apr 18 olle 36     
4785 27 Apr 18 olle 37     // Load permissions
4785 27 Apr 18 olle 38     consent.initPermissions();
4785 27 Apr 18 olle 39     // Load configuration
4785 27 Apr 18 olle 40     consent.loadConfiguration();
4785 27 Apr 18 olle 41
4785 27 Apr 18 olle 42     //Doc.show('step-1');
4785 27 Apr 18 olle 43     //Doc.show('gonext');
4785 27 Apr 18 olle 44   }
4785 27 Apr 18 olle 45   
4785 27 Apr 18 olle 46   consent.initPermissions = function()
4785 27 Apr 18 olle 47   {
4785 27 Apr 18 olle 48     // Get permission information
4785 27 Apr 18 olle 49     var url = '../Install.servlet?ID='+App.getSessionId();
4785 27 Apr 18 olle 50     url += '&cmd=GetPermissions';
4785 27 Apr 18 olle 51     var request = Ajax.getXmlHttpRequest();
4785 27 Apr 18 olle 52     request.open("GET", url, true);
4785 27 Apr 18 olle 53     Ajax.setReadyStateHandler(request, consent.onPermissionsLoaded, consent.onPermissionsLoaded);
4785 27 Apr 18 olle 54     request.send(null);
4785 27 Apr 18 olle 55   }
4785 27 Apr 18 olle 56   
4785 27 Apr 18 olle 57   // Callback when permission information is ready
4785 27 Apr 18 olle 58   consent.onPermissionsLoaded = function(request)
4785 27 Apr 18 olle 59   {
4785 27 Apr 18 olle 60     if (debug) App.debug(Strings.encodeTags(request.responseText));
4785 27 Apr 18 olle 61     var response;
4785 27 Apr 18 olle 62     var error = false;
4785 27 Apr 18 olle 63     try
4785 27 Apr 18 olle 64     {
4785 27 Apr 18 olle 65       response = JSON.parse(request.responseText);
4785 27 Apr 18 olle 66       if (response.status != 'ok')
4785 27 Apr 18 olle 67       {
4785 27 Apr 18 olle 68         error = response.message || response.stacktrace || 'Unexpected error';
4785 27 Apr 18 olle 69       }
4785 27 Apr 18 olle 70     }
4785 27 Apr 18 olle 71     catch (ex)
4785 27 Apr 18 olle 72     {
4785 27 Apr 18 olle 73       error = ex;
4785 27 Apr 18 olle 74     }
4785 27 Apr 18 olle 75     
4785 27 Apr 18 olle 76     if (error)
4785 27 Apr 18 olle 77     {
4785 27 Apr 18 olle 78       alert(error);
4785 27 Apr 18 olle 79       return;
4785 27 Apr 18 olle 80     }
4785 27 Apr 18 olle 81     
4785 27 Apr 18 olle 82     myPermissions = response.permissions;
4785 27 Apr 18 olle 83     //var isAdmin = myPermissions['Administrator'] == 1;
4785 27 Apr 18 olle 84     //var noProjectIsActive = !App.getActiveProjectId();
4785 27 Apr 18 olle 85   }
4785 27 Apr 18 olle 86
4785 27 Apr 18 olle 87   consent.loadConfiguration = function()
4785 27 Apr 18 olle 88   {
4785 27 Apr 18 olle 89     var url = '../Session.servlet?ID='+App.getSessionId();
4785 27 Apr 18 olle 90     url += '&cmd=GetConfiguration'
4785 27 Apr 18 olle 91     var request = Ajax.getXmlHttpRequest();
4785 27 Apr 18 olle 92     request.open("GET", url, true);
4785 27 Apr 18 olle 93     Ajax.setReadyStateHandler(request, consent.onConfiguration, consent.onConfiguration);
4785 27 Apr 18 olle 94     request.send(null);
4785 27 Apr 18 olle 95   }
4785 27 Apr 18 olle 96   
4785 27 Apr 18 olle 97   consent.onConfiguration = function(request)
4785 27 Apr 18 olle 98   {
4785 27 Apr 18 olle 99     var frm = document.forms['meludi'];  
4785 27 Apr 18 olle 100
4785 27 Apr 18 olle 101     if (debug)
4785 27 Apr 18 olle 102     {
4785 27 Apr 18 olle 103       App.debug(Strings.encodeTags(request.responseText));
4785 27 Apr 18 olle 104     }
4785 27 Apr 18 olle 105     
4785 27 Apr 18 olle 106     var response;
4785 27 Apr 18 olle 107     var error = false;
4785 27 Apr 18 olle 108     try
4785 27 Apr 18 olle 109     {
4785 27 Apr 18 olle 110       response = JSON.parse(request.responseText);
4785 27 Apr 18 olle 111       if (response.status != 'ok')
4785 27 Apr 18 olle 112       {
4785 27 Apr 18 olle 113         error = response.message || response.stacktrace || 'Unexpected error';
4785 27 Apr 18 olle 114       }
4785 27 Apr 18 olle 115     }
4785 27 Apr 18 olle 116     catch (ex)
4785 27 Apr 18 olle 117     {
4785 27 Apr 18 olle 118       error = ex;
4785 27 Apr 18 olle 119     }
4785 27 Apr 18 olle 120     if (error) App.debug(error);
4785 27 Apr 18 olle 121
4785 27 Apr 18 olle 122     // Get configuration result    
4785 27 Apr 18 olle 123     var conf = response.configuration;
4785 27 Apr 18 olle 124     // Check for uses site prefix flag
4785 27 Apr 18 olle 125     usesSitePrefix = conf.usesSitePrefix;
4785 27 Apr 18 olle 126 /*
4785 27 Apr 18 olle 127     // Check for project focus default
4785 27 Apr 18 olle 128     var projectFocusDefault = conf.projectFocusDefault;
4785 27 Apr 18 olle 129     if (projectFocusDefault != null)
4785 27 Apr 18 olle 130     {
4785 27 Apr 18 olle 131       frm.projectFocus.value = projectFocusDefault;
4785 27 Apr 18 olle 132       consent.projectFocusOnChange();
4785 27 Apr 18 olle 133     }
4785 27 Apr 18 olle 134     // Check for specimen type default
4785 27 Apr 18 olle 135     var specimenTypeDefault = conf.specimenTypeDefault;
4785 27 Apr 18 olle 136     if (specimenTypeDefault != null)
4785 27 Apr 18 olle 137     {
4785 27 Apr 18 olle 138       frm.specimenType.value = specimenTypeDefault;
4785 27 Apr 18 olle 139     }
4785 27 Apr 18 olle 140     // Check for specimen input type default
4785 27 Apr 18 olle 141     var specimenInputTypeDefault = conf.specimenInputTypeDefault;
4785 27 Apr 18 olle 142     if (specimenInputTypeDefault != null)
4785 27 Apr 18 olle 143     {
4785 27 Apr 18 olle 144       frm.specimenInputType.value = specimenInputTypeDefault;
4785 27 Apr 18 olle 145     }
4785 27 Apr 18 olle 146     // Check for extracts from first specimen only default
4785 27 Apr 18 olle 147     var extractsFromFirstSpecimenOnlyDefault = conf.extractsFromFirstSpecimenOnlyDefault;
4785 27 Apr 18 olle 148     if (extractsFromFirstSpecimenOnlyDefault != null)
4785 27 Apr 18 olle 149     {
4785 27 Apr 18 olle 150       frm.extractsFromFirstSpecimenOnlyCB.checked = extractsFromFirstSpecimenOnlyDefault;
4785 27 Apr 18 olle 151     }
4785 27 Apr 18 olle 152 */
4785 27 Apr 18 olle 153
4785 27 Apr 18 olle 154     // Continue with initializing info for case
4785 27 Apr 18 olle 155     var url = '../LabelGeneration.servlet?ID='+App.getSessionId();
4785 27 Apr 18 olle 156     url += '&cmd=CountCases';
4785 27 Apr 18 olle 157     Wizard.showLoadingAnimation('Loading cases...');
4785 27 Apr 18 olle 158     Wizard.asyncJsonRequest(url, consent.caseInfoLoadedStep1);
4785 27 Apr 18 olle 159   }
4785 27 Apr 18 olle 160
4785 27 Apr 18 olle 161   consent.caseInfoLoadedStep1 = function(response)
4785 27 Apr 18 olle 162   {
4785 27 Apr 18 olle 163     var frm = document.forms['meludi'];  
4785 27 Apr 18 olle 164
4785 27 Apr 18 olle 165     // Disable PAD/CL input field if not Administrator or PatientCurator
4785 27 Apr 18 olle 166     var isAdmin = myPermissions['Administrator'] == 1;
4785 27 Apr 18 olle 167     var isPatCur = myPermissions['PatientCurator'] == 1;
4785 27 Apr 18 olle 168     if (!isAdmin && !isPatCur)
4785 27 Apr 18 olle 169     {
4785 27 Apr 18 olle 170       frm.pad.disabled = true;
4785 27 Apr 18 olle 171     }
4785 27 Apr 18 olle 172
4785 27 Apr 18 olle 173     sampleItemPrefix = response.sampleItemPrefix;
4785 27 Apr 18 olle 174     sampleItemNumDigits = response.sampleItemNumDigits;
4785 27 Apr 18 olle 175     var nofCases = response.count;
4785 27 Apr 18 olle 176     if (nofCases == null)
4785 27 Apr 18 olle 177     {
4785 27 Apr 18 olle 178       nofCases = 0;
4785 27 Apr 18 olle 179     }
4785 27 Apr 18 olle 180     var startNum = nofCases + 1;
4785 27 Apr 18 olle 181     // Pad number with leading zeros to get right number of digits
4785 27 Apr 18 olle 182     startNum = String('0000000000' + startNum).slice(-sampleItemNumDigits);
4785 27 Apr 18 olle 183     var startCase = sampleItemPrefix + startNum;
4785 27 Apr 18 olle 184     if (usesSitePrefix != null && usesSitePrefix)
4785 27 Apr 18 olle 185     {
4785 27 Apr 18 olle 186       startCase = '';
4785 27 Apr 18 olle 187     }
4785 27 Apr 18 olle 188     frm.caseName.value = startCase;
4785 27 Apr 18 olle 189     Doc.element('caseNameText').innerHTML = 'The case name (barcode) associated with this specimen tube ("' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits).';
4785 27 Apr 18 olle 190     
4785 27 Apr 18 olle 191     Doc.show('step-1');
4785 27 Apr 18 olle 192     Doc.show('gonext');
4785 27 Apr 18 olle 193   }
4785 27 Apr 18 olle 194
4785 27 Apr 18 olle 195   /**
4785 27 Apr 18 olle 196     Check that the case number is valid.
4785 27 Apr 18 olle 197   */
4785 27 Apr 18 olle 198   consent.validateStep1 = function(event)
4785 27 Apr 18 olle 199   {
4785 27 Apr 18 olle 200     var frm = document.forms['meludi'];
4785 27 Apr 18 olle 201     
4785 27 Apr 18 olle 202     var caseName = frm.caseName.value;
4785 27 Apr 18 olle 203     var caseIsValid = false;
4785 27 Apr 18 olle 204     Wizard.setInputStatus('caseName');
4785 27 Apr 18 olle 205     if (caseName == '')
4785 27 Apr 18 olle 206     {
4785 27 Apr 18 olle 207       Wizard.setInputStatus('caseName', 'invalid', 'Missing');
4785 27 Apr 18 olle 208       frm.caseName.focus();
4785 27 Apr 18 olle 209     }
4785 27 Apr 18 olle 210     else if (!Meludi.isValidCaseName2(caseName, sampleItemPrefix, sampleItemNumDigits))
4785 27 Apr 18 olle 211     {
4785 27 Apr 18 olle 212       Wizard.setInputStatus('caseName', 'invalid', 'Only name = "' + sampleItemPrefix + '" + ' + sampleItemNumDigits + ' digits is allowed.');
4785 27 Apr 18 olle 213       frm.caseName.focus();
4785 27 Apr 18 olle 214     }
4785 27 Apr 18 olle 215     else
4785 27 Apr 18 olle 216     {
4785 27 Apr 18 olle 217       Wizard.setInputStatus('caseName', 'valid');
4785 27 Apr 18 olle 218       caseIsValid = true;
4785 27 Apr 18 olle 219     }
4785 27 Apr 18 olle 220     
4785 27 Apr 18 olle 221     // If not valid, we prevent the wizard from moving to the next step
4785 27 Apr 18 olle 222     if (!caseIsValid) event.preventDefault();
4785 27 Apr 18 olle 223   }
4785 27 Apr 18 olle 224   
4785 27 Apr 18 olle 225   
4785 27 Apr 18 olle 226   // Check that the date is valid
4785 27 Apr 18 olle 227   consent.validateStep2 = function(event)
4785 27 Apr 18 olle 228   {
4785 27 Apr 18 olle 229     var consentDateIsValid = Wizard.isValid('consentDate');
4785 27 Apr 18 olle 230     if (!consentDateIsValid) event.preventDefault();
4785 27 Apr 18 olle 231   }
4785 27 Apr 18 olle 232   
4785 27 Apr 18 olle 233   /**
4785 27 Apr 18 olle 234     Load information about the given case.
4785 27 Apr 18 olle 235   */
4785 27 Apr 18 olle 236   consent.initializeStep2 = function(event)
4785 27 Apr 18 olle 237   {
4785 27 Apr 18 olle 238     var frm = document.forms['meludi'];
4785 27 Apr 18 olle 239     var caseName = frm.caseName.value;
4785 27 Apr 18 olle 240
4785 27 Apr 18 olle 241     var url = '../ConsentForm.servlet?ID='+App.getSessionId();
4785 27 Apr 18 olle 242     url += '&cmd=GetCaseInfo';
4785 27 Apr 18 olle 243     url += '&caseName=' + encodeURIComponent(caseName);
4785 27 Apr 18 olle 244 alert("consentform.js::initializeStep2(): url = " + url);
4785 27 Apr 18 olle 245     
4785 27 Apr 18 olle 246     Wizard.showLoadingAnimation('Loading case information...');
4785 27 Apr 18 olle 247     Wizard.asyncJsonRequest(url, consent.caseInfoLoaded);
4785 27 Apr 18 olle 248   }
4785 27 Apr 18 olle 249   
4785 27 Apr 18 olle 250   /**
4785 27 Apr 18 olle 251     Initalize the second step based on the information we have about the case.
4785 27 Apr 18 olle 252   */
4785 27 Apr 18 olle 253   consent.caseInfoLoaded = function(response)
4785 27 Apr 18 olle 254   {
4785 27 Apr 18 olle 255     var frm = document.forms['meludi'];
4785 27 Apr 18 olle 256     var caseName = frm.caseName.value;
4785 27 Apr 18 olle 257     patientInfo = response.patientInfo;
4785 27 Apr 18 olle 258     var caseInfo = response.caseInfo;
4785 27 Apr 18 olle 259     var specimenInfo = response.specimenInfo;
4785 27 Apr 18 olle 260 alert("consentform.js::caseInfoLoaded(): patientInfo = " + JSON.stringify(patientInfo));
4785 27 Apr 18 olle 261 alert("consentform.js::caseInfoLoaded(): caseInfo = " + JSON.stringify(caseInfo));
4785 27 Apr 18 olle 262 alert("consentform.js::caseInfoLoaded(): specimenInfo = " + JSON.stringify(specimenInfo));
4785 27 Apr 18 olle 263
4785 27 Apr 18 olle 264     sampleItemPrefix = response.sampleItemPrefix;
4785 27 Apr 18 olle 265     sampleItemNumDigits = response.sampleItemNumDigits;
4785 27 Apr 18 olle 266
4785 27 Apr 18 olle 267     if (patientInfo)
4785 27 Apr 18 olle 268     {
4785 27 Apr 18 olle 269       var moreCasesHtml = '';
4785 27 Apr 18 olle 270       var numMissing = 0;
4785 27 Apr 18 olle 271
4785 27 Apr 18 olle 272       if (patientInfo.allCases)
4785 27 Apr 18 olle 273       {
4785 27 Apr 18 olle 274         for (var i = 0; i < patientInfo.allCases.length; i++)
4785 27 Apr 18 olle 275         {
4785 27 Apr 18 olle 276           var c = patientInfo.allCases[i];
4785 27 Apr 18 olle 277           //var laterality = c.laterality ? ' ('+c.laterality+')' : '';
4785 27 Apr 18 olle 278           var checked = '';
4785 27 Apr 18 olle 279           if (!c.consent)
4785 27 Apr 18 olle 280           {
4785 27 Apr 18 olle 281             checked = 'checked';
4785 27 Apr 18 olle 282             numMissing++;
4785 27 Apr 18 olle 283           }
4785 27 Apr 18 olle 284           
4785 27 Apr 18 olle 285           if (c.name == caseName && c.consentDate)
4785 27 Apr 18 olle 286           {
4785 27 Apr 18 olle 287             frm.consentDate.value = c.consentDate;
4785 27 Apr 18 olle 288           }
4785 27 Apr 18 olle 289           moreCasesHtml += '<input type="checkbox" name="case.'+c.id+'" id="case.'+c.id+'" ' + checked +'>';
4785 27 Apr 18 olle 290           //moreCasesHtml += '<label for="case.'+c.id+'">Case: ' + Strings.encodeTags(c.name + laterality) + '</label><br>';
4785 27 Apr 18 olle 291         }
4785 27 Apr 18 olle 292       }
4785 27 Apr 18 olle 293
4785 27 Apr 18 olle 294
4785 27 Apr 18 olle 295 /*      
4785 27 Apr 18 olle 296       if (patientInfo.allBlood)
4785 27 Apr 18 olle 297       {
4785 27 Apr 18 olle 298         for (var i = 0; i < patientInfo.allBlood.length; i++)
4785 27 Apr 18 olle 299         {
4785 27 Apr 18 olle 300           var c = patientInfo.allBlood[i];
4785 27 Apr 18 olle 301           var checked = '';
4785 27 Apr 18 olle 302           if (!c.consent)
4785 27 Apr 18 olle 303           {
4785 27 Apr 18 olle 304             checked = 'checked';
4785 27 Apr 18 olle 305             numMissing++;
4785 27 Apr 18 olle 306           }
4785 27 Apr 18 olle 307           if (c.name.indexOf(caseName) == 0 && c.consentDate)
4785 27 Apr 18 olle 308           {
4785 27 Apr 18 olle 309             frm.consentDate.value = c.consentDate;
4785 27 Apr 18 olle 310           }
4785 27 Apr 18 olle 311           moreCasesHtml += '<input type="checkbox" name="blood.'+ c.id + '" id="blood.'+c.id+'" ' + checked +'>';
4785 27 Apr 18 olle 312           moreCasesHtml += '<label for="blood.'+c.id+'">Blood: ' + Strings.encodeTags(c.name) + '</label><br>';
4785 27 Apr 18 olle 313         }
4785 27 Apr 18 olle 314       }
4785 27 Apr 18 olle 315 */
4785 27 Apr 18 olle 316
4785 27 Apr 18 olle 317       consent.enableConsentOption('consent.yes', true);
4785 27 Apr 18 olle 318       Doc.element('moreCases').innerHTML = moreCasesHtml;
4785 27 Apr 18 olle 319       Doc.show('moreCasesSection');
4785 27 Apr 18 olle 320
4785 27 Apr 18 olle 321       if (numMissing > 0)
4785 27 Apr 18 olle 322       {
4785 27 Apr 18 olle 323         Wizard.setInputStatus('consent', 'valid', 'This patient already exists and has at least one case or blood sample with missing consent.');
4785 27 Apr 18 olle 324       }
4785 27 Apr 18 olle 325       else
4785 27 Apr 18 olle 326       {
4785 27 Apr 18 olle 327         Wizard.setInputStatus('consent', 'valid', '"Yes" has already been registered for all case and blood samples for this patient.');
4785 27 Apr 18 olle 328       }
4785 27 Apr 18 olle 329       Doc.show('morehelp.multiple', 'inline');
4785 27 Apr 18 olle 330       Doc.show('morehelp.yesonly', 'inline');
4785 27 Apr 18 olle 331       Doc.show('gocancel');
4785 27 Apr 18 olle 332       Doc.show('goregister');
4785 27 Apr 18 olle 333
4785 27 Apr 18 olle 334     }
4785 27 Apr 18 olle 335     else if (caseInfo)
4785 27 Apr 18 olle 336     {
4785 27 Apr 18 olle 337       if (caseInfo.consent)
4785 27 Apr 18 olle 338       {
4785 27 Apr 18 olle 339         // A consent has already been registered for this case
4785 27 Apr 18 olle 340         // We do not support updating this
4785 27 Apr 18 olle 341         consent.enableConsentOption(consentToId[caseInfo.consent], true);
4785 27 Apr 18 olle 342         Wizard.setInputStatus('consent', '', '"' + caseInfo.consent + '" has already been registered for this case. It is not possible to change with this wizard.');
4785 27 Apr 18 olle 343         if (caseInfo.consentDate)
4785 27 Apr 18 olle 344         {
4785 27 Apr 18 olle 345           frm.consentDate.value = caseInfo.consentDate;
4785 27 Apr 18 olle 346           frm.consentDate.disabled = true;
4785 27 Apr 18 olle 347         }
4785 27 Apr 18 olle 348         Doc.show('gorestart');
4785 27 Apr 18 olle 349       }
4785 27 Apr 18 olle 350       else
4785 27 Apr 18 olle 351       {
4785 27 Apr 18 olle 352         consent.enableConsentOption('consent.no', true);
4785 27 Apr 18 olle 353         consent.enableConsentOption('consent.notAsked');
4785 27 Apr 18 olle 354         consent.enableConsentOption('consent.yes');
4785 27 Apr 18 olle 355         if (caseInfo.consentDate)
4785 27 Apr 18 olle 356         {
4785 27 Apr 18 olle 357           frm.consentDate.value = caseInfo.consentDate;
4785 27 Apr 18 olle 358           frm.consentDate.disabled = true;
4785 27 Apr 18 olle 359         }
4785 27 Apr 18 olle 360         Doc.show('morehelp.any', 'inline');
4785 27 Apr 18 olle 361         Doc.show('gocancel');
4785 27 Apr 18 olle 362         Doc.show('goregister');
4785 27 Apr 18 olle 363       }
4785 27 Apr 18 olle 364     }
4785 27 Apr 18 olle 365     else if (specimenInfo)
4785 27 Apr 18 olle 366     {
4785 27 Apr 18 olle 367       // There is no existing case but there are specimen related to it
4785 27 Apr 18 olle 368       // This wizard will only allow 'Yes' option on the consent form
4785 27 Apr 18 olle 369       consent.enableConsentOption('consent.yes', true);
4785 27 Apr 18 olle 370       Wizard.setInputStatus('consent', 'valid', 'Specimen tubes for this case already exists.');
4785 27 Apr 18 olle 371       Doc.show('morehelp.yesonly', 'inline');
4785 27 Apr 18 olle 372       Doc.show('gocancel');
4785 27 Apr 18 olle 373       Doc.show('goregister');
4785 27 Apr 18 olle 374     }
4785 27 Apr 18 olle 375     else
4785 27 Apr 18 olle 376     {
4785 27 Apr 18 olle 377       // We have no information about this case -- but allow a consent to be registered in any case
4785 27 Apr 18 olle 378       consent.enableConsentOption('consent.no', true);
4785 27 Apr 18 olle 379       consent.enableConsentOption('consent.notAsked');
4785 27 Apr 18 olle 380       consent.enableConsentOption('consent.yes');
4785 27 Apr 18 olle 381       Doc.show('morehelp.any', 'inline');
4785 27 Apr 18 olle 382       Doc.show('gocancel');
4785 27 Apr 18 olle 383       Doc.show('goregister');
4785 27 Apr 18 olle 384     }
4785 27 Apr 18 olle 385
4785 27 Apr 18 olle 386     Wizard.setCurrentStep(2);
4785 27 Apr 18 olle 387     if (!frm.consentDate.disabled) frm.consentDate.focus();
4785 27 Apr 18 olle 388     
4785 27 Apr 18 olle 389   }
4785 27 Apr 18 olle 390   
4785 27 Apr 18 olle 391   
4785 27 Apr 18 olle 392   consent.submit = function()
4785 27 Apr 18 olle 393   {
4785 27 Apr 18 olle 394     
4785 27 Apr 18 olle 395     var frm = document.forms['meludi'];
4785 27 Apr 18 olle 396
4785 27 Apr 18 olle 397     var consentInfo = {};
4785 27 Apr 18 olle 398     consentInfo.caseName = frm.caseName.value;
4785 27 Apr 18 olle 399     consentInfo.consentDate = frm.consentDate.value;
4785 27 Apr 18 olle 400     consentInfo.consent = Forms.getCheckedRadio(frm.consent).value;
4785 27 Apr 18 olle 401     if (consentInfo.consent == 'Not asked')
4785 27 Apr 18 olle 402     {
4785 27 Apr 18 olle 403       var reasonIfNotAsked = '';
4785 27 Apr 18 olle 404       for (var i = 0; i < frm.reasonIfNotAsked.length; i++)
4785 27 Apr 18 olle 405       {
4785 27 Apr 18 olle 406         var option = frm.reasonIfNotAsked[i];
4785 27 Apr 18 olle 407         if (option.checked)
4785 27 Apr 18 olle 408         {
4785 27 Apr 18 olle 409           if (option.id == 'notAsked.other')
4785 27 Apr 18 olle 410           {
4785 27 Apr 18 olle 411             reasonIfNotAsked += frm.otherReasonIfNotAsked.value;
4785 27 Apr 18 olle 412           }
4785 27 Apr 18 olle 413           else
4785 27 Apr 18 olle 414           {
4785 27 Apr 18 olle 415             var label = Doc.element(option.id + '.label');
4785 27 Apr 18 olle 416             reasonIfNotAsked += label.innerHTML + '\n';
4785 27 Apr 18 olle 417           }
4785 27 Apr 18 olle 418         }
4785 27 Apr 18 olle 419       }
4785 27 Apr 18 olle 420       consentInfo.reasonIfNotAsked = reasonIfNotAsked;
4785 27 Apr 18 olle 421     }
4785 27 Apr 18 olle 422     
4785 27 Apr 18 olle 423     if (patientInfo)
4785 27 Apr 18 olle 424     {
4785 27 Apr 18 olle 425       var selectedSamples = [];
4785 27 Apr 18 olle 426       if (patientInfo.allCases)
4785 27 Apr 18 olle 427       {
4785 27 Apr 18 olle 428         for (var i = 0; i < patientInfo.allCases.length; i++)
4785 27 Apr 18 olle 429         {
4785 27 Apr 18 olle 430           var c = patientInfo.allCases[i];
4785 27 Apr 18 olle 431           var chk = frm['case.'+c.id];
4785 27 Apr 18 olle 432           if (chk.checked) selectedSamples.push(c.id);
4785 27 Apr 18 olle 433         }
4785 27 Apr 18 olle 434       }
4785 27 Apr 18 olle 435       
4785 27 Apr 18 olle 436       if (patientInfo.allBlood)
4785 27 Apr 18 olle 437       {
4785 27 Apr 18 olle 438         for (var i = 0; i < patientInfo.allBlood.length; i++)
4785 27 Apr 18 olle 439         {
4785 27 Apr 18 olle 440           var c = patientInfo.allBlood[i];
4785 27 Apr 18 olle 441           var chk = frm['blood.'+c.id];
4785 27 Apr 18 olle 442           if (chk.checked) selectedSamples.push(c.id);
4785 27 Apr 18 olle 443         }
4785 27 Apr 18 olle 444       }
4785 27 Apr 18 olle 445       consentInfo.selectedSamples = selectedSamples;
4785 27 Apr 18 olle 446     }
4785 27 Apr 18 olle 447
4785 27 Apr 18 olle 448     var submitInfo = {};
4785 27 Apr 18 olle 449     submitInfo.consentInfo = consentInfo;
4785 27 Apr 18 olle 450     
4785 27 Apr 18 olle 451     var url = '../ConsentForm.servlet?ID=' + App.getSessionId();
4785 27 Apr 18 olle 452     url += '&cmd=RegisterConsent';
4785 27 Apr 18 olle 453     
4785 27 Apr 18 olle 454     Wizard.showLoadingAnimation('Registering consent information...');
4785 27 Apr 18 olle 455     Wizard.asyncJsonRequest(url, consent.submissionResults, 'POST', JSON.stringify(submitInfo));
4785 27 Apr 18 olle 456   }
4785 27 Apr 18 olle 457
4785 27 Apr 18 olle 458   
4785 27 Apr 18 olle 459   consent.submissionResults = function(response)
4785 27 Apr 18 olle 460   {
4785 27 Apr 18 olle 461     Wizard.showFinalMessage(response.messages);
4785 27 Apr 18 olle 462     Doc.show('gorestart');
4785 27 Apr 18 olle 463   }
4785 27 Apr 18 olle 464
4785 27 Apr 18 olle 465   consent.enableConsentOption = function(option, checkIt)
4785 27 Apr 18 olle 466   {
4785 27 Apr 18 olle 467     option = Doc.element(option); // The radio button
4785 27 Apr 18 olle 468     option.disabled = false;
4785 27 Apr 18 olle 469     if (checkIt) option.checked = true;
4785 27 Apr 18 olle 470     
4785 27 Apr 18 olle 471     var label = Doc.element(option.id + '.label'); // The label
4785 27 Apr 18 olle 472     Doc.removeClass(label, 'disabled');
4785 27 Apr 18 olle 473   }
4785 27 Apr 18 olle 474
4785 27 Apr 18 olle 475
4785 27 Apr 18 olle 476
4785 27 Apr 18 olle 477   consent.consentOnChange = function()
4785 27 Apr 18 olle 478   {
4785 27 Apr 18 olle 479     // If "Not asked" is selected we must enable the second question
4785 27 Apr 18 olle 480     var isAsked = !Doc.element('consent.notAsked').checked;
4785 27 Apr 18 olle 481     
4785 27 Apr 18 olle 482     var frm = document.forms['meludi'];
4785 27 Apr 18 olle 483     var reasonIfNotAsked = frm.reasonIfNotAsked;
4785 27 Apr 18 olle 484     for (var i = 0; i < reasonIfNotAsked.length; i++)
4785 27 Apr 18 olle 485     {
4785 27 Apr 18 olle 486       reasonIfNotAsked[i].disabled = isAsked;
4785 27 Apr 18 olle 487       Doc.addOrRemoveClass(reasonIfNotAsked[i].id + '.label', 'disabled', isAsked);
4785 27 Apr 18 olle 488     }
4785 27 Apr 18 olle 489     frm.otherReasonIfNotAsked.disabled = isAsked;    
4785 27 Apr 18 olle 490   }
4785 27 Apr 18 olle 491   
4785 27 Apr 18 olle 492   consent.onOtherReasonFocus = function()
4785 27 Apr 18 olle 493   {
4785 27 Apr 18 olle 494     Doc.element('notAsked.other').checked = true;
4785 27 Apr 18 olle 495   }
4785 27 Apr 18 olle 496
4785 27 Apr 18 olle 497   return consent;
4785 27 Apr 18 olle 498 }();
4785 27 Apr 18 olle 499
4785 27 Apr 18 olle 500 Doc.onLoad(Consent.initPage);
4785 27 Apr 18 olle 501