
function add_elem(select_box, actual_box){

	document.getElementById(actual_box).style.display='';
	var tbody = document.getElementById(actual_box).getElementsByTagName("TBODY")[0];

	var th = document.getElementById(actual_box).getElementsByTagName("TH");

	var str_cmp = list_actual_box_elem(actual_box);



	for (var i=0, l=select_box.options.length; i<l; i++) {
        	if (select_box.options[i].selected){
		    
		    if(str_cmp.match("!"+select_box.options[i].value+"!")){

		    }else{			
			    var row = document.createElement("TR");
			    var td1 = document.createElement("TD");
			    td1.innerHTML = "<input type='checkbox' name='cb_" + actual_box + "' value=" + select_box.options[i].value+ " onClick = 'javascript:remove();'> " + select_box.options[i].text;

			    var td2 = document.createElement("TD");

			    row.appendChild(td1);
			    row.appendChild(td2);
			    tbody.appendChild(row);
		   }
		} 
	}
}




// When text is used as links to delete in selection box
//  use this remove function

function remove_entry(row_id, table_id){
	var table = document.getElementById(table_id);
	var allrows = document.getElementById(table_id).getElementsByTagName("TBODY")[0].getElementsByTagName("TR");

	for (var i=allrows.length-1; i>=0; i--) {
		var cells = allrows[i].getElementsByTagName("TD");
		for (var c=0; c<cells.length; c++) {
			if(cells[c].innerHTML.match(row_id)){
				table.deleteRow(i);
				format_total_num_results(table_id, "subtract");
			}
		}
	}
}

// When checkboxes are used as links to delete in selection box
//  use this remove function

function remove(){


	var alltables = document.getElementsByTagName("TABLE")
	
	for(var t = 0; t<alltables.length; t++){
		if(alltables[t].className == "results"){
			var allrows = alltables[t].getElementsByTagName("TBODY")[0].getElementsByTagName("TR");

			for (var i=allrows.length-1; i>=0; i--) {
				var cells = allrows[i].getElementsByTagName("TD");

				for (var c=0; c<cells.length; c++) {

					var cbox = cells[c].getElementsByTagName("input");
					if(cbox.length > 0 && cbox[0].checked){
						alltables[t].deleteRow(i);
					}


				}
	
			}
		}
	}


}

function list_actual_box_elem(actual_box){
// create a string of all the elements in the actual box, used to ensure we don't add the same element multiple times


 	var cb=document.getElementsByName("cb_" + actual_box);
	var str = "";

	for (var i=(cb.length-1); i>=0; i--) {
		str = str + "!" + cb[i].value + "!";
    	}
	
	return str;
}



function get_target_name_array(target_array){
	return eval("all_" + target_array + "_name_array");
}

function get_target_val_array(target_array){
	return eval("all_" + target_array + "_val_array");
}


function add_to_old_win(box_name, id, name){

	var actual_box2 = document.getElementById(box_name);


	// USE ONLY ONE OF THE FOLLOWING:

	// Link 
	var str_cmp = list_selected_box_elem(box_name);
	if(str_cmp.match("!"+id+"!")) return;
	actual_box2.style.display='';
	
	var tbody = actual_box2.getElementsByTagName("TBODY")[0];
        var row = document.createElement("TR");
        var td1 = document.createElement("TD");
        var td2 = document.createElement("TD");

	// USE ONLY ONE OF THE FOLLOWING:

	// Link that uses remove_entry() function to get rid of it
	td1.setAttribute("id", box_name + "_row_" + id);


//	td1.innerHTML = "<a href = \"javascript: remove_entry('" + box_name + "_row_" + id + "','" + box_name + "');\"><img class = 'delete_button' src = '/gemina/delete_button.gif' height='10px' width='11px'></a>" + name + "";

	td1.innerHTML = "<a href = \"javascript: remove_entry('" + box_name + "_row_" + id + "','" + box_name + "');\" ><span class = 'remove_term'>X</span> &nbsp;</a>" + name + "";


        row.appendChild(td1);
        row.appendChild(td2);
        tbody.appendChild(row);

	format_total_num_results(box_name, "add");
}


