var isIE=document.all?true:false;
var isDOM=document.getElementById?true:false;
var isNS4=document.layers?true:false;

// -----------------------------------------------------------------
// thee following functions are for supporting the main entry screen
// -----------------------------------------------------------------
function validate()
{
	var my_file_flag=0;

	// if input is from a file
	if ( document.mainform.inputmethod.value == 'startgenes' )	{
		if ( document.mainform.userfile.value !='' )	my_file_flag++;
		if ( document.mainform.geneList.value !='' )	my_file_flag++;
	}
	
	// if input is from a pathway
	else if ( document.mainform.inputmethod.value == 'startpathwaycancer' )	{
		if ( document.mainform.pathwaycancer.selectedIndex != 0 )	my_file_flag++;
		if ( document.mainform.pathwaysearch.value ) my_file_flag++;
	}
	else if ( document.mainform.inputmethod.value == 'startpathwaykegg' )	{
		if ( document.mainform.pathwaykegg.selectedIndex != 0 )	my_file_flag++;
		if ( document.mainform.pathwaysearch.value ) my_file_flag++;
	}
	else if ( document.mainform.inputmethod.value == 'startpathwaysabio' )	{
		if ( document.mainform.pathwaysabio.selectedIndex != 0 )	my_file_flag++;
		if ( document.mainform.pathwaysearch.value )	my_file_flag++;
	}
	else if ( document.mainform.inputmethod.value == 'startpathwaygglobe' )	{
		if ( document.mainform.pathwaygglobe.selectedIndex != 0 )	my_file_flag++;
		if ( document.mainform.pathwaysearch.value )	my_file_flag++;
	}
	
	// if input is from process
	else if ( document.mainform.inputmethod.value == 'startprocessbio' || 
			  document.mainform.inputmethod.value == 'startprocesscell' ||
			  document.mainform.inputmethod.value == 'startprocessmol'
			)
	{
		go();
		return false;
	}
	// if input is from a disease
	else if ( document.mainform.inputmethod.value == 'startdisease' )	{
		if ( document.mainform.diseaseselect.selectedIndex != 0 )	my_file_flag++;
		if ( document.mainform.diseasesearch.value )	my_file_flag++;
	}
	// if input is from job ID
	else if ( document.mainform.inputmethod.value == 'startjob' )	{
		if ( document.mainform.jobid1.value != '' )	my_file_flag++;
		if ( document.mainform.jobid2.selectedIndex >= 0 && 
			 document.mainform.jobid2.options[document.mainform.jobid2.selectedIndex].value != '')	my_file_flag++;
	}
	// if input is from an previous textmining job
	else if ( document.mainform.inputmethod.value == 'textmining' )	{
		if ( document.mainform.textminingid.value )	my_file_flag++;
	}
	
	
	if ( my_file_flag == 0  ) {
		alert('You forgot to input your data!' );
		return false;
	}
	if ( my_file_flag > 1  ) {
		alert("You have chosen multiple methods of entry!  Please only use one method of entry.");
		//mainform.pathway.selectedIndex = 0;
		return false;
	}
	
	return true;
}
function toggleRow(whichTable,whichType)
{
	if (whichType=='s')	{
		// set display options for the row
		if (isDOM)	{
			document.getElementById(whichTable).style.display='';
			document.getElementById(whichTable).style.visibility='visible';
		}
		else if (isIE)	eval("document.all."+whichTable+".style.visibility='visible';");
		else if(isNS4)	eval("document.layers['"+whichTable+"'].visibility='show';");
	}

	else	{
		// set display options for the row
		if (isDOM)	document.getElementById(whichTable).style.display='none';
		else if (_isIE ) eval("document.all."+whichTable+".style.visibility='collapse';");
		else if(isNS4)	eval("document.layers['"+whichTable+"'].visibility='hide';");
	}
}


