
var isIE = false; //global flag;
var req;  //global request and XML document objects;


// invoked by "Category" select element change; loads chosen XML document,
// clears 'topics' select element, loads new branchs into 'topics' select element.
function loadDoc(evt) {
    //equalize W3C/IE event models to get event object;
    evt = (evt) ? evt : ((window.event) ? window.event : null);
    if (evt) {
        //equalize W3C/IE models to get event target reference;
        var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
        if (elem) {
            try {
                if (elem.selectedIndex > 0) {
					var thisURL = elem.options[elem.selectedIndex].value;
                    loadXMLDoc(thisURL);	//call fonction 'loadXMLDoc' to load XML file;
                }
            }
            catch(e) {
                var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
                alert("Unable to get data:\n" + msg);
                return;
            }
        }
    }
}


// retrieve XML document (reusable generic function); parameter is URL
// string (relative or complete) to an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from same domain as HTML file.
function loadXMLDoc(url) {
    if (window.XMLHttpRequest) { //branch for native XMLHttpRequest object.
		req = new XMLHttpRequest();
	}
	else if (window.ActiveXObject) { //branch for IE/Windows ActiveX version;
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    if (req.overrideMimeType) { //for browser override MimeType;
			req.overrideMimeType("text/xml");
    }
    
    req.onreadystatechange = processReqChange;
    req.open("GET", url, true);
    req.send(null);
}


// handle onreadystatechange event of req object;
function processReqChange() {
    if (req.readyState == 4) {   //only if req shows "loaded";
        if (req.status == 200) { //only if "OK";
		
            buildTopicList();
			showSummary();
			
			//show genes Info;
			var thisGeneNode = req.responseXML.getElementsByTagName('geneList');
			appendSelectedTabV3(thisGeneNode,'geneList','geneInfo');
			
			//show rat and human QTLs Info;
			var thisQtlNode = req.responseXML.getElementsByTagName('qtlList');
			//appendSelectedTabV3(thisQtlNode,'qtlList','qtlInfo'); //show both rat and human QTLs Info;
			appendQtlTabV5(thisQtlNode,'ratsym','ratid','rat-qtl'); //show rat QTLs only;
			appendQtlTabV5(thisQtlNode,'humansym','humanid','human-qtl'); //show human QTLs only;
			
			//show strains Info;
			var thisStrainNode = req.responseXML.getElementsByTagName('strainList');
			appendSelectedTabV3(thisStrainNode,'strainList','strainInfo');
			
		} else {
			alert("There was a problem retrieving the XML data: \n" +
				req.statusText);
        }
    }
}


// fill 'topics' select list with branchs from the current XML document.
function buildTopicList() {
	clearTopicList();	//clear 'topic' area;
    var select = document.getElementById('topics');
    var terms = req.responseXML.getElementsByTagName('terms');
	
    var initOpt = document.createElement('option');
	var initContent = document.createTextNode('Choose One ... ');
    initOpt.value = '';
    initOpt.appendChild(initContent);
    select.appendChild(initOpt);
	
    //loop through <terms> elements, and add each nested <termName> element to topics select element.
    for (i=0; i<terms.length; i++) {
		var thiscontent = document.createTextNode(getElementTextNS('termName', terms[i], 0));
        appendToSelect(select, i, thiscontent); //seperate this line to 2 lines (above);
    }
}


function showSummary() {
    var divName = document.getElementById('category'); //show disease category name;
	var divGeneSum = document.getElementById('genes-sum');
	var divQtlSum = document.getElementById('qtls-sum');
	var divStrainSum = document.getElementById('strains-sum');
	
	//diseases name are from XML, but they're different with GBrowse;
	var topnodes = req.responseXML.getElementsByTagName('topnodes');
	var theName = getElementTextNS('categoryname', topnodes[0], 0);

	var geneCount = new Array();
	var genelist = req.responseXML.getElementsByTagName('geneList');
	for (i=0; i<genelist.length; i++){
		var genes = genelist[i].getElementsByTagName('ratid'); //get rat's gene number;
		var getGeneIDs = genes[0].firstChild.nodeValue;
		geneCount.push(getGeneIDs);
	}
	geneCount.sort();
	var thisGeneLength = geneCount.length - 1;

	for (r=0; r<thisGeneLength; r++) {
		for (i=0; i<thisGeneLength; i++) {
			var compa = geneCount[i+1];
			if (geneCount[i] == compa) {
				geneCount.splice(i,1);
				thisGeneLength = geneCount.length - 1;
			}
		}
	}	//alert(geneCount); //test;
	var theGeneSum = geneCount.length;

	var qtlCount = new Array();
	var qtllist = req.responseXML.getElementsByTagName('qtlList');
	for (i=0; i<qtllist.length; i++){
		var qtls = qtllist[i].getElementsByTagName('ratid'); //get rat's gene number;
		if (qtls[0]){
			var getQtlIDs = qtls[0].firstChild.nodeValue;
			qtlCount.push(getQtlIDs);
		}else {continue;}
	}
	qtlCount.sort();
	var thisQtlLength = qtlCount.length - 1;

	for (r=0; r<thisQtlLength; r++) {
		for (i=0; i<thisQtlLength; i++) {
			var compaq = qtlCount[i+1];
			if (qtlCount[i] == compaq) {
				qtlCount.splice(i,1);
				thisQtlLength = qtlCount.length - 1;
			}
		}
	}
	var theQtlSum = qtlCount.length;
	if (theQtlSum == 0){
		document.getElementById('no-qtl').innerHTML = ' None found';
	}
	else {
		clearItem('no-qtl');
	}

	var strainCount = new Array();
	var strainlist = req.responseXML.getElementsByTagName('strainList');
	for (i=0; i<strainlist.length; i++){
		var strains = strainlist[i].getElementsByTagName('ratid'); //get rat's gene number;
		if (strains[0]){
			var getStrainIDs = strains[0].firstChild.nodeValue;
			strainCount.push(getStrainIDs);
		}else {continue;}
	}
	strainCount.sort();
	var thisStrainLength = strainCount.length - 1;

	for (r=0; r<thisStrainLength; r++) {
		for (i=0; i<thisStrainLength; i++) {
			var compas = strainCount[i+1];
			if (strainCount[i] == compas) {
				strainCount.splice(i,1);
				thisStrainLength = strainCount.length - 1;
			}
		}
	}
	var theStrainSum = strainCount.length;
	if (theStrainSum == 0){
		document.getElementById('no-strain').innerHTML = ' None found';
	}
	else {
		clearItem('no-strain');
	}

	divName.innerHTML = theName;
	clearItem('diseasename');
	divGeneSum.innerHTML = theGeneSum;
	divQtlSum.innerHTML = theQtlSum;
	divStrainSum.innerHTML = theStrainSum;
	
	var allIDs = geneCount.join('__') + '__' +  qtlCount.join('__');	//print out 'allIDs';
	//var selectedGenes = geneCount.concat();
	//for(i=0; i<selectedGenes.length;i=i+4){ selectedGenes.splice(i,3); } //remove 3/4 genes;
	//var selectedIDs = selectedGenes.join('__') + '__' + qtlCount.join('__');

	createFlashTab(allIDs,theName);	//show GViewer for this category;
	//var theName = 'Ontology:Nervous System Diseases';
	createGbrowseTab(theName);	//show GBrowse for this category;
}


// display details retrieved from XML document.
function showDetail(evt) {
    evt = (evt) ? evt : ((window.event) ? window.event : null);
    if (evt) {
      var select = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
      if (select) {	//( && select.options.length > 1)
        //copy <terms> element text for the selected terms;
        var terms = req.responseXML.getElementsByTagName('terms')[select.value]; //select.value=0,1,2
		
		var contentdn = getElementTextNS('termName', terms, 0); //get disease name;
		//var contentlink = getElementTextNS('termID', terms, 0); //get linkURL's rgd-id;

		// get rat's gene number in geneList;
		var geneCount = new Array();
		var genelist = terms.getElementsByTagName('geneList');
		for (i=0; i<genelist.length; i++){
			var genes = genelist[i].getElementsByTagName('ratid');
			var getGeneIDs = genes[0].firstChild.nodeValue;
			geneCount.push(getGeneIDs);
		 }
		geneCount.sort();
		
		var thisGeneLength = geneCount.length - 1;
		for (r=0; r<thisGeneLength; r++) {
			for (i=0; i<thisGeneLength; i++) {
				var compa = geneCount[i+1];
				if (geneCount[i] == compa) {
					geneCount.splice(i,1);
					thisGeneLength = geneCount.length - 1;
				}
			}
		 }	//alert(geneCount); //test;
		var geneCounts = geneCount.length;

		//get rat's gene number in qtlList;
		var qtlCount = new Array();
		var qtllist = terms.getElementsByTagName('qtlList');
		for (i=0; i<qtllist.length; i++){
			var qtls = qtllist[i].getElementsByTagName('ratid'); 
			if (qtls[0]){
				var getQtlIDs = qtls[0].firstChild.nodeValue;
				qtlCount.push(getQtlIDs);
			} else {continue;}
		 }
		qtlCount.sort();
		
		var thisQtlLength = qtlCount.length - 1;
		for (r=0; r<thisQtlLength; r++) {
			for (i=0; i<thisQtlLength; i++) {
				var compaq = qtlCount[i+1];
				if (qtlCount[i] == compaq) {
					qtlCount.splice(i,1);
					thisQtlLength = qtlCount.length - 1;
				}
			}
		 }
		var qtlCounts = qtlCount.length;
		
		if (qtlCounts == 0){
			document.getElementById('no-qtl').innerHTML = ' None found';
		}
		else {
			clearItem('no-qtl');
		}

		//get rat's gene number in strainList;
		var strainCount = new Array();
		var strainlist = terms.getElementsByTagName('strainList');
		for (i=0; i<strainlist.length; i++){
			var strains = strainlist[i].getElementsByTagName('ratid'); 
			if (strains[0]){
				var getStrainIDs = strains[0].firstChild.nodeValue;
				strainCount.push(getStrainIDs);
			}else {continue;}
		}
		strainCount.sort();
		
		var thisStrainLength = strainCount.length - 1;
		for (r=0; r<thisStrainLength; r++) {
			for (i=0; i<thisStrainLength; i++) {
				var compas = strainCount[i+1];
				if (strainCount[i] == compas) {
					strainCount.splice(i,1);
					thisStrainLength = strainCount.length - 1;
				}
			}
		}
		var strainCounts = strainCount.length;

		if (strainCounts == 0){
			document.getElementById('no-strain').innerHTML = ' None found';
		}
		else {
			clearItem('no-strain');
		}

		var divdn = document.getElementById('diseasename'); //show disease name;
		var divGeneLink = document.getElementById('genes-sum');
		var divQtlLink = document.getElementById('qtls-sum');
		var divStrainLink = document.getElementById('strains-sum');

		divdn.innerHTML = '&nbsp;<font color="#CC0000">></font>&nbsp;' + contentdn; //blast new content into 'diseasename' <div>;
		divGeneLink.innerHTML = geneCounts;
		divQtlLink.innerHTML = qtlCounts;
		divStrainLink.innerHTML = strainCounts;

		// display selected disease's info by appendSelectedTab() function;
		var thisGnode = terms.getElementsByTagName('geneList'); //---------gene;
		appendSelectedTabV3(thisGnode,'geneList','geneInfo');
		
		var thisQnode = terms.getElementsByTagName('qtlList'); //-----------qtl;
		//appendSelectedTabV3(thisQnode,'qtlList','qtlInfo'); //show both rat and human QTLs Info;
		appendQtlTabV5(thisQnode,'ratsym','ratid','rat-qtl'); //show rat QTLs only;
		appendQtlTabV5(thisQnode,'humansym','humanid','human-qtl'); //show human QTLs only;
		
		var thisSnode = terms.getElementsByTagName('strainList'); //------strain;
		appendSelectedTabV3(thisSnode,'strainList','strainInfo');
		
		var thisIDs = geneCount.join('__') + '__' +  qtlCount.join('__');
		createFlashTab(thisIDs,contentdn);		//display current disease GViewer;
		createGbrowseTab(contentdn);	//display current disease GBrowse;
	   }
    }
}


// add branch to select element the less elegant, but compatible way.
function appendToSelect(select, value, content) {
    var opt;
    opt = document.createElement('option');
    opt.value = value;
    opt.appendChild(content);
    select.appendChild(opt);
}


// changed from appendToTable(thisItem='gene','qtl','strain', div='rgd-gene');
function appendSelectedTabV3(thisNode,thisItem,div) { 
	var baseLink,trailLink,linkURL;
	
	var thisArray = new Array();
	var unsortedArray = new Array();
	var sortedArray = new Array();

	for (i=0; i<thisNode.length; i++)
	{
		var getRatNodeName = thisNode[i].getElementsByTagName('ratsym'); //'thisNode[i]' is this specfied node(gene,qtl,strain);
		if (getRatNodeName[0]) { //if this node exists;
			var getRatNodeNameValue = getRatNodeName[0].firstChild.nodeValue;
		} else {
			var getRatNodeNameValue = ''; } //empty if it doesn't exist;
		var getRatNodeID = thisNode[i].getElementsByTagName('ratid');
		if (getRatNodeID[0]) {
			var getRatNodeIDValue = getRatNodeID[0].firstChild.nodeValue;
		} else { 
			var getRatNodeIDValue = ''; }
		var ratArray = new Array();
		ratArray.push(getRatNodeNameValue);
		ratArray.push(getRatNodeIDValue);

		var getHumanNodeName = thisNode[i].getElementsByTagName('humansym');
		var getHumanNodeID = thisNode[i].getElementsByTagName('humanid');
		if (getHumanNodeName[0]) {
			var getHumanNodeNameLength = getHumanNodeName.length; //check how namy 'hsymbol' in this node, cool!!!;
			var humanArray = new Array();
			for (m=0; m<getHumanNodeNameLength; m++) {
				var getHumanNodeNameValue = getHumanNodeName[m].firstChild.nodeValue;
				var getHumanNodeIDValue = getHumanNodeID[m].firstChild.nodeValue;
				humanArray.push(getHumanNodeNameValue);
				humanArray.push(getHumanNodeIDValue);
			}
		} else {
			var getHumanNodeNameValue = '';
			var getHumanNodeIDValue = '';
			var humanArray = new Array();
			humanArray.push(getHumanNodeNameValue);
			humanArray.push(getHumanNodeIDValue);
		}

		var getMouseNodeName = thisNode[i].getElementsByTagName('mousesym');
		var getMouseNodeID = thisNode[i].getElementsByTagName('mouseid');
		if (getMouseNodeName[0]) {
			var getMouseNodeNameLength = getMouseNodeName.length;
			var mouseArray = new Array();
			for (m=0; m<getMouseNodeNameLength; m++) {
				var getMouseNodeNameValue = getMouseNodeName[m].firstChild.nodeValue;
				var getMouseNodeIDValue = getMouseNodeID[m].firstChild.nodeValue;
				mouseArray.push(getMouseNodeNameValue);
				mouseArray.push(getMouseNodeIDValue);
			}
		} else {
			var getMouseNodeNameValue = '';
			var getMouseNodeIDValue = '';
			var mouseArray = new Array();
			mouseArray.push(getMouseNodeNameValue);
			mouseArray.push(getMouseNodeIDValue);
		}
		
		thisArray.push([ratArray,humanArray,mouseArray]); 
		
	} //end i-loop;

	unsortedArray = thisArray.concat();
	sortedArray = thisArray.sort();
	
	var thisLength = sortedArray.length - 1;
	
	//remove repeated items;
	for (r=0; r<thisLength; r++) {
		for (i=0; i<thisLength; i++) {
			var compa = sortedArray[i+1][0][1];
			var compahuman = sortedArray[i+1][1][1];
			if (sortedArray[i][0][1] == compa && sortedArray[i][1][1] == compahuman) {
				sortedArray.splice(i,1);
				thisLength = sortedArray.length - 1;
			}
		}
	} //alert(sortedArray + "\n" + "---33333333---" + "\n");
	

	//print appended table;
	var newTable = document.createElement('TABLE');
	newTable.setAttribute('cellPadding',1);
	var tbody = document.createElement('TBODY');
	newTable.appendChild(tbody);
	
	for (i=0; i<sortedArray.length; i++) {
		
		var row = document.createElement('TR');
		var subArray = 3; //because we only have rat, human and mouse 3 sub-array;
		
		for (n=0; n<subArray; n++) { //n=0:rat; n=1:human; n=2:mouse;

			//define baseLink, trailLink;
			if (thisItem == 'geneList'){ //genes;
				if (n == 0){ //n=0:rat genes;
					var baseLink = 'http://rgd.mcw.edu/tools/genes/genes_view.cgi?id=';
					var trailLink = ''; }
				else if (n == 1){ //n=1:human genes;
					var baseLink = 'http://rgd.mcw.edu/tools/homologs/homologs_view.cgi?id=';
					var trailLink = '&species=1'; }
				else if (n == 2){ //n=2:mouse genes;
					var baseLink = 'http://rgd.mcw.edu/tools/homologs/homologs_view.cgi?id=';
					var trailLink = '&species=2';
				}
			 }
			else if (thisItem == 'qtlList'){ //QTLs;
				var baseLink = 'http://rgd.mcw.edu/objectSearch/qtlReport.jsp?rgd_id=';
				var trailLink = '';
			 }
			else { //strain;
				baseLink = 'http://rgd.mcw.edu/tools/strains/strains_view.cgi?id='; //strain: rat;
				trailLink = '';
			 } //end 'define baseLink, trailLink';

			var container = document.createElement('TD');
			container.setAttribute('width', 100);
			
			container.onmouseover = function(){this.style.backgroundColor="#CCCCAA"}; //works fine;
			container.onmouseout = function(){this.style.backgroundColor=""}; //works fine;
			
			for (j=0; j<sortedArray[i][n].length-1; j=j+2) {

				var span = document.createElement('span');
			
				//get theItem, theItemID;
				var theItem = sortedArray[i][n][j]; //symbol;
				var theItemID = sortedArray[i][n][j+1]; //rgdid;
				
				linkURL = baseLink + theItemID + trailLink;
				
				if (thisItem == 'geneList' && n == 0) //only for rat-genes list;
				{
					var printline = " <a href=\"" + linkURL + "\"  target=new " + "onMouseOver=\"javascript:doHighlight2('set', '" + theItem + "');\" onMouseOut=\"javascript:doHighlight2('unset', '" + theItem + "');\">" + theItem + "</a> ";
				}else{
					var printline = " <a href=\"" + linkURL + "\" target=new>" + theItem + "</a> ";
				}
				
				span.innerHTML = printline;
				container.appendChild(span);
				
			} //End j-loop;
			
			row.appendChild(container);
			
		} //End n-loop;
		
		tbody.appendChild(row);
	
	} //End i-loop;
	
	clearItem(div);
	document.getElementById(div).appendChild(newTable);
}


function appendQtlTabV5(thisNode,symbol,id,div) { //this function is only for QTLs;
	var baseLink,trailLink,linkURL;
	baseLink = 'http://rgd.mcw.edu/objectSearch/qtlReport.jsp?rgd_id=';
	trailLink = '';
	
	var thisArray = new Array();

	for (i=0; i<thisNode.length; i++)
	{	
		var getNodeName = thisNode[i].getElementsByTagName(symbol);
		var getNodeID = thisNode[i].getElementsByTagName(id);
		
		if (getNodeName[0]) { //if this node exists;
			var getNodeNameLength = getNodeName.length;
			var subArray = new Array();
			for (m=0; m<getNodeNameLength; m++) { //for case: [name1,id1,name2,id2];
				var getNodeNameValue = getNodeName[m].firstChild.nodeValue;
				var getNodeIDValue = getNodeID[m].firstChild.nodeValue;
				if (getNodeNameValue != ''){ //if this node value is NOT null;
					subArray.push(getNodeNameValue);
					subArray.push(getNodeIDValue);
				 }
			 }
		
			 thisArray.push([subArray]);
		 }
		 
	} //end i-loop;
	
	var sortedthisArray = thisArray.sort();

	// function removeRepeat(sortedthisArray);
	var thisLength = sortedthisArray.length - 1;
	for (r=0; r<thisLength; r++) {
		for (i=0; i<thisLength; i++) {
			var compa = sortedthisArray[i+1][0][0];
			if (sortedthisArray[i][0][0] == compa) {
				sortedthisArray.splice(i, 1);
				thisLength = sortedthisArray.length - 1;
			}
		}
	}

	//print QTLs list;
	var newTable = document.createElement('TABLE');
	newTable.setAttribute('cellPadding', 1);
	var tbody = document.createElement('TBODY');
	newTable.appendChild(tbody);
	
	for (i=0; i<sortedthisArray.length; i++) {
		var row = document.createElement('TR');
		var container = document.createElement('TD');	
		container.setAttribute('width', 100);
		container.onmouseover = function(){this.style.backgroundColor="#CCCCAA"};
		container.onmouseout = function(){this.style.backgroundColor=""};
		
		for (j=0; j<sortedthisArray[i][0].length-1; j=j+2) { //for case: [name1,id1,name2,id2];
			var span = document.createElement('span');
			
			//get theItem, theItemID;
			var theItem = sortedthisArray[i][0][j];
			var theItemID = sortedthisArray[i][0][j+1];

			linkURL = baseLink + theItemID + trailLink;
			
			if(symbol == 'ratsym') //only for rat;
			{
				var printline = " <a href=\"" + linkURL + "\"  target=new " + "onMouseOver=\"javascript:doHighlight2('set', '" + theItem + "');\" onMouseOut=\"javascript:doHighlight2('unset', '" + theItem + "');\">" + theItem + "</a> ";
			}else{
				var printline = " <a href=\"" + linkURL + "\" target=new>" + theItem + "</a> ";
			}
			
			span.innerHTML = printline;
			container.appendChild(span);
			
		} //end j-loop;
			
		row.appendChild(container);
		tbody.appendChild(row);
		
	} //end i-loop;
	
	clearItem(div);
	document.getElementById(div).appendChild(newTable);
}


var uid = 200511081215; //needs to be unique on page, gets passed to Flash movie too;
var flashProxy = new FlashProxy(uid, 'GViewer/javascript/JavaScriptFlashGateway.swf');
function doHighlight2(action, featureName) {
	if(action == 'set') {
		flashProxy.call('setHighlight', featureName);
	}
	else {
		flashProxy.call('unsetHighlight', featureName);
	}
	//alert("looking for " + featureName);
}


function createFlashTab(thisIDs,thisName){
	//var thisIDs = '2135__2138__620596__2298__2299__61975';
	var src = 'GViewer/GViewer2.swf?titleBarText='; //removed -- http://rgd.mcw.edu/diseases/ --;
	var flashVars = '&lcId=200511081215&baseMapURL=GViewer/data/rgd_rat_ideo.xml&browserURL=http://mcnally.hmgc.mcw.edu/gb/gbrowse/rgd_903/?name=Chr&';
	var annotationURL = '&annotationURL=/tools/GViewerFlashV2/getPositionForRGD.cgi?dbIds=';
	
	var url = src + thisName + flashVars + annotationURL + thisIDs;
	// + '&dimmedChromosomeAlpha=40&bandDisplayColor=0x0099FF&wedgeDisplayColor=0xCC0000'
	
	var embed = document.createElement('embed');
	embed.setAttribute('width', 550);
	embed.setAttribute('height', 400);
	embed.setAttribute('src', url);
	
	var div = document.getElementById('gviewer');
	div.innerHTML = ' ';
	div.appendChild(embed); //works for all browsers;
}


function openFlashGuide(){
	var guideSpan = document.createElement('span');
	var guideText ='<li>Expand View: click chromosome to expand view. You can drag two handles to select a region of the <br>&nbsp;&nbsp;&nbsp; chromosome, click on the green bar to a genome browser;</li>'
					+ '<li>View Report: [SHIFT + click] to view genes and qtls report;</li>'
					+ '<li>Print: right click, select print ...</li>'
					+ '<li>Click ( i ) icon for more options </li>';
	guideSpan.innerHTML = guideText;
	
	var gvgdiv = document.getElementById('GViewerGuide');
	gvgdiv.innerHTML = ' ';
	gvgdiv.appendChild(guideSpan);
	
	var closeme = document.createElement('P');
	closeme.setAttribute('align','center');
	var closemeLink = document.createElement('A');
	var gvgtextclosemeLink = document.createTextNode('[ Click me to close ]');
	closemeLink.appendChild(gvgtextclosemeLink);
	closemeLink.onclick = function closeme(){
		clearItem('GViewerGuide');
	 };
	closeme.appendChild(closemeLink); 
	gvgdiv.appendChild(closeme);
}


// new added, thisTermname = 'Autoimmune', "Multiple sclerosis";
function createGbrowseTab(thisTermname){
	//map 'thisTermname' into known name;
	switch(thisTermname){
		case 'Autoimmune Diseases of the Nervous System':
			thisTermname = 'Autoimmune Disease';
			break;
		case 'Autonomic Nervous System Diseases':
			thisTermname = '';
			break;
		case 'Central Nervous System Diseases':
			thisTermname = 'Central Nervous System';
			break;
		case 'Cranial Nerve Diseases':
			thisTermname = 'Cranial';
			break;
		case 'Demyelinating Diseases':
			thisTermname = 'demyelination';
			break;
		case 'Nervous System Malformations':
			thisTermname = '';
			break;
		case 'Nervous System Neoplasms':
			thisTermname = 'Neoplasm';
			break;
		case 'Neurocutaneous Syndromes':
			thisTermname = 'Syndrome';
			break;	
		case 'Neurologic Manifestations':
			thisTermname = '';
			break;
		case 'Neuromuscular Diseases':
			thisTermname = 'Neuromuscular';
			break;
		case 'Neurotoxicity Syndromes':
			thisTermname = 'Syndrome';
			break;
		case 'Trauma, Nervous System':
			thisTermname = '';
			break;
		case 'Behavior and Behavior Mechanisms':
			thisTermname = 'Mechanism';
			break;
		case 'Mental Disorders':
			thisTermname = 'Mental';
			break;
		default:
			break;
	}
	
	var url = 'http://mcnally.hmgc.mcw.edu/gb/gbrowse/rgd_903?name=' + thisTermname;
	var myIframe = document.createElement('iframe');
	var thewidth = '100%';
	myIframe.setAttribute('width', thewidth);
	myIframe.setAttribute('height', 345);
	myIframe.setAttribute('src', url);

	var div = document.getElementById('gbrowser');
	div.innerHTML = ' ';
	div.appendChild(myIframe);
	
	openGBwindow(thisTermname,url);	//display a link to open a new GBrowse window;
}


// new added, thisSymbolName = any gene, QTL, strain name;
function createGbrowseTab2(thisSymbolName){
	var gBaseURL = 'http://mcnally.hmgc.mcw.edu/gb/gbrowse_img/rgd_903/?name=Transcript:';
	var gTrailURL = ';width=490;type=RGD_curated_genes+RGD_ESTs+RGD_SSLP+dbSNP_Track+UCSC_NET+UCSC_MM6_NET;options=RGD_curated_genes+3+RGD_SSLP+3+RGD_ESTs+2+dbSNP_Track+2+UCSC_NET+3+UCSC_MM6_NET+3;embed=1;abs=1;';
	var qBaseURL;
	var qTrailURL;
	var url = gBaseURL + thisSymbolName + gTrailURL;
	
	var myIframe = document.createElement('iframe');
	myIframe.setAttribute('width', 500);
	myIframe.setAttribute('height', 345);
	myIframe.setAttribute('src', url);

	var div = document.getElementById('gbrowser');
	div.innerHTML = ' ';
	div.appendChild(myIframe);
	
	openGBwindow(thisSymbolName,url);	//display a link to open a new GBrowse window;
}


function openGBwindow(thisTerm,thisurl){
	var gbLinker = document.createElement('A');
	var linkString = document.createTextNode('view in new window');
	
	gbLinker.setAttribute('href', thisurl);
	gbLinker.setAttribute('target', 'new');
	gbLinker.appendChild(linkString);

	var gbdiv = document.getElementById('open-gbrowse');
	gbdiv.innerHTML = ' ';
	gbdiv.appendChild(gbLinker);
}


// retrieve text of an XML document element, including elements using namespaces.
function getElementTextNS(local, parentElem, index) {
	// the namespace versions of this method (getElementsByTagNameNS()) operate
    // differently in Safari and Mozilla, but both return value with just local name,
    // provided there aren't conflicts with non-namespace element names.
    var result = parentElem.getElementsByTagName(local)[index];
    if (result) {
        //get text, accounting for possible whitespace (carriage return) text nodes. 
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;    		
        }
    } else {
        return "no";
    }
}


