var marker = 0;
var count = 0;
var data = " ";
var seite = " ";
var sp = "en";

var max_datasets = 10;

//*** data sets: ***
var dist_min = new Array(max_datasets);
var dist_max = new Array(max_datasets);
var atomname1 = new Array(max_datasets);
var atomname2 = new Array(max_datasets);
var atomnum1 = new Array(max_datasets);
var atomnum2 = new Array(max_datasets);
var torsion1a = new Array(max_datasets);
var torsion1b = new Array(max_datasets);
var torsion1c = new Array(max_datasets);
var torsion2a = new Array(max_datasets);
var torsion2b = new Array(max_datasets);
var torsion2c = new Array(max_datasets);
var weighting1a = new Array(max_datasets);
var weighting1b = new Array(max_datasets);
var weighting1c = new Array(max_datasets);
var weighting2a = new Array(max_datasets);
var weighting2b = new Array(max_datasets);
var weighting2c = new Array(max_datasets);

function CheckInput() {
	if(document.atomsform.nr1.value == "")  {
		alert("Please select atoms.");
		document.atomsform.nr1.focus();
		return false;
	}
	if(document.atomsform.nr2.value == "")  {
		alert("Please select atoms.");
		document.atomsform.nr2.focus();
		return false;
	}
	if(document.atomsform.min.value == "")  {
		alert("Please fill in distance values.");
		document.atomsform.min.focus();
		return false;
	}
	if(document.atomsform.max.value == "")  {
		alert("Please fill in distance values.");
		document.atomsform.max.focus();
		return false;
	}
	return true;
}

function GetAnalysedResidueIndexByAtomNum(atomno) {
	var resindex = 0;
	for(i = 0; i < atoms.length; i++) {
		if(atoms[i] == null) {
			continue;
		}
		if(atoms[i].num == atomno) {
			resindex = atoms[i].resindex;
			if(resindex == analysedResid1) {
				return 1;
			}
			if(resindex == analysedResid2) {
				return 2;
			}
		}
	}
	return 0;
}

function Atom(num, atomname, type, resindex, torsionCount, torsions) {
	this.num = num;
	this.atomname = atomname;
	this.type = type;
	this.resindex = resindex;
	this.torsionCount = torsionCount;
	this.torsions = torsions;
}

function Residue(num, resname) {
	this.num = num;
	this.resname = resname;
}

function Torsion(atomids, atomnames) {
	this.atomids = atomids;
	this.atomnames = atomnames;
}