// -----------------------------------------------------------------
// the following functions are for supporting the graph customization screen
// -----------------------------------------------------------------
function reset_form()
{
	networkform.max.options[0].selected = true;
	networkform.neighborassoc.checked = false;
	networkform.height.value = '';
	networkform.width.value = '';
}
function ToggleRow(whichTable)
{
	var newkey="x"+whichTable;
// 	var secondkey='d'+whichTable;

	if (document.getElementById(whichTable).style.display=="none")	{
		// set display options for the row
		if (isDOM)	{
			document.getElementById(whichTable).style.display='';
			document.getElementById(whichTable).style.visibility='visible';
		}
		else if (isIE)	eval("document.all."+whichTable+".style.visibility='visible';");
		else if(isNS4)	eval("document.layers['"+whichTable+"'].visibility='show';");
		
		
		// set display options for additional display elements
		if (document.getElementById(newkey))
  			document.getElementById(newkey).innerHTML="<img src='http://www.superarray.com/images/text.gif' border=0>";

//  		if (document.getElementById(secondkey))
//  			document.getElementById(secondkey).className="pathwayblue";
	}

	else	{
		// set display options for the row
		if (isDOM)	document.getElementById(whichTable).style.display='none';
		else if (_isIE ) eval("document.all."+whichTable+".style.visibility='collapse';");
		else if(isNS4)	eval("document.layers['"+whichTable+"'].visibility='hide';");
		
		// set display options for additional display elements
  		if (document.getElementById(newkey))
 			document.getElementById(newkey).innerHTML="<img src='http://www.superarray.com/images/folder.gif' border=0>";

// 		if (document.getElementById(secondkey))
// 			document.getElementById(secondkey).className="pathwaylink";
	}
}
function CheckAll (whichGroup, numelements)
{
	var groupbox = 'c'+whichGroup;
	var boolvalue;
	
	if ( document.getElementById(groupbox).checked == true )	boolvalue = true;
	else	boolvalue = false;
	
	for ( i = 1; i <= numelements; i++ )	{
		var checkboxname = groupbox + i + 'zzz';
		document.getElementById(checkboxname).checked = boolvalue;
	}
}

function retrievePlainText()
{
	document.getElementById('textlist').style.display = 'block';
	document.getElementById('textlist').style. visibility = 'visible';
}
function hidePlainText()
{
	document.getElementById('textlist').style.display = 'none';
	document.getElementById('textlist').style.visibility = 'hidden';
}
function selectAll(theField) {
	var tempval=eval(theField);
	tempval.focus()
	tempval.select()
	therange=tempval.createTextRange()
	therange.execCommand("Copy")
}

function newWindow(gene, openlink)
{
	myRef = window.open(openlink, gene, 'top=100,left=100,width=800,height=600,toolbar=1,location=1,menubar=1,statusbar=1,resizable=1,scrollbars=1');
	myRef.focus(); 
	return false;
}


// -----------------------------------------------------------------
// the following functions are for generating and manipulating forms;
// functions copied from svgjava.js
// -----------------------------------------------------------------
//helper function to create the form
function getNewSubmitForm() 
{
	var submitForm = document.createElement("FORM");
	document.body.appendChild(submitForm);
	submitForm.method = "POST";
	
	return submitForm;
}

//helper function to add elements to the form
function createNewFormElement(inputForm, elementName, elementValue) 
{
	var newElement; 
	if ( isIE )	{
		newElement = document.createElement('<input type="hidden" name="' + elementName + '" value="' + elementValue+ '">');
		inputForm.appendChild(newElement);
	}
	
	else	{
		newElement = document.createElement("input");
		inputForm.appendChild(newElement);
		newElement.type = "hidden";
		newElement.name = elementName;
		newElement.value = elementValue;
	}

	return newElement;
}


// -----------------------------------------------------------------
// the following functions are for interacting with the Java applet
// -----------------------------------------------------------------
// functions for interacting with the legend
var isNav = ( navigator.appName.indexOf("Netscape") != -1 );
if (isNav)	{	document.captureEvents(Event.MOUSEMOVE);	}
document.onmousemove = handlerMM;

function handlerMM (e)	
{
	x = (isNav) ? e.pageX : event.clientX + document.body.scrollLeft;
	y = (isNav) ? e.pageY : event.clientY + document.body.scrollTop;
}
function show_explanation(displaytext)
{
	document.getElementById('explainbox').innerHTML = displaytext;
	document.getElementById('explainbox').style.left=x+15;
	document.getElementById('explainbox').style.top=y-10;
	document.getElementById('explainbox').style.visibility = '';
	document.getElementById('explainbox').style.display = '';
}
function hide_explanation()
{
	document.getElementById('explainbox').style.visibility = 'hidden';
	document.getElementById('explainbox').style.display = '';
}
function show_legendgroup(groupname)
{
	document.getElementById(groupname).style.visibility = '';
	document.getElementById(groupname).style.display = '';
}


