
var ModelOptions = new Array();

	// molecular component settings
ModelOptions["Atoms"]=new Array(3);
ModelOptions["Atoms"][0]="comp";
ModelOptions["Atoms"][1]="spacefill";
ModelOptions["Atoms"][2]=0; // current value
ModelOptions["Bonds"]=new Array(3);
ModelOptions["Bonds"][0]="comp";
ModelOptions["Bonds"][1]="wireframe";
ModelOptions["Bonds"][2]=0;
ModelOptions["Ribbon"]=new Array(3);
ModelOptions["Ribbon"][0]="comp";
ModelOptions["Ribbon"][1]="ribbon";
ModelOptions["Ribbon"][2]=0;
ModelOptions["Trace"]=new Array(3);
ModelOptions["Trace"][0]="comp";
ModelOptions["Trace"][1]="trace";
ModelOptions["Trace"][2]=0;
ModelOptions["H-Bonds"]=new Array(3);
ModelOptions["H-Bonds"][0]="comp";
ModelOptions["H-Bonds"][1]="hbonds";
ModelOptions["H-Bonds"][2]=0;
ModelOptions["Dots"]=new Array(3);
ModelOptions["Dots"][0]="comp";
ModelOptions["Dots"][1]="dots";
ModelOptions["Dots"][2]=0;
ModelOptions["IsoSurface"]=new Array(3);
ModelOptions["IsoSurface"][0]="comp";
ModelOptions["IsoSurface"][1]="isosurface";
ModelOptions["IsoSurface"][2]=0;
ModelOptions["Memb Surface"]=new Array(3);
ModelOptions["Memb Surface"][0]="mol";
ModelOptions["Memb Surface"][1]="[DUM]";
ModelOptions["Memb Surface"][2]=0;
ModelOptions["Amino acids"]=new Array(3);
ModelOptions["Amino acids"][0]="comp";
ModelOptions["Amino acids"][1]="spacefill";
ModelOptions["Amino acids"][2]=0; // current value

	// molecule type settings
ModelOptions["All"]=new Array(2);
ModelOptions["All"][0]="mol";
ModelOptions["All"][1]="All";
ModelOptions["Protein"]=new Array(2);
ModelOptions["Protein"][0]="mol";
ModelOptions["Protein"][1]="protein";
ModelOptions["DNA"]=new Array(2);
ModelOptions["DNA"][0]="mol";
ModelOptions["DNA"][1]="dna";
ModelOptions["RNA"]=new Array(2);
ModelOptions["RNA"][0]="mol";
ModelOptions["RNA"][1]="rna";
ModelOptions["Backbone"]=new Array(2);
ModelOptions["Backbone"][0]="mol";
ModelOptions["Backbone"][1]="backbone";
ModelOptions["Sidechain"]=new Array(2);
ModelOptions["Sidechain"][0]="mol";
ModelOptions["Sidechain"][1]="sidechain";
ModelOptions["Carbohydrate"]=new Array(2);
ModelOptions["Carbohydrate"][0]="mol";
ModelOptions["Carbohydrate"][1]="[NAG] or [MAN] or [GAL] or [FUC] or [GLC]";
ModelOptions["Cofactors"]=new Array(2);
ModelOptions["Cofactors"][0]="mol";
ModelOptions["Cofactors"][1]="[HEM] or [FES] or [SF4] or [F3S] or [HEB] or [FAD]";
	// color settings
ModelOptions["Element"]=new Array(2);
ModelOptions["Element"][0]="col";
ModelOptions["Element"][1]="CPK";
ModelOptions["1o Structure"]=new Array(2);
ModelOptions["1o Structure"][0]="col";
ModelOptions["1o Structure"][1]="shapely";
ModelOptions["2o Structure"]=new Array(2);
ModelOptions["2o Structure"][0]="col";
ModelOptions["2o Structure"][1]="structure";
ModelOptions["4o Structure"]=new Array(2);
ModelOptions["4o Structure"][0]="col";
ModelOptions["4o Structure"][1]="chain";
ModelOptions["White"]=new Array(2);
ModelOptions["White"][0]="col";
ModelOptions["White"][1]="white";
ModelOptions["Green"]=new Array(2);
ModelOptions["Green"][0]="col";
ModelOptions["Green"][1]="green";
ModelOptions["Magenta"]=new Array(2);
ModelOptions["Magenta"][0]="col";
ModelOptions["Magenta"][1]="magenta";

