// debug alerts through # 7

var previous_chain_select_cmd = "@spt select_and_chain;\n";

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//ConSurf Color Key

var isd_color;

// MOVED to pipe.js setup_pipe2()
//isd_color = get_colorvalue("color_grade0");
//	if (isd_color == "FFFF96") // ConSurf default
//		isd_color = "C0C000"; // darker shade better for dots
//alert("cs_key.js #1 isd_color = " + isd_color);


function cs_key(n)
{
	var csel = make_chain_select_cmd();

//	alert("cs_key.js #2 entering cs_key()" +
//		"\n grade = " + n +
//		"\n top.cssf_grade = " + top.cssf_grade[n]);

	// DETECT CASES WITH ZERO AAs TO WORK ON: ALERT, RETURN
	if (n == 0)
	{
		if (top.consurf_grade_freqs_isd[0] == 0)
		{
			alert("No amino acids have insufficient data.");
			return;
		}
	}
	else if (top.consurf_isd_mode == "isd" &&
		top.consurf_grade_freqs_isd[n] == 0) // excluding isd
	{
		alert("No amino acids have this conservation grade.");
		return;
	}
	else if (top.consurf_isd_mode != "isd" &&
		top.consurf_grade_freqs[n] == 0) // including isd
	{
		alert("No amino acids have this conservation grade.");
		return;
	}
	// -------------------------
	// WE HAVE SOME AAs (>0) TO WORK ON.

	var spt = "";

	if (!epitopiaMode)
	{
		// GUARANTEE THAT isd IS DEFINED
		spt = "@spt select_isd_grade0\n" +
				csel +
				"define isd selected\n";
	}

//	var sptPrefix = spt;

	// SELECT AAs OF SPECIFIED CONSERVATION GRADE.
	if (!epitopiaMode)
		spt += "@spt select_isd_grade" + n + ";\n";
//	if (!top.show_isd)
	if (top.consurf_isd_mode != "isd" && n != 0)
		spt +=  "@spt select_grade" + n + ";\n";

	// SELECT CHAINS FOR GRADED AAs.
	spt += csel;

	// defined set isd is not used by PE. It is provided for the convenience
	// of advanced users who wish to use it in manually entered commmands.
	if (n == 0)
		spt += "define isd selected\n";

	// RENDER BY ISD MODE
	var mode = top.consurf_isd_mode;

	// ------------------------------------------------
	// GRADE ZERO
	if (n == 0 && (mode == "dotssf" || mode == "dots"))
	{
		if (top.cssf_grade[n]) // showing, so HIDE them
		{
			spt += "spacefill false\n" +
				"dots off\n";
			top.cssf_grade[n] = false;
		}
		else // hidden, so SHOW them
		{
			if (mode == "dots")
				spt += "dots 300\n";

			else // mode == "dotssf")
			{
// OLD METHOD COLORING DOTS BY ATOM COLOR
//				spt = sptPrefix; // start over with grade 0 selected
//				spt += "color [x" + isd_color + "]\n" +
//					"dots 100\n" +
//					make_isd_color_spt() +
//					"@spt select_isd_grade0\n" +
//					csel +
//					"spacefill 1.0\n";

				// color all dots yellow, precluding ligand dots
//				alert("cs_key.js #6: isd_color = " + isd_color);
				spt += "dots 100\n" +
					"color dots [x" + isd_color + "]\n" +
					"spacefill 1.0\n";
			}

			top.cssf_grade[n] = true;
		}
	}
	// -----------------------------------------------
	// GRADES 1 2 3 4 5 6 7 8 9
	else if (n > 0 && (mode == "dotssf" || mode == "dots"))
	{
		if (top.cssf_grade[n]) // showing, so HIDE spacefill
		{
			spt += "spacefill false\n" +
				"dots off\n";
			top.cssf_grade[n] = false;

			// restore dots for still-showing isd
			if (true) // top.cssf_grade[0])
			{
				if (mode == "dots")
				{
					spt += make_select_shown() +
						"select selected and isd\n" +
						"dots 300\n";
				}
				else
				{
					spt += make_select_shown() +
						"select selected and isd\n" +
						"dots 100\n" +
						"color dots [x" + isd_color + "]\n" +
						"spacefill 1.0\n";
				}
			}
		}
		else // hidden, so SHOW them
		{
			if (mode == "dots")
			{
				// show only the non-isd as spacefill
				spt += "select selected and not isd\n" +
					"spacefill\n";
				top.cssf_grade[n] = true;

				// show dots for all visible-state isd
				if (true) // top.cssf_grade[0])
				{
					spt += make_select_shown() +
						"select selected and isd\n" +
						"dots 300\n";
				}
			}

			else if (mode == "dotssf")
			{
				spt += "spacefill\n"; // all residues at grade n, isd or not

				top.cssf_grade[n] = true;

				// show dots for all visible-state isd
				if (true) // top.cssf_grade[0])
				{
					spt += make_select_shown() +
						"select selected and isd\n" +
						"dots 100\n" +
						"color dots [x" + isd_color + "]\n" +
						"spacefill 1.0\n";
				}
			}
		}
	}
	// ------------------------------------------------
	else // isd or sf
	{
		if (top.cssf_grade[n]) // showing, so hide them
		{
			spt += "spacefill false;\n";
			top.cssf_grade[n] = false;
		}
		else // hidden, so show them
		{
			spt += "spacefill;\n";
			top.cssf_grade[n] = true;
		}
	}
	// ------------------------------------------------

	spt = "#r consurf grade toggle (block begin);\n" + spt +
				"#r consurf grade toggle (block end);\n";

//	top.show_in_debugwin("cs_key.js #5", spt);
//	alert("cs_key.js #5\n" + spt);

	do_spt(spt);
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
	// There are 3 cases:
	// a. One unique chain.
	// b. 2-6 identical chains with individual checkboxes.
	// c. >6 identical chains with a single "all identical chains" checkbox.

function make_chain_select_cmd()
{
	if (epitopiaMode)
		return "";

	// if no checkboxes, don't look for them!
	if (controlPanel != "consurf")
		return previous_chain_select_cmd;

	var spt = "";

	if (Ctot == 1)
		spt += "@spt select_and_chain;\n";

	else if (Ctot >= 2 && Ctot <= top.ckboxmax)
		spt += make_select_checked();

	else // Ctot > top.ckboxmax
	{
		if (document.cgrades.id_chains.checked)
		{
			spt += make_select_all_id_chains();

			// to maintain state during a Bkg color change/reload
			top.consurf_chain_checkbox[0] = true; 
		}
		else
		{
			spt += "@spt select_and_chain;\n";

			// to maintain state during a Bkg color change/reload
			top.consurf_chain_checkbox[0] = false; 
		}
	}
	previous_chain_select_cmd = spt;
	return spt;
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_consurf_view_button_spt(mode)
{
	var csv = make_sf(mode);
	return (verify_expand_spts(csv));
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// not used by pepsurf
function make_sf(mode) // mode: none | cartoon | all
{
	var s = "";

	if (top.consurf_isd_mode != "isd" && mode == "all" && !epitopiaMode)
	{
		reset_isd_hidden(false); // false = do not reset orientation/zoom
		return;
	}

	// BACKBONE OR CARTOON (NO EFFECT ON CURRENTLY SPACEFILLED)
	if (mode == "cartoon")
		s += "select protein; backbone false; dots false; cartoon;\n";
	else // none | all
		s += "select protein; cartoon false; dots false; backbone 0.4;\n";

	// SELECT CHAIN(S)
	if (!epitopiaMode) // for Epitopia, +/-spacefill all protein
		s += make_chain_select_cmd();

	// SPACEFILL +/- FALSE
	s += "spacefill"; // line to be continued below

	if (mode == "none" || mode == "cartoon")
	{
		s += " false";
		top.clear_cssf_grades(false);
	}
	else // all
		top.clear_cssf_grades(true);

	s += "\n";

	var reccom = "#r consurf sf " + mode + " ";
	s = reccom + "(block begin)\n" + s + reccom + "(block end)\n";

//	alert("cs_key.js #7 make_sf() returns:\n" + s);

	return s;
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function sf(mode)
{
	do_spt(make_sf(mode));
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function get_colorvalue(coname)
{
	var coval = "";
	for (var i = 1; i <= top.pipe_colors_total; i++)
		if (top.pipe_color_name[i] == coname)
			coval = top.pipe_color_value[i];
	return(coval);
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function make_select_shown()
{
	var spt = "select none\n";
	for (var i = 0; i <= maxGrades; i++)
	{
		if (top.cssf_grade[i])
			spt += "@spt select_grade" + i + "\n";
	}
	expand_spts(spt);
	spt = spt_expanded;
//	alert("cs_key.js #3:\n" + spt);

	var isel;	
	var sels;
	while((isel = spt.indexOf("select  ")) != -1) // two spaces!!
	{
		spt = spt.substring(0, isel + 7) + "selected or" + spt.substring(isel + 7);
	}
//	alert("cs_key.js #4:\n" + spt);

	return (spt);
}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
function ps_key(n)
{
	var spt = "";

//	alert("cs_key.js #2 entering cs_key()" +
//		"\n grade = " + n +
//		"\n top.cssf_grade = " + top.cssf_grade[n]);

	cssf_grade[n] = !cssf_grade[n];
	reDisplay("", "");
}

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