// functions for obtaining graph data from applet
function save_graph()
{
	// add in the checked status
	var relstatus = "//-- begin script\n";
	for ( i = 1; i <= 11; i++ )	{
		if ( document.getElementById('initcheck'+i) && !document.getElementById('initcheck'+i).checked )	{
			relstatus += "	if ( document.getElementById('initcheck" + i + "') )	{\n" +
						 "		document.getElementById('initcheck" + i + "').checked = false;\n" +
						 "		changeEdgeGroupDisplay(" + i + ", false);\n" +
						 "	}\n";
		}
		else	{
			relstatus += "	if ( document.getElementById('initcheck" + i + "') )	document.getElementById('initcheck" + i + "').checked = true;\n";
		}
	}
	
	// for legend
	if ( document.getElementById('legend_addedgene').style.visibility != 'hidden' )
		relstatus += "	if ( document.getElementById('legend_addedgene') )	{\n" + 
					 "		document.getElementById('legend_addedgene').style.visibility = '';\n" + 
					 "		document.getElementById('legend_addedgene').style.display = '';\n" +
					 "	}\n";
	
	if ( document.getElementById('legend_neighbors').style.visibility != 'hidden' )
		relstatus += "	if ( document.getElementById('legend_neighbors') )	{\n" +
					 "		document.getElementById('legend_neighbors').style.visibility = '';\n" +
					 "		document.getElementById('legend_neighbors').style.display = '';\n" +
					 "	}\n";
	
	// for tissue data
	if ( typeof(tissuehash) != 'undefined' )	{
		relstatus += "\n\n	tissuestring = =====";
		
		var tissuekeys = tissuehash.getAllKeys().split(",");
		for ( var k = 0; k < tissuekeys.length; k++ )	relstatus += tissuekeys[k] + ":" + tissuehash.getKeyString(tissuekeys[k]) + ";";
		relstatus = relstatus.slice(0, -1);
		relstatus += "=====;\n";
		
		var selValue = document.getElementById('tissueexp').options[document.getElementById('tissueexp').selectedIndex].value;
		relstatus += "	tissuehash = new Multihash();\n";
		relstatus += "	add2Tissues(tissuestring);\n";
		relstatus += "	updateSelBox('" + selValue + "');\n";
	}
	relstatus += "\n//-- end script";
	
	document.appletform.graphdata.value = document.medusaapplet.exportHTML() + relstatus;
	document.appletform.datatype.value = "graph";
	myRef=window.open("", "graphExport", "top=20,left=20,width=975,height=700,toolbar=1,location=1,menubar=1,statusbar=1,resizable=1,scrollbars=1");
	document.appletform.submit();
	myRef.focus();
	return false;
}
function save_graph_disabled()
{
	alert("No Save Function Available for This Graph");
	return false;
}
function export_graph()
{
	document.appletform.graphdata.value = document.medusaapplet.exportGraph();
	document.appletform.datatype.value = "text";
	myRef=window.open("","graphExport", "top=20,left=20,width=975,height=775,toolbar=1,location=1,menubar=1,statusbar=1,resizable=1,scrollbars=1");
	document.appletform.submit();
	myRef.focus(); 
	return false;
}
function export_image()
{
	// determine whic type of radiobutton has been checked
	var imagetypeval = '';
	for ( var i = 0; i < document.appletform.imagetype.length; i++ )	{
		if ( document.appletform.imagetype[i].checked )	imagetypeval = document.appletform.imagetype[i].value;
	}
	
	document.appletform.graphdata.value = document.medusaapplet.exportImage(imagetypeval);
	document.appletform.datatype.value = "image";
	myRef=window.open("","graphExport", "top=20,left=20,width=950,height=750,toolbar=1,location=1,menubar=1,statusbar=1,resizable=1,scrollbars=1");
	document.appletform.submit();
	myRef.focus(); 
	return false;
}

// functions for legend interaction and manipulation
var highlightbutton = 0;
function changeExpress(id,genelist)
{
	document.medusaapplet.displayGeneSubset(genelist);
	document.getElementById('tissue' + highlightbutton).style.backgroundColor = '';
	highlightbutton = id;
	document.getElementById('tissue' + highlightbutton).style.backgroundColor = 'yellow';
}
function changeEdgeGroupDisplay(id, checkval)
{
	document.medusaapplet.handleEdgeEvent(id, checkval);
}
function legendDisplayToggler(togglebox, totalelem)
{
	var finalval = togglebox.checked;
	
	for ( var i = 1; i <= totalelem; i++ )	{
		if ( document.getElementById('initcheck' + i) )	{
			document.getElementById('initcheck' + i).checked = finalval;
			changeEdgeGroupDisplay(i, finalval);
		}
	}
}
function openLegend()	{
	if ( document.getElementById('genelegend').style.visibility =='visible' )	{
		document.getElementById('genelegend').style.visibility='hidden';
		document.getElementById('genelegend').style.display='none';
	}
	else	{
	document.getElementById('genelegend').style.visibility='visible';
	document.getElementById('genelegend').style.display='block';
	}
}