//"Atoms,Bonds,Ribbon,Trace,H-Bonds,Dots,IsoSurface,Protein,Backbone,Sidechain,Carbohydrate,Element,Amino acid,Peptide,2o Structure";

	// this is a list of molecule abbreviations
var Abbv="A,Adenosine,nitrogenous base;DA,Adenosine,nitrogenous base;C,Cytidine,nitrogenous base;DC,Cytidine,nitrogenous base;G,Guanosine,nitrogenous base;DG,Guanosine,nitrogenous base;I,Inosine,nitrogenous base;T,Thymidine,nitrogenous base;DT,Thymidine,nitrogenous base;U,Uridine,nitrogenous base;HOH,Water;water;ACD,unknown acidic,amino acid;ACE,Acetyl,amino acid;ACE,Acetyl,amino acid;ALA,Alanine,amino acid;ALB,beta-Alanine,amino acid;ALI,unknown aliphatic,amino acid;ABU,gamma-Aminobutyric acid,amino acid;ARG,Arginine,amino acid;ARO,ambigous,amino acid;ASN,Asparagine,amino acid;ASP,Aspartic acid,amino acid;ASX,ambiguous,amino acid;BAS,unknown basic,amino acid;BET,Betaine,amino acid;CYS,Cysteine,amino acid;amino acid;FOR,Formyl,amino acid;GLU,Glutamic acid,amino acid;GLN,Glutamine,amino acid;GLX,ambiguous,amino acid;GLY,Glycine,amino acid;HET,Heterogen,amino acid;HIS,Histidine,amino acid;HSE,Homoserine,amino acid;HYP,Hydroxyproline,amino acid;HYL,Hydroxylysine,amino acid;ILE,Isoleucine,amino acid;LEU,Leucine,amino acid;LYS,Lysine,amino acid;MET,Methionine,amino acid;ORN,Ornithine,amino acid;PHE,Phenylalanine,amino acid;PRO,Proline,amino acid;PCA,Pyrollidone carboxylic acid,amino acid;SAR,Sarcosine,amino acid;SER,Serine,amino acid;TAU,Taurine,amino acid;TER,Terminator,amino acid;THR,Threonine,amino acid;THY,Thyroxine,amino acid;TRP,Tryptophan,amino acid;TYR,Tyrosine,amino acid;UNK,Unknown,amino acid;VAL,Valine,amino acid;AFP,alpha fructose 1,6-diphosphatecarbohydrate;AHR,alpha-l-arabinofuranose,carbohydrate;ALL,d-allopyranose,carbohydrate;ARA,alpha-l-arabinose,carbohydrate;ARB,beta-l-arabinose,carbohydrate;BDF,beta-d-fructopyranose,carbohydrate;BDR,beta-d-ribofuranosyl,carbohydrate;BGC,glucose,carbohydrate;BMA,beta-d-mannose,carbohydrate;FCA,alpha-d-fucose,carbohydrate;FCB,beta-d-fucose,carbohydrate;FRU,fructose,carbohydrate;FUC,fucose,carbohydrate;FUL,beta-l-fucose,carbohydrate;G4S,d-galactose-4-sulfate group,carbohydrate;GAL,d-galactose,carbohydrate;GLA,alpha d-galactose,carbohydrate;GLB,beta-d-galactose,carbohydrate;GLC,glucose,carbohydrate;GLS,beta-d-glucopyranose spirohydantoin,carbohydrate;GUP,beta-l-gulopyranoside,carbohydrate;IDS,o2-sulfo-glucuronic acid,carbohydrate;LX,xylopyranose,carbohydrate;MAN,mannose,carbohydrate;NAG,n-acetyl-glucosamine,carbohydrate;NGS,n-acetyl-glucosamine-6-sulfate group,carbohydrate;RAA,alpha-rhamnose,carbohydrate;RAM,rhamnose,carbohydrate;RIB,ribose,carbohydrate;RIP,ribose(pyranose form),carbohydrate;SGN,n,o6-disulfo-glucosamine,carbohydrate;XYP,beta-d-xylopyranose,carbohydrate;XY,xylopyranose,carbohydrate;CBI,cellobiose,carbohydrate;CT3,cellotriose,carbohydrate;CTR,cellotriose,carbohydrate;CTT,cellotetraose,carbohydrate;LAT,lactose,carbohydrate;MAB,mannobiose,carbohydrate;MAL,maltose,carbohydrate;MLR,maltotriose,carbohydrate;MTT,maltotetraose,carbohydrate;SUC,sucrose,carbohydrate;TR,trehalose,carbohydrate;HEM,heme,cofactor;HEB,heme,cofactor;FES,2Fe-2S cluster,cofactor;SF4,4Fe-4S cluster,cofactor;F3S,3Fe-4S cluster,cofactor;FAD,FAD,coenzyme;NAD,NAD,coenzyme;GOL,glycerol,organic;PLM,palmitic acid,lipid;GSL,GalA-GSL,lipid;NDG,2-(acetylamino)-2-deoxy-glucopyranose,carbohydrate;FUL,6-deoxy-beta-l-galactose,carbohydrate;MAG,alpha-methyl-N-actyl-d-glucoseamine,carbohydrate;RAE,2-deoxy-alpha-rhamnose,carbohydrate"

	// these variables hold component dimension Max parameters