// empty 'topics' select list content;
function clearTopicList() {
    var select = document.getElementById('topics');
    while (select.length > 0) {	select.remove(0);    }
}


// clear area;
function clearItem(idName) {
    document.getElementById(idName).innerHTML = ' ';
}


// need to be added;
function  showFilteredDetail(form) {
	alert(form.topics.value);
}


// test, such as thisItem='gene', 'qtl', 'other' ;
function test(thisItem) {
	var thisx = req.responseXML.getElementsByTagName(thisItem);
	var thisItemName = thisx[0].nodeName; // works;
	var thisNode = thisx[0].childNodes[1]; // return [object Element];
	var EMPTY = 'EMPTY'; // test;
	
	if (isIE) {	// childNodes[0] works on IE; childNodes[1] works on Mozilla;
	//	if (thisx[0].childNodes[0].firstChild.nodeValue == 'EMPTY') {	//test;
	//		var thisNodeName = 'NULL';	//test;
	//		var thisNodeValue = '0';	//test;
	//	} else {	//test;
			var thisNodeName = thisx[0].childNodes[0].nodeName;
			var thisNodeValue = thisx[0].childNodes[0].firstChild.nodeValue;
	//	}	//test;
	} else {
	//	if (thisx[0].childNodes[1].firstChild == EMPTY) {	//test;
	//		var thisNodeName = 'NULL';	//test;
	//		var thisNodeValue = '0';	//test;
	//	} else {	// test;
			var thisNodeName = thisx[0].childNodes[1].nodeName;	
			var thisNodeValue = thisx[0].childNodes[1].firstChild.nodeValue;
	//	}	//test;
	}

	var theItemText = document.createTextNode(thisNodeValue);
	alert ( "topNodeName:" + thisItemName + "\n" +
			"childNodeName:" + thisNodeName + "\n" +
			"childNodeValue:" + thisNodeValue + "\n");
}