// functions for tissue data selection box manipulation
function Hash()
{
	this.length = 0;
	this.items = new Array();
	for (var i = 0; i < arguments.length; i += 2) {
		if (typeof(arguments[i + 1]) != 'undefined') {
			this.items[arguments[i]] = arguments[i + 1];
			this.length++;
		}
	}
   
	this.removeItem = function(in_key)
	{
		var tmp_value;
		if (typeof(this.items[in_key]) != 'undefined') {
			this.length--;
			var tmp_value = this.items[in_key];
			delete this.items[in_key];
		}
	   
		return tmp_value;
	}

	this.getItem = function(in_key) {
		return this.items[in_key];
	}

	this.setItem = function(in_key, in_value)
	{
		if (typeof(in_value) != 'undefined') {
			if (typeof(this.items[in_key]) == 'undefined') {
				this.length++;
			}

			this.items[in_key] = in_value;
		}
	   
		return in_value;
	}

	this.hasItem = function(in_key)
	{
		return typeof(this.items[in_key]) != 'undefined';
	}
	
	this.incrementItem = function(in_key)
	{
		this.items[in_key] = this.items[in_key]+1;
	}
}
function Multihash()
{
	this.itemhash = new Hash();
	
	this.getKeyString = function(in_key)	{
		var keyarray = new Array();
		for (var i in this.itemhash[in_key].items)	keyarray.push(i);
		return keyarray.join(',');
	}
	
	this.getValueString = function(in_key)	{
		var valuearray = new Array();
		for (var i in this.itemhash[in_key].items)	valuearray.push(this.itemhash[in_key].items[i]);
		return valuearray.join(',');
	}
	
	this.getAllKeys = function()	{
		var thesekeys = new Array();
		for ( var i in this.itemhash )	thesekeys.push(i);
		thesekeys.splice(0,7);		// remove 1st 7 elements corresponding to functions & parameters
		thesekeys.sort();
		return thesekeys.join(',');
	}
	
	this.addItem = function(in_key, in_value)
	{
		if (typeof(in_value) != 'undefined') {
			if ( typeof(this.itemhash[in_key]) == 'undefined' )	this.itemhash[in_key] = new Hash();
			
			var in_array = in_value.split(',');
			for ( var x = 0; x < in_array.length; x++ )	{
				if ( !this.itemhash[in_key].hasItem(in_array[x]) )	this.itemhash[in_key].setItem(in_array[x],1);
				else 	this.itemhash[in_key].incrementItem(in_array[x]);
				//alert(' for ' + in_array[x] + ', value has been set to ' + this.itemhash[in_key].getItem(in_array[x]));
			}
		}
		return in_value;
	}
	
	this.unsetItem = function(in_key)	{
		if (typeof(this.itemhash[in_key]) != 'undefined') {
			delete this.itemhash[in_key];
		}
		return tmp_value;
	}
}
function add2Tissues(incoming)	{
	var splittissue = incoming.split(";");
	
	for ( var i = 0; i < splittissue.length; i++ )	{
		var splitline = splittissue[i].split(":");
		tissuehash.addItem(splitline[0], splitline[1]);
	}
}
function modExpress()	{
	var indexval = document.getElementById('tissueexp').selectedIndex;
	var changeval = document.getElementById('tissueexp').options[indexval].value;
	
	var genelist = '';
	if ( changeval != '' )	genelist = tissuehash.getKeyString(changeval);
	document.medusaapplet.displayGeneSubset(genelist);
}
function updateTissues()
{
	// set up variables
	tissuestring = document.medusaapplet.exportTissues();
	
	var tissueval = document.getElementById('tissueexp').options[document.getElementById('tissueexp').selectedIndex].value;
	updateSelBox(tissueval);
}
function updateSelBox(curselect)
{
	var tissuebox = document.getElementById('tissueexp');
	var selIndex = 0;
	
	// update selection box
	tissuebox.length = 0;
	var newoption = new Option("Default", "", false, false);
	tissuebox.options[tissuebox.length] = newoption; 
	
	add2Tissues(tissuestring);
	var tissuearray = tissuehash.getAllKeys().split(",");
	for ( var x = 0; x < tissuearray.length; x++ )	{
		newoption = new Option(tissuearray[x], tissuearray[x]);
		tissuebox.options[tissuebox.length] = newoption;
		if ( tissuearray[x] == curselect )	selIndex = x+1;
	}
	
	// set selection to match
	tissuebox.selectedIndex = selIndex;
	modExpress();
}