var spacefillMax=2.7;
var wireframeMax=2.0;
var traceMax=400;
var ribbonMax=400;
var cartoonMax=400;
var dotsMax=2.7;
var hbondsMax=0.5;
var bondsMax=0.5;
var IsoSurfaceMax=1.5;
var GeoSurfaceMax=1.5;

	// variables that hold image parameters
var curComponent="";
var curComponentName=""
var curMolecule="";
var curMoleculeName="";
var atomsVDW=false;
var curColor="";
var curSurface="";
	// the atom set pick target 
var toSelect="";
	// other inquiry-related variables
var quesGroup="";
var tallyGroup ="";
	// this is needed when returning from Explain panel
var curPanel="Study";

var loadingMod="set echo middle center; font echo 18 sanserif italic; color echo orange; echo Loading Molecule...|Please wait; delay 0.1; ";

//----- on load functionss -----------------

function loadActions(){ 
	// load group abbreviations etc. into associative array
var temp1= new Array();
var temp2 = new Array();
molAbbr=new Array();
temp1=Abbv.split(";");
for (i=0;i<=temp1.length-1;i++){
	temp2=temp1[i].split(",");
	molAbbr[temp2[0]]=new Array()  // abbreviation
	molAbbr[temp2[0]][0]=temp2[1]; // name
	molAbbr[temp2[0]][1]=temp2[2]; // molecule type
	}

	// use stylesheet for appropriate screen resolution
if (screen.width <1200){
	document.styleSheets[1].disabled=true;
	document.styleSheets[0].disabled=false;
	}
if (screen.width <1000){
	document.getElementById("BioEblm").src="../Images/BioEblm_sm.gif";	
	document.getElementById("hedDeptBiol").src="../Images/DeptBiol_sm.gif";
	document.getElementById("hedaHelix").src="../Images/ahelix_sm.gif";
	document.getElementById("hedMcLogo").src="../Images/MC-Logo_sm.gif";
	}	
else if (screen.width <1200){
	document.getElementById("BioEblm").src="../Images/BioEblm_md.gif";
	document.getElementById("hedDeptBiol").src="../Images/DeptBiol_md.gif";
	document.getElementById("hedaHelix").src="../Images/ahelix_md.gif";
	document.getElementById("hedMcLogo").src="../Images/MC-Logo_md.gif";
	}	
else{
	document.getElementById("BioEblm").src="../Images/BioEblm_lg.gif";	
	document.getElementById("hedDeptBiol").src="../Images/DeptBiol.gif";
	document.getElementById("hedaHelix").src="../Images/ahelix.gif";
	document.getElementById("hedMcLogo").src="../Images/MC-Logo.gif";	
}
		// collapse option menus
colpsMenu();
	// disable radio groups
enableOpts("x","AnsOpt")
for(var z=1; z<=4; z++){
	enableOpts("x",'AnsOpt'+z);
	}
enableOpts("x","OptGrp")
for(var z=1; z<=4; z++){
	enableOpts("x",'OptGrp'+z);
	}
} 


	// ---------------------panel operation functions

function colpsMenu(id) {
for (var i = 1; i<=3; i++) {
	document.getElementById('smenu'+i).style.display='none';
	}
if (id){
 document.getElementById(id).style.display='block';}
}