function SetAtomsAndTorsions(resindex, atomno){

	torsion = "";
	torsion1 = "none";
	torsion2 = "none";
	torsion3 = "none";
	torsion4 = "none";
	
	if(resindex == 0) { //*** should be the case when called via Jmol
		resindex = GetAnalysedResidueIndexByAtomNum(atomno);
	}

	if(resindex == 1) {	
		//*** set selectedIndex (should be already set when the atom was picked from the list, but not when picked via Jmol): ***
		for(i = 0; i < document.atomsform.atomlist1.options.length; i++) {
			if(document.atomsform.atomlist1.options[i].value == atomno ) {
				document.atomsform.atomlist1.selectedIndex = i;
				
				//*** set atom num: ***
				document.atomsform.nr1.value = atomno;
				
				//*** set torsions: ***
				if(atoms[atomno].torsionCount > 0) {
					document.atomsform.torsion1a.value = atoms[atomno].torsions[0].atomnames + " (" + atoms[atomno].torsions[0].atomids + ")";
					document.atomsform.wgt1a1.value = "1";
					document.atomsform.wgt1a2.value = "1";
					document.atomsform.wgt1a3.value = "1";
				} else {
					document.atomsform.torsion1a.value = "none";
					document.atomsform.wgt1a1.value = "";
					document.atomsform.wgt1a2.value = "";
					document.atomsform.wgt1a3.value = "";
				}
				
				if(atoms[atomno].torsionCount > 1) {
					document.getElementById("torsline1b").style.visibility = "visible";
					document.atomsform.torsion1b.value = atoms[atomno].torsions[1].atomnames + " (" + atoms[atomno].torsions[1].atomids + ")";
					document.atomsform.wgt1b1.value = "1";
					document.atomsform.wgt1b2.value = "1";
					document.atomsform.wgt1b3.value = "1";
				} else {
					document.getElementById("torsline1b").style.visibility = "collapse";
					document.atomsform.torsion1b.value = "";
					document.atomsform.wgt1b1.value = "";
					document.atomsform.wgt1b2.value = "";
					document.atomsform.wgt1b3.value = "";
				}
				
				if(atoms[atomno].torsionCount > 2) {
					document.getElementById("torsline1c").style.visibility = "visible";
					document.atomsform.torsion1c.value = atoms[atomno].torsions[2].atomnames + " (" + atoms[atomno].torsions[2].atomids + ")";
					document.atomsform.wgt1c1.value = "1";
					document.atomsform.wgt1c2.value = "1";
					document.atomsform.wgt1c3.value = "1";
				} else {
					document.getElementById("torsline1c").style.visibility = "collapse";
					document.atomsform.torsion1c.value = "";
					document.atomsform.wgt1c1.value = "";
					document.atomsform.wgt1c2.value = "";
					document.atomsform.wgt1c3.value = "";
				}
			}
		}
	} 
	
	if(resindex == 2) {	
		//*** set selectedIndex (should be already set when the atom was picked from the list, but not when picked via Jmol): ***
		for(i = 0; i < document.atomsform.atomlist2.options.length; i++) {
			if(document.atomsform.atomlist2.options[i].value == atomno ) {
				document.atomsform.atomlist2.selectedIndex = i;
				
				//*** set atom num: ***
				document.atomsform.nr2.value = atomno;
				
				//*** set torsions: ***
				if(atoms[atomno].torsionCount > 0) {
					document.atomsform.torsion2a.value = atoms[atomno].torsions[0].atomnames + " (" + atoms[atomno].torsions[0].atomids + ")";
					document.atomsform.wgt2a1.value = "1";
					document.atomsform.wgt2a2.value = "1";
					document.atomsform.wgt2a3.value = "1";
				} else {
					document.atomsform.torsion2a.value = "none";
					document.atomsform.wgt2a1.value = "";
					document.atomsform.wgt2a2.value = "";
					document.atomsform.wgt2a3.value = "";
				}
				
				if(atoms[atomno].torsionCount > 1) {
					document.getElementById("torsline2b").style.visibility = "visible";
					document.atomsform.torsion2b.value = atoms[atomno].torsions[1].atomnames + " (" + atoms[atomno].torsions[1].atomids + ")";
					document.atomsform.wgt2b1.value = "1";
					document.atomsform.wgt2b2.value = "1";
					document.atomsform.wgt2b3.value = "1";
				} else {
					document.getElementById("torsline2b").style.visibility = "collapse";
					document.atomsform.torsion2b.value = "";
					document.atomsform.wgt2b1.value = "";
					document.atomsform.wgt2b2.value = "";
					document.atomsform.wgt2b3.value = "";
				}
				
				if(atoms[atomno].torsionCount > 2) {
					document.getElementById("torsline2c").style.visibility = "visible";
					document.atomsform.torsion2c.value = atoms[atomno].torsions[2].atomnames + " (" + atoms[atomno].torsions[2].atomids + ")";
					document.atomsform.wgt2c1.value = "1";
					document.atomsform.wgt2c2.value = "1";
					document.atomsform.wgt2c3.value = "1";
				} else {
					document.getElementById("torsline2c").style.visibility = "collapse";
					document.atomsform.torsion2c.value = "";
					document.atomsform.wgt2c1.value = "";
					document.atomsform.wgt2c2.value = "";
					document.atomsform.wgt2c3.value = "";
				}
			}
		}
	}


}

function pickJmolAtom(appletname, jmolatom) {
	//*** jmol callback message has the following format: [MAN]2.HO6 #43 -0.108 2.574 -2.59
	if(jmolatom.indexOf("#") != -1) {
		atomnum = jmolatom.slice(jmolatom.indexOf("#") + 1);
		atomnum = atomnum.substring(0, atomnum.indexOf(" "));
		SetAtomsAndTorsions(0, atomnum);
	}
} 