function format_total_num_results(box_name, func_ctrl){
	var num_results = document.getElementById("tab_" + box_name + "_count");
	var myregexp = new RegExp(/\d+/);
	mymatch = myregexp.exec(num_results.innerHTML);

	if(func_ctrl == "add"){
		mymatch[0]++;
	}else{
		mymatch[0]--;
	}
	num_results.innerHTML = "(" + mymatch[0] + ")";

}



function list_actual_cb_box_elem(box_name){
// create a string of all the elements in the actual box, used to ensure we don't add the same element multiple times


 	var cb= document.getElementsByName("cb_" + box_name);
	var str = "";

	for (var i=(cb.length-1); i>=0; i--) {
		str = str + "!" + cb[i].value + "!";
    	}
	
	return str;
}

function list_selected_box_elem(box_name){
// create a string of all the elements in the actual box, used to ensure we don't add the same element multiple times

	var table = document.getElementById(box_name);
	var allrows = document.getElementById(box_name).getElementsByTagName("TBODY")[0].getElementsByTagName("TR");
	var myregexp = new RegExp(/row_(.+?):(\d+)/);
	var str = "";

	for (var i=allrows.length-1; i>=0; i--) {
		var cells = allrows[i].getElementsByTagName("TD");
		for (var c=0; c<cells.length; c++) {
			var mymatch = new Array();
			mymatch = myregexp.exec(cells[c].innerHTML);

			
	
			if(mymatch != null){
				var match_str = mymatch[0].substring(4);
				str = str + "!" + match_str + "!";
			}

		}
	}

 
	return str;
}

function list_selected_box_elem_names(box_name){
// create a string of all the elements in the actual box, used to ensure we don't add the same element multiple times

	var table = document.getElementById(box_name);
	var allrows = document.getElementById(box_name).getElementsByTagName("TBODY")[0].getElementsByTagName("TR");

//	var myregexp = new RegExp(/>.*<\/a>/);
//	var myregexp2 = new RegExp(/.*/);	
	var myregexp = new RegExp(/<\/[aA]>.*/);

	var str = "";

	for (var i=allrows.length-1; i>=0; i--) {
		var cells = allrows[i].getElementsByTagName("TD");
		for (var c=0; c<cells.length; c++) {

			var mymatch = new Array();
			mymatch = myregexp.exec(cells[c].innerHTML);
			if(mymatch != null){
                                var tmp_str = mymatch[0];
                                tmp_str = tmp_str.substring(4, tmp_str.length);
				str = str + "," + tmp_str;
			}
		}
	}

	return str;
}

function alert_user_to_problem(){
	alert("Your search term returned over 50 results.  Please narrow your search criteria or browse the tree for an appropriate term.  The first 50 results are currently highlighted.");
}

function find_selection(type, search_field){
	loadTree(type, search_field.value);
}

function find_selection2(type, search_field){

	document.getElementById(type+"_search_button").innerHTML = "Searching ... ";

	var search_tmp_str = search_field.value;
	var search_str = search_tmp_str.toLowerCase();   
	var tot_results = 0;
	var child_name_list = get_target_name_array(type);
	var child_id_list = get_target_val_array(type);
	var add_list = "";
        var tot_add = 0;
	
	if(search_str){

	    clear_colored_rows();
	    clear_open_rows();

	    for(var i = 0; i < child_name_list.length; i++){

	        var compare_str = child_name_list[i].toLowerCase();
  	        var p_list = child_id_list[i].split("!");

		if(compare_str.match(search_str) != null){ 

		    // add id ensures this id is linkable
		    var add_id = open_one_set(child_id_list, p_list[0]);
		    if(add_id){
                       tot_add++;
		       var name_to_add = child_name_list[i].split(",");
                      
 	               add_list += "add_to_old_win('" + type + "_results_table', '" + add_id + "', '" + name_to_add[0] + "'); ";
                    }
		    tot_results++;	
		    if(tot_results > 49){
                         alert_user_to_problem();
			 set_current_terms_displayed(tot_results, tot_add, add_list, type);
		 	 return;
	            }		    
		}
	        
	    }
	}

	set_current_terms_displayed(tot_results, tot_add, add_list, type);
	
}