function showStudy(){
		// makes study panel visible
document.getElementById("Explain").style.visibility="hidden";
document.getElementById("Inquiry").style.visibility="hidden";
document.getElementById("Study").style.visibility="visible";
curPanel="Study"
}

function showInquiry(){
		// makes test panel visible
document.getElementById("Explain").style.visibility="hidden";
document.getElementById("Inquiry").style.visibility="visible";
document.getElementById("Study").style.visibility="hidden";
curPanel="Inquiry"
}

function showExplanation(type){
		// makes Explain panel visible
document.getElementById("Inquiry").style.visibility="hidden";
document.getElementById("Study").style.visibility="hidden";
var expDiv=document.getElementById("Explain")
expDiv.style.visibility="visible";
if (type=="display"){
	expDiv.scrollTop=300
}
else if (type=="color"){
expDiv.scrollTop=expDiv.scrollHeight
}
else{
	expDiv.scrollTop=0	
}
}

function backToJmol(){
		// makes test panel visible
document.getElementById("Explain").style.visibility="hidden";
document.getElementById(curPanel).style.visibility="visible";		
}


function emuButNormal(ButId){
	// restores 'unclicked' appearance of emulated buttons
var Butstyle=document.getElementById(ButId).style;
Butstyle.borderColor="#aaa #000 #000 #aaa";
}

function emuButClicked(ButId){
		// create button 'clicked' appearance
var Butstyle=document.getElementById(ButId).style;

Butstyle.borderColor="#000 #aaa #aaa #000";
}


function openJmolSnapshot(){
	var iW = jmolEvaluate("_width");
	var iH = jmolEvaluate("_height");
	window.open("../jmol_snapshot.html",null,"height="+(parseInt(iH) + 300)+",width="+(parseInt(iW) + 80)+",status=yes,toolbar=yes,menubar=yes,location=no");
}


function changeBckGrnd(s){
if (s===true){
	jmolScript("color background white");
	}
else{
	jmolScript("color background black");
	}	
}

//------next functions used to scroll Jmol panel if necessary

scrollStep=1

timerUp=""
timerDown=""

function toTop(id){
document.getElementById(id).scrollTop=0
}

function scrollDivDown(id){
clearTimeout(timerDown) 
document.getElementById(id).scrollTop+=scrollStep
timerDown=setTimeout("scrollDivDown('"+id+"')",10)
}

function scrollDivUp(id){
clearTimeout(timerUp)
document.getElementById(id).scrollTop-=scrollStep
timerUp=setTimeout("scrollDivUp('"+id+"')",10)
}

function toBottom(id){
document.getElementById(id).scrollTop=document.getElementById(id).scrollHeight
}

function stopMe(){
clearTimeout(timerDown) 
clearTimeout(timerUp)
}





//-----------------------------



	//----------- model alteration functions

function changeZoom(zoom){
		// called by zoom buttons
jmolScript(zoom);
}

function toggleWireframe(wfr){
//alert(jmolEvaluate(!wireframeRotation))
if (wfr === true){
//	jmolScript("set wireframeRotation ON");
	jmolScript("label %e; font label 18 bold; set labelOffset 0 0; set wireframeRotation ON");
	}
else {
	jmolScript("label off; set wireframeRotation OFF");
	}
}

function showHalos (atoms){
jmolScriptWait("curSel={selected}; halos OFF; select {"+atoms+"}; halos 0.4; color halos "+curColor+"; select {@curSel}")
}

function ChangeSize(direct) {

	// changes the size of model elements; called by resize buttons
if (curComponentName=="IsoSurface"){return;}
var newSize=0;
	// make sure that a parameter has been selected
if (curComponent ==="") {
	return;
	}
var oldSize=Number(ModelOptions[curComponentName][2]);
	
if (direct == "up"){ 	// increase size
	if (oldSize===0){
			//set size to 20% of default size
		newSize = (window[curComponent+"Max"]*0.2).toFixed(2);
		}
	else {    //oldsize > 0
				// increment upward by 10%
			newSize=(oldSize+(window[curComponent+"Max"]*0.05)).toFixed(2);
			// do not exceed max size
		if (newSize > window[curComponent+"Max"]){
			newSize=window[curComponent+"Max"];
			}
		}
			// send larger size to jmol
		
	ModelOptions[curComponentName][2]=newSize;

	newSize=FormatCompSize(parseFloat(newSize),curComponentName); 
	
	jmolScript(curComponent + " " + newSize);
	document.getElementById("chkComp"+curComponentName).checked=true;		
	}  // end increase size
else{ // decrease size by 10%
	newSize=(oldSize-(window[curComponent+"Max"]*0.05)).toFixed(2);
			// set to zero if less than 5% of max		
	if (newSize < window[curComponent+"Max"]*0.05){
		newSize=0;
		ModelOptions[curComponentName][2]=0;
		jmolScript(curComponent + " 0");	
		jmolScript (curComponent  + " OFF");
		document.getElementById("chkComp"+curComponentName).checked=false;	
		}
	else{  // send smaller size to jmol		
		ModelOptions[curComponentName][2]=newSize;
		newSize=FormatCompSize(parseFloat(newSize),curComponentName);
		jmolScript(curComponent + " " + newSize);	
		}
	}
if (curComponentName!="Isosurface"){EchoSize(newSize);}
//if (curComponentName=="Atoms" ||curComponentName=="Dots" || curComponentName=="Bonds"){EchoSize(newSize);}
} 


