// debug through # 7

// For FGiJ, all function names prefixed with XX pending discovery of
// which are needed. Those without XX are needed.

var conditional_debug = false;
var debugScriptsBeforeExpanding = false;
var debugScriptsAfterExpanding = false;

var maxGrades;

var chainCheckboxPrefix = "chain_";

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function show_cs_run_info()
{
	window.open("runinfo.htm");
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// this is needed so runinfo can open the download doc, with the latter
// having the FG session as opener, to fetch the PDB filename.

function show_download_info(tname)
{
	window.open("downld" + tname+ ".htm");
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// RESET BUTTON CALLS THIS
function confirm_reset_consurf() // resetConsurf()
{
	// restore to initial or other selected display

	var amsg = "Reset View to " + serverName;

	if (consurfMode || selectonMode)
		amsg += " Display #" +
		top.consurf_isd_mode_number;
	else // pepsurfMode, epitopiaMode
		amsg += " initial display";

	amsg += "\n with default orientation and zoom?";

	if (getHiddenTot() > 0)
		amsg += "\n (Hidden portions will remain hidden.)";

	if (toFind != "")
		amsg += "\n (Halos will remain.)";

	if (!confirm(amsg))
		return;

	contactsShowing = false;
	markContactsTargets = false;
	resetPrepConsurf(); // keeps hidden and halos
//	currentView = "consurfSpt"; ??
	centerMode = false;

//	var spt = consurfSpt + makeEchoSpt("")
//		+ clearBoxes() // axes, unitcell, boundbox
//		+ makeEchoPdbIdSpt(""); // blank parameter means get color from toggle

	reset_to_mode(true);

// These are done by reset_to_mode
//	clear_cssf_grades(true);
//	showHelp("makeConsurfHelp()"); // refresh checkboxes
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function reset_to_mode(real_reset)
{
	if (pepsurfMode)
	{
		reset_pepsurf(real_reset);
	}
	else if (epitopiaMode)
		resetEpitopiaView(real_reset);
	else // consurfMode, selectonMode, epitopiaMode?
	{
		currentView = "make_reset_to_mode_spt(false)";

		if (top.consurf_isd_mode == "isd")
			reset_consurf(real_reset); // unconditional
		else
			reset_isd_hidden(real_reset);
	}

	clear_cssf_grades(true);
	showHelp("makeConsurfHelp()"); // refresh checkboxes
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_reset_to_mode_spt(real_reset) // for use in FG control panel
{
	var rspt;
// NOT USED FOR PEPSURF
//	if (pepsurfMode)
//	{
//		rspt = make_reset_pepsurf_spt(real_reset);
//	}
//	else // consurfMode
//	{

		if (top.consurf_isd_mode == "isd" || epitopiaMode)
			rspt = make_reset_consurf_spt(real_reset);
		else
			rspt = make_reset_isd_hidden_spt(real_reset);

//	}

	rspt = deleteLinesContaining("javascript", rspt);
	return (rspt);
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// see also reset_frontispiece in pipe_sup/present.js, called by Reset button.
// real_reset==true means also reset zoom and orientation.
function make_reset_consurf_spt(real_reset) // unconditional vs. confirm_reset_consurf()
{
	var rspt = "";

	if (real_reset)
		rspt += "reset\nzoom 100\n";

	var postspt = "select hetero and not water\n" +
		"dots 50\n";

	var selc = make_chain_select_cmd();

	rspt += make_for_spt(selc);
	rspt += postspt;

	rspt = "#r reset_consurf (block begin)\n" + rspt +
		"#r reset_consurf (block end)\n";

	if (!expand_spts(rspt)) // generates error alert if no such @spt sptname
		return "";
	rspt = spt_expanded;

	return(rspt);

	top.clear_cssf_grades(true);
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// real_reset==true means also reset zoom and orientation.
function make_reset_pepsurf_spt(real_reset) // unconditional vs. confirm_reset_consurf()
{
	var rspt = "";

	if (real_reset)
		rspt += "reset\n"; // also resets zoom to 100 in jmol

	rspt +=
"select all\n\
color opaque\n\
@spt view01\n\
";

	return(rspt);

//	top.clear_cssf_grades(true); // redundant
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// see also reset_frontispiece in pipe_sup/present.js, called by Reset button.
// real_reset==true means also reset zoom and orientation.
function reset_consurf(real_reset) // unconditional vs. confirm_reset_consurf()
{
	var rspt = make_reset_consurf_spt(real_reset);

	do_spt(rspt);
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// real_reset==true means also reset zoom and orientation.
function reset_pepsurf(real_reset)
{
	var rspt = "";

	// cssf_grade array already cleared

	// clear translucence
// don't need this because it will be grayed out!
//	document.cgrades.togtrans.checked = false;
	translucentMode = false;

	// clear alignment display
	pepsurf_alignment_shown = -1;
	document.cgrades.alignlabel[0].checked = true;
	rspt += make_alignment_echo_spt(-1);

	// clear cluster echo list
	rspt += make_cluster_echo_spt(0); // in reset_pepsurf; 0 means clear the echo		

	// no cluster is centered
	currently_centered_cluster = 0;

	rspt += make_reset_pepsurf_spt(real_reset);
	if (real_reset)
		pepsurf_cluster_zoomed = false;

	do_spt(rspt);

// done by calling function:
//	showHelp("makeConsurfHelp()"); // refresh checkboxes
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function do_spt(spt)
{
		if (debugScriptsBeforeExpanding)
			showSptInWindow("main_cs.js #2: do_spt() before expanded:", spt);

		if (!expand_spts(spt)) // generates error alert if no such @spt sptname
			return;
		// spt_expanded now contains expanded script!

		if (debugScriptsAfterExpanding)
			showSptInWindow("main_cs.js #3: do_spt() after expanded:", spt_expanded);

//		if (conditional_debug)
//			alert("main_cs.js #6: expand_spts() done in do_spt()");
		doMolViewSpt(fixSpt(spt_expanded)); // in do_spt()
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_select_checked()
{
	var clet, ci, cchecked;

		var selc = "";
		var selctot = 0;

		// CONSTRUCT LIST OF CHECKED CHAINS IN selc (:A,:B,...)
		for (ci = 0; ci < Ctot; ci++)
		{
			clet = Clist.charAt(ci);

			cchecked = "document.cgrades." + 
				chainCheckboxPrefix + clet + ".checked"; // helpDiv unnec!
//			alert("main_cs.js #4:\n" + cchecked);
			cchecked = eval(cchecked); // exec: object expected
//			alert("main_cs.js #4A:\n" + cchecked);

			if (cchecked) // this chain is checked
			{
				// to maintain state during a Bkg color change/reload
				top.consurf_chain_checkbox[ci] = true; 

				if (selc.length > 0) // already have a chain
					selc += ",";
				selc += ":" + Clist.charAt(ci); // :A
				selctot++;
			}
			else
			{
				// to maintain state during a Bkg color change/reload
				top.consurf_chain_checkbox[ci] = false; 
			}
		}

		if (selc.length > 0)
			selc = "select selected and (" + selc + ")\n";
		else
			selc = "select none\n";

	return selc;
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_for_spt(selc)
{
	var startGrade = 0;
	if (epitopiaMode)
		startGrade = 1;

	var selectcmd = "@spt select_isd_grade$\n";
//	if (!top.show_isd)
	if (top.consurf_isd_mode != "isd")
		selectcmd = "@spt select_grade$\n";

		var spt = "@spt common_spt\n" +
			"@for $=" + startGrade + ", " + maxGrades + "\n" +
			selectcmd +
			selc + // select chain(s)
			"color @color_grade$\n" +
			"dots off\n" +
			"spacefill\n" +
			"@endfor\n";
	return spt;
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_select_all_id_chains()
{
	var ci;
	var selc = "";

	// CONSTRUCT LIST OF CHECKED CHAINS IN selc (:A,:B,...)
	for (ci = 0; ci < Ctot; ci++)
	{
		if (selc.length > 0) // already have a chain
			selc += ",";
		selc += ":" + Clist.charAt(ci); // :A
	}

	if (selc.length > 0)
		selc = "select selected and (" + selc + ")\n";
	else
		selc = "select none\n";

	return selc;
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_reset_isd_hidden_spt(real_reset)
{
	var isd_freq = top.consurf_grade_freqs_isd[0];
	if (isd_freq == 0)
	{
		alert("No amino acids have insufficient data.");
		return;
	}

	var spt = "";
	if (real_reset)
		spt += "reset\nzoom 100\n";
	var csel = make_chain_select_cmd();

	// PSEUDO SCRIPT
	// make_isd_color_spt():
	//		backbone all chains
	//		color job chains by isd or not
	// spacefill isd residues
	// top.cssf_grade[0] = true;

	// SMALL SPACEFILL + YELLOW DOTS:
	//   MAKE YELLOW DOTS FIRST
// Jmol: save your breath, dots have to be made later due to later "restrict".
// They are made in doMolViewSpt();
//	if (top.consurf_isd_mode == "dotssf")
//		spt += "@spt select_isd_grade0\n" +
//			csel + // select selected or chain(s)
//			"color [xc0c000]\n" +
//			"dots 100\n";

	// BACKBONE ALL CHAINS
	spt += "select protein\n" +
		"cartoon false\n" +
		"spacefill false\n" +
		"backbone 0.4\n";

	// COLOR BY CURRENT ISD MODE
	spt += make_isd_color_spt(); // sets top.show_isd from checkbox

	// SPACEFILL
	if (top.consurf_isd_mode == "sf")
		spt += "select all\n" +
			csel + // select selected or chain(s)
			"spacefill\n";
// save your breath (see above)
//			"select hetero and not water\n" +
//			"dots 50\n";

	// DOTS
	else if (top.consurf_isd_mode == "dots")
		spt += "@spt select_isd_grade0\n" +
			csel + // select selected or chain(s)
			"define ~consurf_isd_grade0 selected\n" +
//			"dots 300\n" + // save your breath; see above
			"select not selected\n" +
			csel + // select selected or chain(s)
			"spacefill\n";

	// SMALL SPACEFILL + YELLOW DOTS
	//   YELLOW DOTS MADE ABOVE: ADD SMALL SPHERES
	else if (top.consurf_isd_mode == "dotssf")
		spt += "@spt select_isd_grade0\n" +
			csel + // select selected or chain(s)
			"define ~consurf_isd_grade0 selected\n" +
			"spacefill 1.0\n" +
			"select not selected\n" + // SPACEFILL NON-ISD TO FULL VDW
			csel + // select selected or chain(s)
			"spacefill\n";

//	top.alertlong(spt);

	spt = "#r consurf reset_isd_hidden (block begin)\n" + spt +
				"#r consurf reset_isd_hidden (block end)\n";

//	alert("main_cs.js #5: make_reset_isd_hidden_spt() generates spt:\n" + spt);

	if (!expand_spts(spt)) // generates error alert if no such @spt sptname
		return "";
	spt = spt_expanded;

//	alert("main_cs.js #5a: expand_spts() done.");
//	conditional_debug = true;

	return(spt);

	top.clear_cssf_grades(true);
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function reset_isd_hidden(real_reset)
{
	var spt = make_reset_isd_hidden_spt(real_reset);

	do_spt(spt); // does expand_spts()
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_isd_color_spt()
{
//	alert("main_cs.js #7 make_isd_color_spt() called");

	var cspt = "";

	// color job chains by isd mode
	var csel = make_chain_select_cmd();

	// make cartoon, backbone follow these colors
	cspt +=
"select ~protein, nucleic;\n"
+ csel +
"color cartoon none;\n\
color backbone none;\n\
";

	// which select grade scripts are we using?
	var sisd = "";
//	if (top.show_isd)
	if (top.consurf_isd_mode == "isd")
		sisd = "_isd";

	cspt += "@for $=0, " + maxGrades + "\n" +
		"@spt select" + sisd + "_grade$\n" +
		csel + // select chain(s)
		"color @color_grade$\n" +
		"@endfor\n";

	return(cspt);  // do_spt() does expand_spts()
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function XXshow_isd_mode_controls()
{
	var isd_freq = top.consurf_grade_freqs_isd[0];
	if (isd_freq == 0)
	{
		alert("No amino acids have insufficient data.");
		return;
	}

//	if (!top.show_isd)
//	{

		top.unconditional_msgs_off = 1;

		if (top.only_isd_data)
			top.fr_control.fr_control2.document.location.replace("isd_only.htm");
		else
			top.fr_control.fr_control2.document.location.replace("isd_mode.htm");

//	}
//	else
//	{
//		var mdoc = top.fr_control.fr_control2.document.location.href;
//		if (mdoc.indexOf("isd_mode.htm") != -1)
//			top.fr_control.fr_control2.document.location.replace("../../shared/cmd2way2.htm");
//	}

}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function makeConsurfColorsSpt()
{
	if (consurfMode || selectonMode)
		return verify_expand_spts(make_isd_color_spt());	
	else if (epitopiaMode)
		alert("main_cs.js need makeConsurfColorsSpt()");
	else // pepsurfMode
	{
		var spt = "# BEGIN pepsurf_colors\n" +
// Coloring the non-cluster chain(s) does not work well in FGiJ, e.g.
// Contacts. Like ConSurf, color only the relevant chain(s).
//			"@spt color_molecule_default\n" +
			"@spt pepsurf_colors\n" +
			"# END pepsurf_colors\n";

		return verify_expand_spts(spt);
	}
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function resetEpitopiaView(real_reset)
{
		var epspt = "";

		if (real_reset)
			epspt += "reset\nzoom 100\n";

		epspt += makeConsurfViewSpt();
		currentView = "makeConsurfViewSpt()";

		doMolViewSpt(epspt);

		// DONE BY CALLING FUNCTION
		//showHelp("makeConsurfHelp()");
		//clear_cssf_grades(true);
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