function set_current_terms_displayed(tot_results, tot_add, add_list, type, warning){
	var add_s = "s";
	if(tot_results == 1){
		add_s = "";
	}

	document.getElementById(type+"_num_results").innerHTML = "<font class = 'number_results'>" + tot_results + " total result" + add_s + "</font> / ";

	add_s = "s";
	if(tot_add == 1){
		add_s = "";
	}

	if(warning == 1){
		document.getElementById(type+"_num_results").innerHTML += "<font class = 'number_results'>Displaying top <a href = \"javascript:" +  add_list + "\">" + tot_add + " result" + add_s +"</a> associated with data </font>";
	}else if (tot_add == 0) {
		document.getElementById(type+"_num_results").innerHTML += "<font class = 'number_results'> 0 results associated with data </font>";
	}else{
		document.getElementById(type+"_num_results").innerHTML += "<font class = 'number_results'><a href = \"javascript:" +  add_list + "\">" + tot_add + " result" + add_s +"</a> associated with data </font>";
	}


	document.getElementById(type+"_search_button").innerHTML = "Search Tree";
}



function clear_colored_rows(){
    if(colored_rows.length != 0){
	for(var i = colored_rows.length-1; i >= 0; i--){
	    document.getElementById("box_" + colored_rows[i]).style.backgroundColor = "";
	    colored_rows.pop();
	}	     
    }
}

function clear_open_rows(){
    if(open_rows.length != 0){
	for(var i = open_rows.length-1; i >= 0; i--){
	    document.getElementById(open_rows[i]).style.display='none';
	    document.images["i" + open_rows[i]].src = "/gemina/images/plus.png";
	    open_rows.pop();
	}	     
    }
}

function open_one_set(child_id_list, id){
	showAllById(child_id_list, id);
	var elem = document.getElementById("box_"+id);
        elem.style.backgroundColor = "#e6ecf3";
	colored_rows[colored_rows.length] = id+"";

	if(elem.innerHTML.match("add_to_old_win")){
		return id;
	}
	return;
}

function showAllById(child_id_list, test){
	for(var i = 0; i < child_id_list.length; i++){

	    var p_list = child_id_list[i].split("!");
	    if(p_list[0] == test){
	        for(var j = 1; j < p_list.length; j++){
		    show_row(p_list[j]);
		}
	    }
	}

}

function show_row(ident) {
        if(ident == "") return;
    	document.getElementById(ident).style.display='';
	document.images["i" + ident].src = "/gemina/images/minus.png";
	open_rows[open_rows.length] = ident+"";
}


/**
 * Reset any forms if a form exists. It is required to have no 
 * form name set in the html in order for this to work properly.
 */
function resetForm() {
    document.forms[0].reset();
}

/**
* Used to hide/show elements in a html tree /CMR/images/minus.png /CMR/images/plus.png
*/



function hideShow(ident, id) {
    if (document.getElementById(ident).style.display=='none') {
    	document.getElementById(ident).style.display='';
		document.getElementById('box_' + ident).className = "has_children_open";
    } 
    else {
		document.getElementById(ident).style.display='none';
		document.getElementById('box_' + ident).className = "has_children";
    }
}

function hideShowElem(ident) {
    
    if (document.getElementById(ident).style.display=='none') {
    	document.getElementById(ident).style.display='';
    } 
    else {
	document.getElementById(ident).style.display='none';
    }
}


function hideIdent(ident) {

	document.getElementById(ident).style.display='none';
	document.images["i" + ident].src = "/gemina/images/plus.png";

}


function hideAllByClass(classname) {
    var alltags=document.all? document.all : document.getElementsByTagName("*")

    for (i=0; i<alltags.length; i++){
	if (alltags[i].className==classname){
		alltags[i].style.display='none';
		document.images["i" + alltags[i].id].src = "/gemina/images/plus.png";
	}

	if (alltags[i].tagName == "td"){
	    alltags[i].style.backgroundColor = "";
	}
    }
 


}

function unHighlightByTag(){
    var alltags=document.all? document.all : document.getElementsByTagName("td");
    
    for (i=0; i<alltags.length; i++){
	alltags[i].style.backgroundColor = "";
    }
}


function hideShow_query_div(ident,txt) {
 
    if (document.getElementById(ident).style.display=='none') {
    	document.getElementById(ident).style.display='';
    	document.getElementById(txt).innerHTML='Hide';
    } 
    else {
	document.getElementById(ident).style.display='none';
    	document.getElementById(txt).innerHTML='View';
    }
}