function EchoSize(size){
		// display atom size in jmol window
var txtEcho=""		
if (ModelOptions[curComponentName][2]!==0){
	if (atomsVDW){txtEcho=curComponentName+": "+size+" vdW radius";}
	else if (curComponentName=="Ribbon" || curComponentName=="Trace"){txtEcho=curComponentName+": "+size;}
	else {txtEcho=curComponentName+": "+size+" Angstrom";}
	jmolScript("set echo theSize 0% 100%; font echo 14 sansserif bold; color echo gold; echo "+ txtEcho);	
	}
else {
	jmolScript("set echo theSize 0% 100%; echo");
	}	

			// remove echo is size = 0
}

function DisplayVDW(item){
atomsVDW=item.checked
if (!document.getElementById("chkCompAtoms").checked){return;}
var itemComp=ModelOptions["Atoms"][1];
var itemSize=ModelOptions["Atoms"][2];
if (item.checked === true) { // turn on ball & Stick
		itemSize=FormatCompSize(parseFloat(itemSize),"Atoms");
		jmolScriptWait (itemComp+" "+itemSize+" ;echo;");
	}
else{
		itemSize=FormatCompSize(parseFloat(itemSize),"Atoms");
		jmolScriptWait (itemComp+" "+itemSize+" ;echo;");	
	}
if (curComponentName=="Atoms" ||curComponentName=="Dots" ){EchoSize(newSize);}

}


function SetCurrentComponent(item){
	// initial loading of settings returns name of component (Atoms, Bonds, etc)
	//compOpts receives the name
curComponent=ModelOptions[item][1];
curComponentName=item;
	// now show the size in applet
curComponentSize=Number(ModelOptions[curComponentName][2]);

	// disable color options if bonds or isosurface are selected
var disCol=(curComponent =='wireframe' || curComponent == 'hbonds'  || curComponent == 'isosurface')
document.getElementById("smenu3").disabled	= disCol;
	// set menu title to current selection
document.getElementById("compTxt").innerHTML=curComponentName;
}

function ComponentOnOff(item){
var itemComp=ModelOptions[item.value][1];
var itemSize=Number(ModelOptions[item.value][2]);
if (item.checked === true) { // turn on the component
	if (itemComp == "hbonds"){jmolScript("calculate hbonds");}
		//set to default of previously off
	if (itemSize===0){
			// set default sizes
		itemSize= window[itemComp+"Max"] * 0.2;
		}	
	if (itemComp == "isosurface"){
		jmolScriptWait (loadingMod+"isoSurface ignore(Not "+curMolecule+") solvent;echo");
		}
	else {
		ModelOptions[item.value][2]=itemSize;
		itemSize=FormatCompSize(parseFloat(itemSize),item.value);
		jmolScriptWait (loadingMod+itemComp  + " "+itemSize+" ;echo;");
		}
	} //end checked is true
else {   // if turn off, make it so
	jmolScript (itemComp  + " OFF; echo;");
	}	
}

function FormatCompSize(size,item){
		// formats size according to type of component being displayed
var frmSize="";
if (item == "Atoms" || item == "Bonds" || item == "Dots" || item == "H-Bonds" || item == "IsoSurface"){frmSize=size.toFixed(2);}			
if ((item == "Atoms" || item == "Dots") && atomsVDW){frmSize=(size*66.7).toFixed(0)+"%";}	
if (item == "Ribbon" || item == "Trace" || item == "Cartoon" || item == "Rockets"){frmSize=size.toFixed(0);}
return frmSize;		
}

