| 
					
				 | 
			
			
				@@ -1,831 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function myprint(config, msg){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.document.getElementById(config.debugId).value+="\n"+msg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function print(config,msg){myprint(config,msg);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function getCRFref(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//'crfRefId' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return config.document.getElementById(config.crfRefId).innerHTML; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function populateBasicData(config,data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"crfRef matched entries: "+data.rows.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (data.rows.length!=1) { return;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.document.getElementById('eudraCTNumber').innerHTML=data.rows[0].EudraCTNumber; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.document.getElementById('studyCoordinator').innerHTML=data.rows[0].StudyCoordinator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.document.getElementById('studySponsor').innerHTML=data.rows[0].StudySponsor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.Query.selectRows({schemaName: 'lists',queryName: 'site',  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		filterArray: [LABKEY.Filter.create('siteNumber', data.rows[0].Site)], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		success: function(data){setHTML(config,data,'siteName','siteName')}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	});	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.Query.selectRows({schemaName: 'core',queryName: 'Users', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		filterArray: [LABKEY.Filter.create('UserId',data.rows[0].UserId)], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		success: function(data){setHTML(config,data,'investigatorName','DisplayName')} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function setHTML(config,data,elementId,varName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	print(config,"\nsetHTML "+data.rows.length+" elementId: "+elementId+" varName:"+varName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (data.rows.length>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let entry=data.rows[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let el=config.document.getElementById(elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"\nsetHTML: Entry[" + varName + "]: " + entry[varName]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"\nsetHTML: Element[" + elementId + "]: " + el; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		el.innerHTML=entry[varName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function setAdditionalData(config,additionalData,entry){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"setAdditionalData"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (entry["showFlag"]==="NONE") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"Returning empty additionalData"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return additionalData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	additionalData.showFlag=entry["showFlag"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	additionalData.showFlagValue=entry["showFlagValue"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	additionalData.queryName=entry["showQuery"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	additionalData.filters=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	additionalData.filters['crfRef']=getCRFref(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return additionalData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function fullAccessSetup(listName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let setup=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setup.readonlyFlag=function(vName){return false}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setup.filters=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setup.filters['crfRef']=getCRFref(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setup.getInputId=function(vName){return listName+"_"+vName;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setup.addApply="Save"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setup.unique=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//no addApply 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return setup; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function generateForm(config,data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"generateForm ["+data.rows.length+"]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (let i=0;i<data.rows.length;i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let entry=data.rows[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let queryName=entry["queryName"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!(queryName in config.fields)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 config.fields[queryName]=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let field=config.fields[queryName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		field.title=entry["title"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"generateForm ["+i+"/"+data.rows.length+"]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"entry[queryName]: "+entry["queryName"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"entry[showFlag]: "+entry["showFlag"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let additionalData=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		setAdditionalData(config,additionalData,entry); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		generateSection(config,entry["queryName"],entry["title"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				entry["queryName"], additionalData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function generateSection(config, sectionName, sectionTitle, listName, additionalData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let formName=config.masterForm; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"generateSection"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let tb=config.document.createElement('table'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	tb.className='t2'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let row=tb.insertRow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let cell=config.document.createElement('th'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	row.appendChild(cell);	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell.setAttribute("colspan","4"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell.style.fontSize="20px"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell.style.textAlign="center"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let cellData=config.document.createTextNode(sectionTitle); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell.appendChild(cellData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell=row.insertCell(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let input=config.document.createElement("input");	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input.type="button"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input.value="Show"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input.id="toggle"+sectionName+"VisbilityButton"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input.onclick=function(){toggleVisibility(sectionName,input.id)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell.appendChild(input); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.document.getElementById(formName).appendChild(tb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let div=config.document.createElement('div'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	div.id=sectionName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	div.style.display="none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.document.getElementById(formName).appendChild(div);	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let divTable=config.document.createElement('div'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	divTable.id=sectionName+"Table"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	div.appendChild(divTable); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if ("showFlag" in additionalData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		additionalData.divName=sectionName+"SubDiv"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		additionalData.divQueryName=sectionName+"SubDivList"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let div1=config.document.createElement('div'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		div1.id=additionalData.divName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		div1.style.display="none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		div.appendChild(div1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let div2=config.document.createElement('div'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		div2.id=additionalData.divQueryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		div1.appendChild(div2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"generate master table"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	generateTable(config,listName,divTable.id,true,additionalData,fullAccessSetup(listName)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"generate master table: done"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if ("showFlag" in additionalData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let qName=additionalData.queryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let dName=additionalData.divName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		generateTable(config,qName,dName,false,additionalData,fullAccessSetup(qName)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let divReviewList=config.document.createElement('div'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	divReviewList.id=sectionName+"ReviewList"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	div.appendChild(divReviewList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let divReview=config.document.createElement('div'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	divReview.id=sectionName+"Review"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	div.appendChild(divReview); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let config=new Object();	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.schemaName='lists'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.queryName='visitZeroSetup'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.success=function(data){generateReview(config,data,divReview.id,divReviewList.id,listName)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.Query.selectRows(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function generateReview(config,data,divReviewId,divReviewListId, listName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let listId=-1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (let i=0;i<data.rows.length;i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let entry=data.rows[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (entry["queryName"]!=listName) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		listId=entry["Key"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let reviewSetup=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	reviewSetup.readonlyFlag=function(vName){if (vName=="queryName") return true; return false;}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	reviewSetup.addApply="Add Review"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	reviewSetup.filters=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	reviewSetup.filters["crfRef"]=getCRFref(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	reviewSetup.filters["queryName"]=listId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	reviewSetup.getInputId=function(vName){return listName+"_"+vName;}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	reviewSetup.divReviewListId=divReviewListId;	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"update list display"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	updateListDisplay(config,divReviewListId,"reviewComments",reviewSetup.filters,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	generateTable(config,"reviewComments",divReviewId,false,new Object(),reviewSetup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function setListVisibility(config,setup,additionalData,readonlyFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"Set list visibility "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (f in additionalData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			print(config,"AdditionalData["+f+"]: "+additionalData[f]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let x = config.document.getElementById(additionalData.divName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print("\n Div: "+x); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	x.style.display="none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let eId=setup.getInputId(additionalData.showFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let e = config.document.getElementById(eId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let sText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (readonlyFlag) sText=e.innerHTML; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	else sText=e.options[e.selectedIndex].text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"\n Selected option text: "+sText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (sText == additionalData.showFlagValue){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let filters=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ("filters" in additionalData) filters=additionalData.filters; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		x.style.display = "block"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		updateListDisplay(config,additionalData.divQueryName,additionalData.queryName,filters,readonlyFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function updateListDisplay(config,divName,queryName,filters,readonlyFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"UpdateListDisplay: Query - "+queryName+" div - "+divName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (divName=="NONE") return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let crfRef=getCRFref(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let div=config.document.getElementById(divName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"Enabling display to queryName: "+queryName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	var qconfig=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.renderTo=divName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.schemaName='lists';  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.queryName=queryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.buttonBarPosition='top'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.filters=[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (f in filters){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		qconfig.filters.push(LABKEY.Filter.create(f, filters[f])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.success=function(data){updateSuccess(config,data)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.failure=function(data){updateFailure(config,data)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//show only print button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (readonlyFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		qconfig.buttonBar=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		qconfig.buttonBar.items=["print"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.QueryWebPart(qconfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function updateSuccess(config,data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	print(config,"Update success"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function updateFailure(config,data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	print(config,"Update failed"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function toggleVisibility(config, divName,buttonName){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let x = config.document.getElementById(divName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (x.style.display === "none") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    		x.style.display = "block"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		config.document.getElementById(buttonName).value="Hide"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  	} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    		x.style.display = "none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		config.document.getElementById(buttonName).value="Show"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function generateButton(config,divName,buttonName,callback,callbackParameters){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"generateButton"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let tb=config.document.createElement('table'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	tb.className="t2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let r1=tb.insertRow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	th=config.document.createElement('th'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	r1.appendChild(th); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	th.innerHTML="Complete submission"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//*!* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let c2=r1.insertCell(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let i1=config.document.createElement("input");	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	i1.type="button"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	i1.value=buttonName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	i1.style.fontSize="20px"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	i1.onclick=function(){callback(callbackParameters);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c2.appendChild(i1);	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let c1=r1.insertCell(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.setAttribute("colspan","1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.id=callbackParameters.submitReportId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let el=config.document.getElementById(divName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print("generateButton: element["+divName+"]: "+el); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.appendChild(tb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function generateTable(config,listName,divName,unique,additionalData,setup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//add temp variables 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let qconfig=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.schemaName='lists'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.queryName=listName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//apply filters on data to get right entries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.filterArray=[]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (f in setup.filters){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		qconfig.filterArray.push(LABKEY.Filter.create(f,setup.filters[f])); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.success=function(data){populateTable(config,data,divName,unique,additionalData,setup)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.Query.selectRows(qconfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function populateTable(config,data,divName,unique,additionalData,setup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//generate and populate table with the first suitable entry 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"populateTable Query: "+data.queryName+" divName: "+divName+" setup: "+setup); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let obj=data.metaData.fields; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (f in obj){	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				print(config,"Data["+f+"]: "+obj[f]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				for (g in obj[f]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					print(config,"Data.metaData.fields["+f+"]["+g+"]: "+obj[f][g]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ("lookup" in obj[f]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					for (h in obj[f]["lookup"]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						print(config,"Lookup["+h+"]: "+obj[f]["lookup"][h]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let crfRef=getCRFref(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let entry=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"Data: nrows "+data.rows.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (data.rows.length > 0) entry=data.rows[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let tb=config.document.createElement('table'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	tb.className="t2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.document.getElementById(divName).appendChild(tb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let fields=data.metaData.fields; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (f in fields){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let field=fields[f]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (field.hidden) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let vName=field.name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"Field ["+vName+"]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vName=="crfRef") continue;		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let vType=field.type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"Field ["+vName+"/"+vType+"]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let row=tb.insertRow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let cell=config.document.createElement('th'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		row.appendChild(cell); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let text = config.document.createTextNode(fields[f].shortCaption); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		cell.appendChild(text); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		cell=row.insertCell(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let varValue="UNDEF"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vName in setup.filters) varValue=setup.filters[vName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vName in entry) varValue=entry[vName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vType=="date"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (varValue==="UNDEF") varValue=new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			else varValue=new Date(varValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print("value: "+varValue);		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let input; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (setup.readonlyFlag(vName)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			input=config.document.createTextNode(varValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			cell.id=setup.getInputId(vName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			cell.colSpan="3"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let cellClass="input"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let cellType="text"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if ("lookup" in field){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				input = config.document.createElement("select"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (vType=="date"){  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				input = config.document.createElement("input"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				input.type="date"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (vType=="string"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(vName.search("reviewComment")>-1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					input = config.document.createElement("textarea"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					input.cols="65"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					input.rows="5"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					input = config.document.createElement("input"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					input.type="text"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (vType=="float"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				input = config.document.createElement("input"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				input.type="text"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			input.id=setup.getInputId(vName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (vName in entry){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (vType=="string") input.value=varValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (vType=="float")  input.value=varValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (vType=="date") input.valueAsDate=varValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		cell.appendChild(input); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ("lookup" in field){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let lookup=field["lookup"]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let qconfig=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (debug) print(config,"Query: "+lookup.queryName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			qconfig.schemaName=lookup.schemaName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			qconfig.queryName=lookup.queryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let parameters= new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			parameters.elementId=setup.getInputId(vName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			parameters.keyColumn=lookup.keyColumn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			parameters.displayColumn=lookup.displayColumn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (vName in setup.filters) parameters.selectedKey=setup.filters[vName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (vName in entry) parameters.selectedKey=entry[vName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if ("showFlag" in additionalData) parameters.additionalData=additionalData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (debug) print("Populate select for "+parameters.elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			qconfig.success=function(data){populateSelect(config,data,parameters,setup,setup.readonlyFlag(vName))}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LABKEY.Query.selectRows(qconfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//add comment field	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!("addApply" in setup)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"populateTable: done"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let row=tb.insertRow(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let th=config.document.createElement('th'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	row.appendChild(th); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	th.innerHTML=setup.addApply;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let cell=row.insertCell(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//cell.setAttribute("colspan","2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let input=config.document.createElement("input");	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input.type="button"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input.value=setup.addApply; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell.appendChild(input);	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let cell1=row.insertCell(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell1.setAttribute("colspan","2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell1.id=setup.getInputId("rewievLastSave"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cell1.innerHTML="No recent update"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	input.onclick=function(){saveReview(config,data.queryName,cell1.id,setup)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function populateSelect(config,data,parameters,setup,readonlyFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"populateSelect on "+data.queryName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let elementId=parameters.elementId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let keyColumn=parameters.keyColumn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let displayColumn=parameters.displayColumn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"Query: "+data.queryName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"ElementId: "+elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"keyColumn: "+keyColumn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"displayColumn: "+displayColumn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ("selectedKey" in parameters){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			print(config,"SelectedKey: "+parameters["selectedKey"]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let el = config.document.getElementById(elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"Element: "+el); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!readonlyFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		//clear options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for(i = el.options.length; i >= 0; i--) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			el.remove(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let opt = config.document.createElement("option"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		opt.text = "<Select>"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		opt.value = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		el.options[0] = opt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (let i = 0; i < data.rows.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let displayText = data.rows[i][displayColumn]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let keyValue = data.rows[i][keyColumn]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!readonlyFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let opt = config.document.createElement("option"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			opt.text = displayText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			opt.value = keyValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			el.options[el.options.length] = opt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print("Adding: "+keyValue+" : "+displayText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let t1=checkVariable(config,el,keyValue,displayText,parameters,"selectedKey",readonlyFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (t1) setup.keyValue=keyValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!("additionalData" in parameters)) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"\n Parsing additional data "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let additionalData=parameters["additionalData"];	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let expId=setup.getInputId(additionalData.showFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (expId!=elementId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"Element mismatch: got :"+expId+"/"+elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"Setting onChange to "+el.id); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.onchange=function(){setListVisibility(config,setup,additionalData,readonlyFlag)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setListVisibility(config,setup,additionalData,readonlyFlag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function checkVariable(config,el,varValue,displayText, parameters,varName,readonlyFlag){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!varName in parameters) return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"Comparing: " + varValue  + "/" + parameters[varName]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (varValue==parameters[varName]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (readonlyFlag) el.innerHTML=displayText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			el.selectedIndex=el.options.length-1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (debug) print(" Equal; "+el.selectedIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function failureSelect(config,errorInfo,resp,opt){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	document.getElementById('formStatus').value+="\n Error: "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function saveReview(config,queryName,elementId,setup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"saveReview: elementId "+elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let qconfig=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.schemaName='lists';//could be made more generic 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.queryName=queryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if ("unique" in setup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		qconfig.filterArray=[LABKEY.Filter.create("crfRef",getCRFref())]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.success=function(data){saveReviewToList(config,data,elementId,setup);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//to guess the fields, one must do selectRows first? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.Query.selectRows(qconfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function saveReviewToList(config,data,elementId,setup){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"saveReviewToList: "+" elementId "+elementId+ " nrows "+data.rows.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let useInsert=false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!("unique" in setup)) useInsert=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (data.rows.length==0) useInsert=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let entry=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!useInsert){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		entry=data.rows[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	entry.crfRef=getCRFref(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if ("keyValue" in setup) entry.queryName=setup.keyValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let fields=data.metaData.fields; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (f in fields){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let field=fields[f]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"saveReview field: "+field.name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (field.hidden) continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let vName=fields[f].name; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vName=="crfRef") continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vName=="queryName") continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let eId=setup.getInputId(vName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let el=config.document.getElementById(eId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (!el) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (debug) print(config,"saveReview element: "+eId+" not found"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"saveReview element: "+eId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let vType=fields[f].type; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if ("lookup" in fields[f]){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (el.nodeName==="SELECT"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				entry[vName]=el.options[el.selectedIndex].value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (el.nodeName==="TD"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				entry[vName]=el.innerHTML;	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			print(config,"Setting lookup to "+entry[vName]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vType=="date"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var date=el.valueAsDate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (date==="null") continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			date.setUTCHours(12); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			entry[vName]=date.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			print(config,"Setting date to "+entry[vName]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vType=="string"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			entry[vName]=el.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (vType=="float"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			entry[vName]=el.value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let qconfig=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.rows=[entry]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.schemaName=data.schemaName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.queryName=data.queryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//only update comments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	qconfig.success=function(data){updateLastSavedFlag(config,data,setup,elementId)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!useInsert){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LABKEY.Query.updateRows(qconfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LABKEY.Query.insertRows(qconfig); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function updateLastSavedFlag(config,data,setup,elementId){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"Update last saved flag to "+elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let el=config.document.getElementById(elementId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let dt=new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.innerHTML="Last saved "+dt.toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (data.queryName=="reviewComments"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		updateListDisplay(config,setup.divReviewListId,"reviewComments",setup.filters,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function onSubmit(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	hideErr(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	clearErr(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	printErr(config,"onSubmit"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	checkForm(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let cb=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cb.success=finalValidation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	cb.failure=function(config){printErr("waitForCheckForm failed")}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	waitForCheckForm(config,cb); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function finalValidation(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"validate"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let completed=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (f in config.fields){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let field=config.fields[f]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (field.status!="DONE") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			printErr(config,"Missing entry for "+field.title); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			completed=false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"valid: "+completed); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (completed){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		finalRedirect(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		updateSubmitStatus(config,"Form invalid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function finalRedirect(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	printErr(config,"Form valid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let c1=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.schemaName='lists'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.queryName='crfEntry'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.filterArray=[LABKEY.Filter.create('crfRef',getCRFref(config))]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.success=function(data){setSubmitStatus(config,data)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.Query.selectRows(c1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function setSubmitStatus(config,data){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let entry=data.rows[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	entry.formStatus=2;//Submitted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let c1=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.schemaName=data.schemaName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.queryName=data.queryName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.rows=[entry]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	c1.success=function(data){updateSubmitStatus(config,"Form submitted")}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	LABKEY.Query.updateRows(c1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function updateSubmitStatus(config,msg){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let el=document.getElementById(config.submitReportId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.innerHTML=msg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function hideErr(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let el=config.document.getElementById("errorDiv"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.style.display="none"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function clearErr(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let el=config.document.getElementById("errorTxt"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.value=""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function showErr(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let el=config.document.getElementById("errorDiv"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.style.display="block"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function printErr(config,msg){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	showErr(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el=config.document.getElementById("errorTxt"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.style.color="red"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	el.value+="\n"+msg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function checkForm(config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let crfRef=getCRFref(config) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.status="UNKNOWN"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (f in config.fields){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let field=config.fields[f]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		field.status="UNKNOWN"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug)  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			print(config,"Setting status for "+f+" to "+ field.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let selectRows=new Object(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		selectRows.schemaName="lists"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		selectRows.queryName=f; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		selectRows.filterArray=[LABKEY.Filter.create('crfRef',crfRef)]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		selectRows.success=function(data){checkData(data,config)}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		selectRows.failure=function(errorObj){print(config,"checkData failed.")}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LABKEY.Query.selectRows(selectRows); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function waitForCheckForm(config,cb){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (!("i" in config)) config.i=0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"["+config.i+"] checkForm status "+config.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (config.i>100) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"executing failure");	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		cb.failure(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (config.status=="DONE") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"executing success");	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		cb.success(config); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug) print(config,"success executed");	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.i+=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	setTimeout(function(){waitForCheckForm(config,cb);},1000); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function checkData(data,config){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let debug=false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"checkData "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	let field=config.fields[data.queryName]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	field.status="NONE"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) print(config,"Setting status for "+data.queryName+" to "+field.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (data.rows.length>0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		field.status="DONE"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (debug) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		print(config,"checkData set status for "+data.queryName+" to "+field.status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	for (f in config.fields){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		let subField=config.fields[f]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (debug)  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			print(config,"checkData status["+f+"]: "+subField.status);	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (subField.status=="UNKNOWN") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (debug) print(config,"\t Status for "+f+" not set ["+ subField.status+"]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	config.status="DONE"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 |