function switch_mode (tbl_id, path_name, path_id){
	var table = document.getElementById(tbl_id);
	for (var x=0; x<table.rows.length; x++) {

        	var row_info = table.rows[x].cells[0].innerHTML;
                if(row_info.match(path_id)){
			var add_flag = "add";
                        if(row_info.match('red_button')){	
		                row_info = row_info.replace(/red_button/,'green_button');
				table.rows[x].style.backgroundColor = "#c6d3e6"; 
			}else{
				add_flag = "remove";
	                        row_info = row_info.replace(/green_button/,'red_button');
//				table.rows[x].style.backgroundColor = "#e6ecf3"; 
				table.rows[x].style.backgroundColor = "#eeeeee"; 
			}
			add_to_path_table(tbl_id, path_name, path_id, add_flag);
			table.rows[x].cells[0].innerHTML = row_info;
			
		}

	}


}

function switch_on(tbl_id){

	var debug = getDebugDiv();


	// replace all with on buttons
	table = document.getElementById(tbl_id);
	for (var x=1; x<table.rows.length; x++) {
               	var row_info = table.rows[x].cells[0].innerHTML;	
                row_info = row_info.replace(/red_button/,'green_button');
		table.rows[x].cells[0].innerHTML = row_info;
	        if (row_info.match('green_button')){
			table.rows[x].style.backgroundColor = "#c6d3e6"; 
		}
	}


	// clear table	
	var table = document.getElementById("selected_path");
	for (var x = table.rows.length-1; x>0; x--) {
		table.deleteRow(x);
	}	


	// load into selected div
	for(var j = 0; j < path_val_array.length; j++){
		var tbody = table.getElementsByTagName("TBODY")[0];
        	var row = document.createElement("TR");
	        var td1 = document.createElement("TD");

		// Link that uses remove_entry() function to get rid of it
        	td1.innerHTML = "<a href = \"javascript:switch_mode ('" + tbl_id + "','" + path_name_array[j] + "','" + path_val_array[j] + "');\">" +  path_name_array[j] + "</a>";
	        row.appendChild(td1);
        	tbody.appendChild(row);
	}

	document.getElementById('selected_path_num').innerHTML = (table.rows.length - 1);

	if(table.rows.length > 1){
		document.getElementById('view_selected_path').style.display = "";
	}else{
		document.getElementById('view_selected_path').style.display = "none";
		document.getElementById('test_div').style.display = "none";
		document.selected_path_submit.taxid.value = "";
		document.selected_path_gmaps_submit.taxid.value = "";
	}


	// set hidden string
	document.selected_path_submit.taxid.value = document.selected_path_submit.allpathlist.value;
	
	if (!(typeof document.getElementById('selected_path_gmaps_submit') === 'undefined')) {
		document.selected_path_gmaps_submit.taxid.value = document.selected_path_submit.allpathlist.value;
		document.getElementById('selected_link_gmaps').style.display = "";
		document.getElementById('selected_no_link_gmaps').style.display = "none";
	}
	document.getElementById('selected_link').style.display = "";
	//document.getElementById('selected_link_gmaps').style.display = "";
	document.getElementById('selected_no_link').style.display = "none";
	//document.getElementById('selected_no_link_gmaps').style.display = "none";
}


function switch_off (tbl_id){
	var debug = getDebugDiv();


	// replace all with off buttons
	table = document.getElementById(tbl_id);
	for (var x=1; x<table.rows.length; x++) {
               	var row_info = table.rows[x].cells[0].innerHTML;	
                row_info = row_info.replace(/green_button/,'red_button');
		table.rows[x].cells[0].innerHTML = row_info;
		table.rows[x].style.backgroundColor = "#FFFFFF";
	        if (row_info.match('red_button')){
//			table.rows[x].style.backgroundColor = "#e6ecf3" 
			table.rows[x].style.backgroundColor = "#eeeeee" 
		}
	}


	// clear table	
	var table = document.getElementById("selected_path");
	for (var x = table.rows.length-1; x>0; x--) {
		table.deleteRow(x);
	}	


	document.getElementById('selected_path_num').innerHTML = (table.rows.length - 1);

	document.getElementById('view_selected_path').style.display = "none";
	document.getElementById('test_div').style.display = "none";
	document.selected_path_submit.taxid.value = "";
	if (!(typeof document.getElementById('selected_path_gmaps_submit') === 'undefined')) {
		document.selected_path_gmaps_submit.taxid.value = "";
		document.getElementById('selected_link_gmaps').style.display = "none";
		document.getElementById('selected_no_link_gmaps').style.display = "";		
	}
	document.getElementById('selected_link').style.display = "none";

	document.getElementById('selected_no_link').style.display = "";



}