function SetCurrentMolecule (item){
	//sets current Molecule (protein, DNA, backbone, etc)
	// receives name
curMoleculeName=item;
curMolecule=ModelOptions[item][1];
jmolScript("select " + curMolecule)
document.getElementById("molTxt").innerHTML=item;
}

function MoleculeOnOff(item){
		// called from molecule drop-down menu
var itemMol=ModelOptions[item.value][1];
if (item.checked==false){
	jmolScript("hide hidden or {"+itemMol+"}");
	}
else{
	jmolScript("display displayed or {"+itemMol+"}");	
	}
}

function SetColor (item){
	// sets the currently selected color
	//receives the name

curColor=ModelOptions[item][1];	
	// this works for atoms
if (curMoleculeName == "Carbohydrate" && curColor == "shapely"){
	curColor="group";}
		// if the molecule component is atoms or AAs, 'atoms' needs to be substituted for 'spacefill'
if (curComponentName == "Atoms" || curComponentName == "Amino acids"){
	jmolScript ("color atoms " + curColor);
	}
	// this work for all others
else {
	jmolScript ("color " + curComponent + " " + curColor);
	}
	// set menu title to current selection
document.getElementById("colTxt").innerHTML=item;
}



	//--------------- applet & inquiry response functions

var atmNm=0
var grpID=""
var SelatmName=""
var bndAtom1=""
var bndAtom2=""
function showpick(xApplet,atomID,atomNum){
	// examine atom or bond selected and determine if it is correct	
atomID=atomID+" ";
	// check to see if a bond was selected
// could use this to determine if atom,bond or draw object was picked ---->alert(jmolEvaluate("__atomPicked"))	

if (atomID.search(/bond/i) !== -1){
		// bond info is being returned
	var bondMsg=atomID.split("\",\"");
		// bondID will return the bond ID
	var bondID=bondMsg[1].split(" ");
		// now split out the two atoms involved (assigned to bndAtom1 & bndAtom2)
	var bondatoms=atomID.split("#")
	var bAtm1=bondatoms[1].split(" ")
	var bAtm2=bondatoms[2].split(" ")
	bndAtom1=bAtm1[0]
	bndAtom2=bAtm2[0]	
		// determines what to do after user clicks on model
	if (toSelect !="x" || quesGroup != "x"){
			// if this is not part of an inquiry question, show group 
		showJmolMsg(IsPickCorrect(bondID[0]));
		}		
	}
else{
	atomNum=atomNum+" ";
	var resEnd=atomID.indexOf(":",1);
	var resNum=atomID.substring(5,resEnd);
	var atmNmStrt=atomID.indexOf("#",1)+1;
	var atmNmEnd=atomID.indexOf(" ",atmNmStrt);
	atmNm=atomID.substr(atmNmStrt,atmNmEnd-atmNmStrt);
	var grpEnd=atomID.indexOf("]",0);
	grpID=atomID.substring(1,grpEnd);	
	var atmNameStrt=atomID.indexOf(".",1)+1;
	SelatmName=atomID.substr(atmNameStrt,atmNmStrt-7);
	
		// determines what to do after user clicks on model
	if (toSelect =="x" && quesGroup == "x"){
			// if this is not part of an inquiry question, show group 
			if (grpEnd != -1){
				echoGroupName();
				}
		}
	else{ // evaluate or otherwise process selection
	
		showJmolMsg(IsPickCorrect(atomID));
		}
	}
}

function echoGroupName(){
		try{jmolScript("set echo top right; color echo gold; background echo black; echo "+molAbbr[grpID][0]+"; delay 1; echo");}
		catch(err){}
}

function evalResponse(ctlValue, isChecked, ctlID){
   // responds to user resonse to knowledge question

if (isChecked === true){
	document.getElementById(tallyGroup+"Attempts").value= Number(document.getElementById(tallyGroup+"Attempts").value)+1;
//	window[tallyGroup+'Attempts'].value = Number(window[tallyGroup+'Attempts'].value)+1;

	if (ctlValue == "True") {
		document.getElementById(tallyGroup+"Correct").value = Number(document.getElementById(tallyGroup+"Correct").value)+1;
		showMsg("Well done! That is Correct");
		}
		else {
			showMsg("Oops! That is incorrect. Try Again.");
			//alert("Incorrect");
			// use id to set control checked to false
			document.getElementById(ctlID).checked=false;
		}
	}
}