function writeDataSets() {
	pdbresidue1 = document.getElementById("pdb1").value;
	pdbresidue2 = document.getElementById("pdb2").value;
	datasets = "";
	datasets += "<input type=\"hidden\" name=\"count\" value=\"" + count + "\">\n";
	if(count == 0) {
		datasets = "(no data sets defined yet)";
		document.getElementById("submit-datasets").disabled = true;
	} else {
		for(i=0; i < count; i++) {
			if(i > 0) {
				datasets += "<hr>\n";
			}
			datasets += "Atoms <span style=\"color:#0000ff\">" + pdbresidue2 + "." + atomname2[i] + "</span> / <span style=\"color:#008000\">" + pdbresidue1 + "." + atomname1[i] + "</span> (" + dist_min[i] + " - " + dist_max[i] + "&Aring;)";
			datasets +=" | <a href=\"javascript:deleteDataset(" + i + ")\"></a><input type=\"button\" value=\"Delete\" onclick=\"javascript:deleteDataset(" + i + ")\"> | <input type=\"button\" value=\"Edit\" onclick=\"javascript:editDataset(" + i + ")\"> |<br>\n";
			if(torsion2a[i] != "" && torsion2a[i] != " " && torsion2a[i] != "none") {
				datasets += "<span style=\"font-size:0.8em; margin-left:5px;\"><span style=\"color:#0000ff;\">Torsion</span> " + torsion2a[i] + ", weighting " + weighting2a[i] + "</span><br>\n";
			}
			if(torsion2b[i] != "" && torsion2b[i] != " " && torsion2b[i] != "none") {
				datasets += "<span style=\"font-size:0.8em; margin-left:5px;\"><span style=\"color:#0000ff;\">Torsion</span> " + torsion2b[i] + ", weighting " + weighting2b[i] + "</span><br>\n";
			}
			if(torsion2c[i] != "" && torsion2c[i] != " " && torsion2c[i] != "none") {
				datasets += "<span style=\"font-size:0.8em; margin-left:5px;\"><span style=\"color:#0000ff;\">Torsion</span> " + torsion2c[i] + ", weighting " + weighting2c[i] + "</span><br>\n";
			}
			if(torsion1a[i] != "" && torsion1a[i] != " " && torsion1a[i] != "none") {
				datasets += "<span style=\"font-size:0.8em; margin-left:5px;\"><span style=\"color:#008000;\">Torsion</span> " + torsion1a[i] + ", weighting " + weighting1a[i] + "</span><br>\n";
			}
			if(torsion1b[i] != "" && torsion1b[i] != " " && torsion1b[i] != "none") {
				datasets += "<span style=\"font-size:0.8em; margin-left:5px;\"><span style=\"color:#008000;\">Torsion</span> " + torsion1b[i] + ", weighting " + weighting1b[i] + "</span><br>\n";
			}
			if(torsion1c[i] != "" && torsion1c[i] != " " && torsion1c[i] != "none") {
				datasets += "<span style=\"font-size:0.8em; margin-left:5px;\"><span style=\"color:#008000;\">Torsion</span> " + torsion1c[i] + ", weighting " + weighting1c[i] + "</span><br>\n";
			}
		}
		for(i=0; i < count; i++) {
			datasets += "<input type=\"hidden\" name=\"atomname1[" + i + "]\" value=\"" + atomname1[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"atomname2[" + i + "]\" value=\"" + atomname2[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"atomnum1[" + i + "]\" value=\"" + atomnum1[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"atomnum2[" + i + "]\" value=\"" + atomnum2[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"dist_min[" + i + "]\" value=\"" + dist_min[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"dist_max[" + i + "]\" value=\"" + dist_max[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"torsions1a[" + i + "]\" value=\"" + torsion1a[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"torsions1b[" + i + "]\" value=\"" + torsion1b[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"torsions1c[" + i + "]\" value=\"" + torsion1c[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"torsions2a[" + i + "]\" value=\"" + torsion2a[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"torsions2b[" + i + "]\" value=\"" + torsion2b[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"torsions2c[" + i + "]\" value=\"" + torsion2c[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"weighting1a[" + i + "]\" value=\"" + weighting1a[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"weighting1b[" + i + "]\" value=\"" + weighting1b[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"weighting1c[" + i + "]\" value=\"" + weighting1c[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"weighting2a[" + i + "]\" value=\"" + weighting2a[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"weighting2b[" + i + "]\" value=\"" + weighting2b[i] + "\">\n";
			datasets += "<input type=\"hidden\" name=\"weighting2c[" + i + "]\" value=\"" + weighting2c[i] + "\">\n";
		}
		datasets += "<input type=\"hidden\" name=\"pdbresidue1\" value=\"" + pdbresidue1 + "\">\n";
		datasets += "<input type=\"hidden\" name=\"pdbresidue2\" value=\"" + pdbresidue2 + "\">\n";
		document.getElementById("submit-datasets").disabled = false;
	}
	document.getElementById("distmap-datasets").innerHTML = datasets;
}

function deleteDataset(num) {
	//*** remove data position #num from arrays: ***
	atomname1.splice(num, 1);
	atomname2.splice(num, 1);
	atomnum1.splice(num, 1);
	atomnum2.splice(num, 1);
	dist_min.splice(num, 1);
	dist_max.splice(num, 1);
	torsion1a.splice(num, 1);
	weighting1a.splice(num, 1);
	torsion1b.splice(num, 1);
	weighting1b.splice(num, 1);
	torsion1c.splice(num, 1);
	weighting1c.splice(num, 1);
	torsion2a.splice(num, 1);
	weighting2a.splice(num, 1);
	torsion2b.splice(num, 1);
	weighting2b.splice(num, 1);
	torsion2c.splice(num, 1);
	weighting2c.splice(num, 1);
	count--;
	
	//*** update display: ***
	writeDataSets();
}

function editDataset(num) {
	//*** copy dataset #num to input form: ***

	SetAtomsAndTorsions(1, atomnum1[num]);
	tempArr = weighting1a[num].split(",");
	document.atomsform.wgt1a1.value = tempArr[0];
	document.atomsform.wgt1a2.value = tempArr[1];
	document.atomsform.wgt1a3.value = tempArr[2];
	tempArr = weighting1b[num].split(",");
	document.atomsform.wgt1b1.value = tempArr[0];
	document.atomsform.wgt1b2.value = tempArr[1];
	document.atomsform.wgt1b3.value = tempArr[2];
	tempArr = weighting1c[num].split(",");
	document.atomsform.wgt1c1.value = tempArr[0];
	document.atomsform.wgt1c2.value = tempArr[1];
	document.atomsform.wgt1c3.value = tempArr[2];

	SetAtomsAndTorsions(2, atomnum2[num]);
	tempArr = weighting2a[num].split(",");
	document.atomsform.wgt2a1.value = tempArr[0];
	document.atomsform.wgt2a2.value = tempArr[1];
	document.atomsform.wgt2a3.value = tempArr[2];
	tempArr = weighting2b[num].split(",");
	document.atomsform.wgt2b1.value = tempArr[0];
	document.atomsform.wgt2b2.value = tempArr[1];
	document.atomsform.wgt2b3.value = tempArr[2];
	tempArr = weighting2c[num].split(",");
	document.atomsform.wgt2c1.value = tempArr[0];
	document.atomsform.wgt2c2.value = tempArr[1];
	document.atomsform.wgt2c3.value = tempArr[2];
	document.atomsform.min.value = dist_min[num];
	document.atomsform.max.value = dist_max[num];

	//*** remove dataset #num from list: ***

	deleteDataset(num);
}

function AddData(){
	sp;
	if(count > max_datasets) {
		alert("Only " + max_datasets + " datasets are allowed.");
		return;
	}
	check = CheckInput();
	if(check && document.atomsform.atomlist1.options.selectedIndex !=0 && document.atomsform.atomlist2.options.selectedIndex !=0) {
		atomname1[count] = document.atomsform.atomlist1.options[document.atomsform.atomlist1.options.selectedIndex].text;
		atomnum1[count] = document.atomsform.nr1.value;
		atomname2[count] = document.atomsform.atomlist2.options[document.atomsform.atomlist2.options.selectedIndex].text;
		atomnum2[count] = document.atomsform.nr2.value;
		dist_min[count] = document.atomsform.min.value;
		dist_max[count] = document.atomsform.max.value;
		torsion1a[count] = document.atomsform.torsion1a.value;
		torsion1b[count] = document.atomsform.torsion1b.value;
		torsion1c[count] = document.atomsform.torsion1c.value;
		torsion2a[count] = document.atomsform.torsion2a.value;
		torsion2b[count] = document.atomsform.torsion2b.value;
		torsion2c[count] = document.atomsform.torsion2c.value;
		weighting1a[count] = document.atomsform.wgt1a1.value + "," + document.atomsform.wgt1a2.value + "," + document.atomsform.wgt1a3.value;
		weighting1b[count] = document.atomsform.wgt1b1.value + "," + document.atomsform.wgt1b2.value + "," + document.atomsform.wgt1b3.value;
		weighting1c[count] = document.atomsform.wgt1c1.value + "," + document.atomsform.wgt1c2.value + "," + document.atomsform.wgt1c3.value;
		weighting2a[count] = document.atomsform.wgt2a1.value + "," + document.atomsform.wgt2a2.value + "," + document.atomsform.wgt2a3.value;
		weighting2b[count] = document.atomsform.wgt2b1.value + "," + document.atomsform.wgt2b2.value + "," + document.atomsform.wgt2b3.value;
		weighting2c[count] = document.atomsform.wgt2c1.value + "," + document.atomsform.wgt2c2.value + "," + document.atomsform.wgt2c3.value;
		count++;
		writeDataSets();
		document.atomsform.reset();
	}
}