function getDebugDiv(){
	var debug = document.getElementById("debug_div");
	return debug;
}

function remove_path_id_from_hidden(path_id){

	var str = document.selected_path_submit.taxid.value;
//	var debug = getDebugDiv();

//	debug.innerHTML += str + "<BR>";
	str = str.replace(path_id+",", ""); // should replace if first or middle
	str = str.replace("," + path_id, ""); // should only replace if last
	str = str.replace(path_id, ""); // should replace is only
	if(str == ","){
		str = "";
	}	
//	debug.innerHTML += str + "<BR>";
	document.selected_path_submit.taxid.value = str;
	if (!(typeof document.getElementById('selected_path_gmaps_submit') === 'undefined')) {
		document.selected_path_gmaps_submit.taxid.value = str;
		document.kml_form.taxid.value = str;
	}
	
	document.dl_form.taxid.value = str;

}

function add_path_id_to_hidden(path_id){
	var str = document.selected_path_submit.taxid.value;
        if(!str.match(path_id)){
	        if(str){
			str += ",";
		}
		str += path_id;
	}
	document.selected_path_submit.taxid.value = str;
	if (!(typeof document.getElementById('selected_path_gmaps_submit') === 'undefined')) {
		document.selected_path_gmaps_submit.taxid.value = str;
		document.kml_form.taxid.value = str;
	}	
	
	document.dl_form.taxid.value = str;
}



function add_to_path_table(tbl_id, path_name, path_id, add_flag){
	var table = document.getElementById("selected_path");
	var debug = getDebugDiv();
	for (var x=0; x<table.rows.length; x++) {
	       var row_info = table.rows[x].cells[0].innerHTML;
       	       if(row_info.match(path_id)){
			if(add_flag == "remove"){
				table.deleteRow(x);
				remove_path_id_from_hidden(path_id);
			}else{

				return;
			}
		}
	}	



	if(add_flag == "add"){
		var tbody = table.getElementsByTagName("TBODY")[0];
        	var row = document.createElement("TR");
	        var td1 = document.createElement("TD");

		// Link that uses remove_entry() function to get rid of it
        	td1.innerHTML = "<a href = \"javascript:switch_mode ('" + tbl_id + "','" + path_name + "','" + path_id + "');\">" +  path_name + "</a>";
	        row.appendChild(td1);
        	tbody.appendChild(row);
		add_path_id_to_hidden(path_id);
	}

	document.getElementById('selected_path_num').innerHTML = (table.rows.length - 1);

	if(table.rows.length > 1){
		document.getElementById('view_selected_path').style.display = "";
		document.getElementById('selected_link').style.display = "";
		if (!(typeof document.getElementById('selected_path_gmaps_submit') === 'undefined')) {
			document.getElementById('selected_link_gmaps').style.display = "";
			document.getElementById('selected_no_link_gmaps').style.display = "none";
		}
		document.getElementById('selected_no_link').style.display = "none";

	}else{
		document.getElementById('view_selected_path').style.display = "none";
		document.getElementById('test_div').style.display = "none";
		document.selected_path_submit.taxid.value = "";

		document.getElementById('selected_link').style.display = "none";
		
		if (!(typeof document.getElementById('selected_path_gmaps_submit') === 'undefined')) {
			document.getElementById('selected_link_gmaps').style.display = "none";
			document.getElementById('selected_no_link_gmaps').style.display = "";
			document.selected_path_gmaps_submit.taxid.value = "";
		}
		document.getElementById('selected_no_link').style.display = "";
	}
}	



function hideShow_div(ident) {
 
    if (document.getElementById(ident).style.display=='none') {
    	document.getElementById(ident).style.display='';
    } 
    else {
	document.getElementById(ident).style.display='none';
    }
}


function preload_orgs() {

	var pre_load = document.selected_path_submit.taxid.value;
	var select_array = pre_load.split(",");

	for(var i = 0; i < select_array.length; i++){
		for(var j = 0; j < path_val_array.length; j++){
		        if(path_val_array[j] == select_array[i]){
				switch_mode('results_table',path_name_array[j],path_val_array[j]);
		        }
		}
	}


}