function showJmolMsg(txt){
		// shows response msg to pick action
if (!txt){return;}
jmolScript("set echo bottom center; background echo black; color echo gold; font echo 20 serif bolditalic; echo " + txt +"; delay 1.5; echo; background echo none");
}


function showMsg(txt){
// gets Popup message
var PopWin=document.getElementById('Popup');
document.getElementById('PopMsg').innerHTML=txt;
PopWin.style.visibility='visible';
}

function hideNote(){
	 // hides Popup message
var PopWin=document.getElementById('Popup');
PopWin.style.visibility='hidden';
}


	//------------ model & option loading functions -----------


function loadValues(model,modOptions,questionGrp,tallyGrp,quesSubGrp,answerGrp,toPick,script){
if (model != 'x'){OpenModel(window[model+'Scp'],window[model+'Msg']);}
FillControls(modOptions);
setQuesGroup(questionGrp);
if (tallyGrp != 'x'){setTallyGroup(tallyGrp);}
if (quesSubGrp != 'x'){enableOpts(quesSubGrp,'OptGrp');}
if (answerGrp != 'x'){
		enableOpts(answerGrp,'AnsOpt');
			// next loop allows for selecting AnsOpt groups such as AnsOpt1, AnsOpt2, etc
		for(var z=1; z<=4; z++){
			enableOpts(answerGrp,'AnsOpt'+z);
			}
		}
setPickTarget(toPick);
if (script != 'x'){runScript(script);}
}


function OpenModel(strScript, strMsg){
	// handles model selection, setting appropriate variables to run animations
	jmolScriptWait ("zap; set bondPicking OFF; set atomPicking ON");  
	jmolScriptWait(loadingMod + strScript + "; hover OFF; set wireframeRotation OFF");
	document.getElementById('chkWireframe').checked=false;
	setModelName(strMsg);
}

function setModelName(strMsg){
	document.getElementById("modelName").innerHTML=strMsg;
}

function setQuesGroup(qsGrp){
quesGroup=qsGrp;
}


function setTallyGroup(tlyGrp){
tallyGroup=tlyGrp;
}

function setPickTarget(toPick){
toSelect=toPick;
}


function FillControls(settings){
	// load model settings into combo controls and set current model parameters and defaults
	// two paralell array are create: Temp is indexed by number; ModelOptions by selection value
	// temp is needed to load values into select controls; ModelOptions is used by other functions

	// clear any existing values and reset titles
document.getElementById("compOpts").innerHTML="";
document.getElementById("molOpts").innerHTML="";
document.getElementById("colOpts").innerHTML="";
document.getElementById("compTxt").innerHTML="Model";
document.getElementById("molTxt").innerHTML="Molecule";
document.getElementById("colTxt").innerHTML="Color";

if (settings == "x"){return;}

	// load options into select cntrols
var aValues = new Array();
			// split settings array (atoms, sidechain, ribbons, etc
aValues=settings.split(",");
		// now load all settings for this model into a new ModelOptions array
for (i=0;i<=aValues.length-1;i++){
	if(aValues[i].charAt(0)=="|"){
			// a new model option will be '|type:(mol or col),Name,Value|"

		var len=aValues[i].indexOf("|",2);
		var x=aValues[i].substr(1,len-1);
		var newOpt = new Array();
		newOpt=x.split(";");
			// check to see if this item already exists in array
		try{var test= ModelOptions[newOpt[1]][0];}
			// if not create new option array
		catch(err){ModelOptions[newOpt[1]]= new Array();} // option Name
			// fill options
		ModelOptions[newOpt[1]][0]=newOpt[0]; // option type
		ModelOptions[newOpt[1]][1]=newOpt[2]; // option value
//		ModelOptions[newOpt[1]][2]=newOpt[3]; // initial size	
		AddSelOption(newOpt[0],newOpt[1],newOpt[2]);
		}
	else{	
				// option is already in the predefined set
		var num=Number(aValues[i])
		if (isNaN(num)){ 
			AddSelOption(ModelOptions[aValues[i]][0],aValues[i],ModelOptions[aValues[i]][1])
			ModelOptions[aValues[i]][2]=0  // this will clear any previous value				
			}
		else{
				// if value is a number, it must be the ititial size of a visible component		
			ModelOptions[aValues[i-1]][2]=aValues[i];
			}
		}
	}

SetCurrentComponent(defComp);
SetCurrentMolecule(defMol);
	//this loop pre-checks display checkboxes
for (i=0;i<=aValues.length-1;i++){
		num=Number(aValues[i]);
		if (!isNaN(num)){
			document.getElementById("chkComp"+aValues[i-1]).checked="true";
		}
	}
}
var defComp="";
var defMol="";

function AddSelOption(selControl,item,itmvalue){
	// adds an option to the option dropdown menus
	var ulMenu = "";
	var liOpts = "";
	if (selControl == "comp"){
		ulMenu = document.getElementById("compOpts");
		liOpts =  ulMenu.innerHTML
	if (liOpts ===""){defComp=item;}
		if (item == "Atoms"){
		liOpts = liOpts +"<li value=\""+item+"\" onclick=\"SetCurrentComponent('"+item+"')\"> <div style=\"float:left;\" ><input type=\"checkbox\" id=\"chkCompAtoms\" name=\"chkComp\" value=\""+item+"\" onclick=\"ComponentOnOff(this)\">"+item+"<span style=\"padding-left:10px;\">vdW<input type=\"checkbox\" id=\"AtomsVDW\" name=\"\" value=\"\" onclick=\"DisplayVDW(this)\"></span></div></li>";	
		}
		else{
		liOpts = liOpts +"<li value=\""+item+"\" onclick=\"SetCurrentComponent('"+item+"')\"> <div style=\"float:left;\"><input type=\"checkbox\" id=\"chkComp"+item+"\" name=\"\" value=\""+item+"\" onclick=\"ComponentOnOff(this)\">"+item+"</div></li>";				
		}
		ulMenu.innerHTML=liOpts;
		}
	else if (selControl == "mol"){
		ulMenu = document.getElementById("molOpts");
		liOpts =  ulMenu.innerHTML
		if (liOpts ===""){defMol=item;}
		
		liOpts = liOpts +"<li style=\"clear:both; line-height:20px;\" value=\""+item+"\" onclick=\"SetCurrentMolecule('"+item+"')\"> <div style=\"float:left;\" ><input type=\"checkbox\" id=\"chkMol"+item+"\" name=\"\" checked=\"checked\" value=\""+item+"\" onclick=\"MoleculeOnOff(this)\">"+item+"</div></li>";			
		ulMenu.innerHTML=liOpts;
		}
	else if (selControl == "col"){
		ulMenu = document.getElementById("colOpts");
		liOpts =  ulMenu.innerHTML;
		if (liOpts ===""){SetColor(item);}		
		liOpts = liOpts +"<li style=\"text-align:left; padding-left:5px; line-height:17px;\" ><div value=\""+item+"\" onclick=\"SetColor('"+item+"')\">"+item+"</div></li>";
		ulMenu.innerHTML=liOpts;		
		}	
}


function createCompObjects(){
	////****** not used
var compOptns = document.getElementById("compOpts");
var chldNodes = compOptns.getElementsByTagName("li");
for (var j=0;j<=chldNodes.length-1;j++){	
	var chldDiv=chldNodes[j].getElementsByTagName("div");				
	var item=chldDiv[0].innerHTML;
	
	window["Obj"+item]=ModelObject(ModelOptions[item][1],"",ModelOptions[item][2],"false")
	}
}


function ModelObject(value,color,size,isOn){
	///****** not used
this.value=value;
this.color=color
this.size = size;
this.isOn = isOn;
//	alert(value)
}


function runScript(strScript){
	// this function runs scrips, obviously
jmolScriptWait (" echo ;" + strScript );
}


function enableOpts(optGroup,optType){
	// create collection of radio group buttons
var rgButtons=document.getElementsByName(optType);
		// iterate through element collection
	for (i=0; i<=rgButtons.length-1; i++){
		var ButId=rgButtons[i].id;
		// indexof examines the ID (e.g. '5A') for the OptGroup number 
		// uncheck all; and enable if button ID is the same as that of selected option group 
	if (ButId.indexOf(optGroup) !== 0){
		document.getElementById(ButId).disabled=true;
		}
		// disable buttons of other radio groups
	else {document.getElementById(ButId).disabled=false;}
		document.getElementById(ButId).checked=false;
		}

}





