//Written by Shawn Mikula, 2007.   Contact: brainmaps--at--gmail.com.   You are free to use this software for non-commercial use only, and only if proper credit is clearly visibly given wherever the code is used. 

winsize();
window.onresize=winsize;

var tileSize = 256;
var clickedTree=0;
var treeCounter=0;
var toggleNotes=1;
var labShiftX=20;
var labShiftY=100;
var clickedPubmed=0;
var clickedGrabLabels=0;
var clickedSearch=0;
var hlabeled=0;
var center=0;

var height;
var width;
var path;
var imgpath;
var loadedJSON=0;
var JSON;
var JSONnum;
var JSONout;
var slidePointer=0;
var datid;
var sname;
var wheelmode=0;


var zoomswitch=3;  //max tier before switch to highlight

var innerDiv;

hlabel  = unescape(getVar('hlabel'));

var dragging = false;   // used to control moving the map div
var mTop;
var mLeft;
var dragStartTop;
var dragStartLeft;

sname=getVar('sname');
datid=getVar('datid');

imgpath2=getVar('path'); 

if (imgpath2.length>2){
	imgpath=imgpath2;
	gImageWidth=getVar('width');
	gImageHeight=getVar('height');
}

if (res.length<1) res=0.46;

vTier2 = getVar('vT'); 
if (vTier2.length>0){
	var zoom=vTier2;
}else{
	var zoom = 2;
}


function init() {	
	resunits =getVar('resunits'); 
	if (resunits.length<1) resunits="um";
	
	if (!loadedJSON){
		loadJSON();
	}
	
	
	var outerDiv = $("outerDiv");
	outerDiv.onmousedown = startMove;         //mouse listeners for dragging
	outerDiv.onmousemove = processMove;
	outerDiv.onmouseup = stopMove;
	outerDiv.ondragstart = function() { return false; }     // necessary to enable dragging on IE
	tempWidth = gImageWidth;  //START: COMPUTE gTierCount
	tempHeight =gImageHeight;	
	var j;
	divider=2;
	gTierCount = 1;
	while (tempWidth>tileSize || tempHeight>tileSize){	 
			tempWidth = Math.floor(gImageWidth/divider)
			tempHeight = Math.floor(gImageHeight/divider);
			
			divider*=2;
			if(tempWidth%2){ tempWidth++;}
			if(tempHeight%2){ tempHeight++;}		
	    gTierCount++;
	}     //END: COMPUTE gTierCount
	

	
	hlabeled=0;
	if ((getVar('vX').length)>0){ innerDiv.style.left=-getVar('vX'); innerDiv.style.top=-getVar('vY');}
	showThumb();
	if (toggleNotes){
		var imageLabels=$("imageLabels");
		var divs = imageLabels.getElementsByTagName("div");
		while (divs.length > 0) imageLabels.removeChild(divs[0]);

		var labClickOutput = $("labClickOutput");
		labClickOutput.style.display="none";
		labClickOutput.innerHTML="";

		var urlLabels = "get-labels.php?datid=" + escape(datid) +"&sname=" + escape(sname); 
		labels.open("GET", urlLabels, true);
		labels.onreadystatechange = labelsHandler;
		labels.send(null);
	}
	checkTiles();
	updateZoom();
}


function startMove(event) {
                if (!event) event = window.event;    // necessary for IE
                dragStartLeft = event.clientX;
                dragStartTop = event.clientY; 
                //var innerDiv = $("innerDiv");
                mTop = stripPx(innerDiv.style.top);
                mLeft = stripPx(innerDiv.style.left);
                dragging = true;
                //moveThumb2();
                return false;
}


function processMove(event) {
	if (!event) event = window.event;  // for IE
	//var innerDiv = $("innerDiv");
	if (clickedNotes){
		$('notesX').value=Math.round(((-stripPx(innerDiv.style.left)+event.clientX-0)/(gImageWidth/(Math.pow(2,gTierCount-1-zoom)))*1000))/1000;  //3
		$('notesY').value=Math.round(((-stripPx(innerDiv.style.top)+event.clientY-16)/(gImageHeight/(Math.pow(2,gTierCount-1-zoom)))*1000))/1000;
	}
	if (dragging) {
		innerDiv.style.top = mTop + (event.clientY - dragStartTop);
		innerDiv.style.left = mLeft + (event.clientX - dragStartLeft);
		//alert(mTop);
		//$('theInfo').innerHTML=(-stripPx(innerDiv.style.left)) + "&nbsp;&nbsp;" + (-stripPx(innerDiv.style.top));  // + "<br>" + gTileCountWidth[zoom] + " " + gTileCountHeight[zoom];
	 }
	 checkTiles();
}

        
function checkTiles() {      // check which tiles should be visible in the inner div
innerDiv = $("innerDiv");
	var visibleTiles = getVisibleTiles();   
	var visibleTilesMap = {};        // add each tile to the imageTiles div, checking first to see  if it has already been added
	for (i = 0; i < visibleTiles.length; i++) {
		var tileArray = visibleTiles[i];
        	gTileCountWidth=new Array();
		gTileCountHeight=new Array();
		tempWidth = gImageWidth;
		tempHeight = gImageHeight;
		var j;
		divider=2;
		for (j=gTierCount-1; j>=0; j--){
			gTileCountWidth[j] = Math.floor(tempWidth/tileSize);
			if (tempWidth%tileSize) gTileCountWidth[j]++;					
			gTileCountHeight[j] = Math.floor(tempHeight/tileSize);
			if (tempHeight%tileSize) gTileCountHeight[j]++;
			tempWidth = Math.floor(gImageWidth/divider);
			tempHeight = Math.floor(gImageHeight/divider);
			divider*=2;
			if(tempWidth%2) tempWidth++;
			if(tempHeight%2) tempHeight++;
		}
		if (!center){ //alert(gTileCountWidth[zoom]*tileSize);
			
			innerDiv.style.left=-(gImageWidth/(Math.pow(2,gTierCount-1-zoom)) )/2+viewportWidth/2; 			
			innerDiv.style.top=-(gImageHeight/(Math.pow(2,gTierCount-1-zoom)))/2+viewportHeight/2;
			center=1;
		}
		moveThumb2();
		pCol=tileArray[0];
		pRow=tileArray[1];
		tier=zoom;
		var theOffset=parseFloat(pRow*gTileCountWidth[tier]+pCol);
		var theTier;
		for (theTier=0; theTier<tier; theTier++) theOffset += gTileCountWidth[theTier]*gTileCountHeight[theTier];
		_tileGroupNum=Math.floor(theOffset/256.0);
		if (pCol<gTileCountWidth[zoom] && pRow<gTileCountHeight[zoom]) var tileName = "TileGroup" + _tileGroupNum + "/" + zoom + "-" + pCol + "-" + pRow + ".jpg";
		visibleTilesMap[tileName] = true;
		var img = $(tileName);
		if (!img) {
			img = document.createElement("img");
			img.src = imgpath +  tileName;
			img.style.position = "absolute";
			img.style.left = (tileArray[0] * tileSize) + "px";
			img.style.top = (tileArray[1] * tileSize) + "px";
			img.style.zIndex = 0;
			img.setAttribute("id", tileName);
			$("imageTiles").appendChild(img);
		}
	}
	var imageTiles=$("imageTiles");
	var imgs = imageTiles.getElementsByTagName("img");
	for (i = 0; i < imgs.length; i++) {
		var id = imgs[i].getAttribute("id");
		if (!visibleTilesMap[id]) {
			imageTiles.removeChild(imgs[i]);
			i--;  // compensate for live nodelist
		}
	}
}
                       

function getVisibleTiles() {
	//var innerDiv = $("innerDiv");
	var mapX = stripPx(innerDiv.style.left);
	var mapY = stripPx(innerDiv.style.top);
	var startX = Math.abs(Math.floor(mapX / tileSize)) - 2;
	var startY = Math.abs(Math.floor(mapY / tileSize)) -1;
	var tilesX = Math.ceil(viewportWidth / tileSize) + 2;
	var tilesY = Math.ceil(viewportHeight / tileSize) + 1;
	var visibleTileArray = [];
	var counter = 0;
	for (x = startX; x < (tilesX + startX); x++) {
		for (y = startY; y < (tilesY + startY); y++) {
			if (x>=0 && y>=0){
				visibleTileArray[counter++] = [x, y];
			}
		}
	}
	return visibleTileArray;
}


function stopMove() {
	//var innerDiv = $("innerDiv");
	//innerDiv.style.cursor = "";
	dragging = false;
}

 
function refreshTiles() {
	var imageTiles = $("imageTiles");
	var imgs = imageTiles.getElementsByTagName("img");
	while (imgs.length > 0) imageTiles.removeChild(imgs[0]);
}


function ZoomIn() {
	if (zoom!=gTierCount-1){
		zoom=zoom+1;
		//var innerDiv = $("innerDiv");
		mTop = stripPx(innerDiv.style.top);
		mLeft = stripPx(innerDiv.style.left);
		innerDiv.style.top = 2*mTop-viewportHeight/2;
		innerDiv.style.left = 2*mLeft-viewportWidth/2;
		var labClickOutput = $("labClickOutput");
		var labtop = stripPx(labClickOutput.style.top);
		var lableft = stripPx(labClickOutput.style.left);
		labClickOutput.style.top = 2*labtop + labShiftY;
		labClickOutput.style.left = 2*lableft  - labShiftX;
		updateZoom();
		var imageTiles = $("imageTiles");
		var imgs = imageTiles.getElementsByTagName("img");
		while (imgs.length > 0) imageTiles.removeChild(imgs[0]);
		checkTiles();
		var divs = imageLabels.getElementsByTagName("div");
		for (var $i = 0; $i <divs.length; $i++){
			var Ltemp="L"+$i;
			$(Ltemp).style.top=2*stripPx($(Ltemp).style.top);
			$(Ltemp).style.left=2*stripPx($(Ltemp).style.left);
			if ($(Ltemp+'t').className!="lab3"){ if (zoom>zoomswitch){$(Ltemp+'t').className="lab2";}else{$(Ltemp+'t').className="lab";}}  //zoom switch to highlight
		}
	}
}


function ZoomOut() {
	if (zoom!=0){
		zoom=zoom-1;
		//var innerDiv = $("innerDiv");
		mTop = stripPx(innerDiv.style.top);
		mLeft = stripPx(innerDiv.style.left);
		innerDiv.style.top = mTop/2 + viewportHeight/4;
		innerDiv.style.left = mLeft/2 + viewportWidth/4;
		var labClickOutput = $("labClickOutput");
		var labtop = stripPx(labClickOutput.style.top);
		var lableft = stripPx(labClickOutput.style.left);
		labClickOutput.style.top = .5*labtop - .5*labShiftY;
		labClickOutput.style.left = .5*lableft + .5*labShiftX;
		updateZoom();
      		var imageTiles = $("imageTiles");
		var imgs = imageTiles.getElementsByTagName("img");
		while (imgs.length > 0) imageTiles.removeChild(imgs[0]);
		checkTiles();
		var divs = imageLabels.getElementsByTagName("div");
		for (var $i = 0; $i <divs.length; $i++){
			var Ltemp="L"+$i;
			$(Ltemp).style.top=.5*stripPx($(Ltemp).style.top);
			$(Ltemp).style.left=.5*stripPx($(Ltemp).style.left);
			if ($(Ltemp+'t').className!="lab3"){ if (zoom>zoomswitch){$(Ltemp+'t').className="lab2";}else{$(Ltemp+'t').className="lab";}}  //zoom switch to highlight
		}
	}
}


function updateZoom() {
	if (JSONnum){
	$('theScale').innerHTML=Math.pow(2,gTierCount-1-zoom)*res*50 + " " + resunits + "<br><br>zoom level: " + zoom + "/" + (gTierCount-1) + "<br>slide #: " + (slidePointer+1) + "/" + JSONnum;
	}
}


function link1(){
	//var innerDiv = $("innerDiv");
	mapX = stripPx(innerDiv.style.left);
	mapY = stripPx(innerDiv.style.top);
	$('leurl').value="http://brainmaps.org/ajax-viewer.php?datid=" + datid + "&sname=" + sname + "&vX=" + (-mapX) + "&vY=" + (-mapY) + "&vT=" + zoom;
	$('leurl2').value="?path=" + imgpath + "&width=" + gImageWidth + "&height=" + gImageHeight + "&vX=" + (-mapX) + "&vY=" + (-mapY) + "&vT=" + zoom;
	$('le').style.display="block";
}


function link1close(){
	$('le').style.display="none";
}


function link1a(){
	$('uri1').href="http://brainmaps.org/redirect/redir.php?id=/HBP-JPG/" + datid + "/" + sname + ".jpg";
	$('uri2').href="http://brainmaps.org/index.php?file=" + dirname +  sname + "/&dirname=" + dirname + "&viewerZoom=1&win=max";
	$('uri3').href="http://brainmaps.org/annotator.php?url=" + imgpath;
	$('uri-info').innerHTML="width = " + gImageWidth + " , height = " + gImageHeight;
	$('le2').style.display="block";
}


function link1aclose(){
	$('le2').style.display="none";
}











//Thumb Functions
function showThumb(){
var Thumb=$('Thumb');	
Thumb.innerHTML='<img src="' + imgpath + 'TileGroup0/0-0-0.jpg" onclick="clickThumb(event)">';
$('Thumb0').style.height=gImageHeight/(Math.pow(2,gTierCount-1))+2;
$('Thumb0').style.width=gImageWidth/(Math.pow(2,gTierCount-1))+3;
Thumb.style.display="block";
$('Thumb2').style.display="block";

	//Thumb.onmousedown = startMove;
	//Thumb.onmousemove = processMove;
	Thumb.onmouseup = clickThumb;
	Thumb.ondragstart = function() { return false; }  // necessary to enable dragging on IE
}

function hideThumb(){
$('Thumb').style.display="none";
}

function moveThumb2(){
	var Thumb2 = $("Thumb2");
	topT = stripPx(innerDiv.style.top);
	leftT = stripPx(innerDiv.style.left);
Thumb2.style.width=viewportWidth/Math.pow(2,zoom);
Thumb2.style.height=viewportHeight/Math.pow(2,zoom);
Thumb2.style.left=-leftT/(Math.pow(2,zoom));
Thumb2.style.top=-topT/(Math.pow(2,zoom));

//$("Debug").innerHTML=Thumb2.style.left+" "+Thumb2.style.top+"<br>"+Thumb2.style.width+" "+Thumb2.style.height+"<br>"+leftT+" "+topT;
				
}

function clickThumb(event){
	if (event){
	xThumb = event.clientX;
	yThumb = event.clientY;
	var innerDiv = $("innerDiv");

innerDiv.style.left=-(1-Math.abs(viewportWidth-xThumb)/stripPx($("Thumb0").style.width))*gImageWidth/(Math.pow(2,gTierCount-zoom-1));  //   500;//-leftT/(Math.pow(2,zoom));
innerDiv.style.top=-(1-Math.abs(viewportHeight-yThumb)/stripPx($("Thumb0").style.height))*gImageHeight/(Math.pow(2,gTierCount-zoom-1));  //500;//-topT/(Math.pow(2,zoom));
moveThumb2()
//$("Debug").innerHTML=innerDiv.style.left+" "+stripPx($("Thumb0").style.width) + " " + Math.abs(viewportWidth-xThumb)/stripPx($("Thumb0").style.width)+" "+gImageWidth/(Math.pow(2,gTierCount-zoom));
	}
				
}






//NOTES FUNCTIONS
  
var clickedNotes=0;

function link2notes(){
clickedNotes=1;
$('Notes').style.display="block";
}

function closeNotes(){
clickedNotes=0;
$('Notes').style.display="none";
}


var urlNotes = "add-notes.php";
var httpNotes = getHTTPObject();

function addNotes(obj){

var parameters="y=" + encodeURI($("notesY").value) +"&x=" + encodeURI($("notesX").value) +"&key=" + encodeURI($("notesKey").value) + "&label=" + encodeURI($("notesLabel").value) + "&name=" + encodeURI($("notesName").value) + "&ip=" + encodeURI(ip) + "&datid=" + datid + "&notes=" + encodeURI($("notesNotes").value) + "&sname=" + encodeURI(sname);
//window.alert(parameters);
httpNotes.onreadystatechange = addNotesResponse;
httpNotes.open("POST", urlNotes, true);
httpNotes.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
httpNotes.setRequestHeader("Content-length", parameters.length);
httpNotes.setRequestHeader("Connection", "close");
httpNotes.send(parameters);
}

function addNotesResponse() {
  if (httpNotes.readyState == 4) {
    // Split the comma delimited response into an array
    addNotesResults = httpNotes.responseText;
    //$('addNotesOutput').innerHTML = addNotesResults;
addNotesOutput.innerHTML = addNotesResults;
//$('addNotesOutput').innerHTML = "TEST";

init();
//refreshTiles();
checkTiles();

  }
}



labels = getHTTPObject();

function loadNotes(){

var urlLabels = "get-labels.php?datid=" + escape(datid) +"&sname=" + escape(sname); 
                var pinImage = $("L0");
                if (pinImage) {

imageLabels = $("imageLabels");
var divs = imageLabels.getElementsByTagName("div");
while (divs.length > 0) imageLabels.removeChild(divs[0]);
//checkTiles();
toggleNotes=0;
$('togglenotes').innerHTML = "<i>(Off)</i>";         
labClickOutput.style.display="none";        
                }else{

labels.open("GET", urlLabels, /*async*/true);
labels.onreadystatechange = labelsHandler;
labels.send(/*no params*/null);

toggleNotes=1;
$('togglenotes').innerHTML = "<i>(On)</i>";
//labClickOutput.style.display="block";
}
}

function labelsHandler() {
   if (labels.readyState == 4 /*complete*/) {

var labels2 = eval('('+labels.responseText+')');
var lab=labels2.labels.length;

for (var $i = 0; $i < lab; $i++){  //L1
       var label = labels2.labels[$i].label;
       var name = labels2.labels[$i].name;
       //notes = labels2.labels[$i].notes;
       var nX = labels2.labels[$i].x;
       var nY = labels2.labels[$i].y;
       var noteId = labels2.labels[$i].Id;
//$('addNotesOutput').innerHTML = nX + " " + nY;// + " " + sizeof(labels2);

                //var imageLabels = $("imageLabels");
                pinImage = document.createElement("div");
                pinImage.style.position = "absolute";
//                pinImage.style.left =nX*gTileCountWidth[zoom]*256 +"px";
//                pinImage.style.top =  nY*gTileCountHeight[zoom]*256 + "px";
                pinImage.style.left =(nX*gImageWidth/(Math.pow(2,gTierCount-1-zoom))) +"px";
                pinImage.style.top =(nY*gImageHeight/(Math.pow(2,gTierCount-1-zoom))) +"px";
                pinImage.style.width = 8*label.length + "px";
                pinImage.style.height = "2px";
                pinImage.style.zIndex = 1;
                pinImage.setAttribute("id", "L"+$i);


var hclass="";

if (hlabel==label){
hclass="lab3";
hlabeled=1;
}else{
if (zoom>zoomswitch){
hclass="lab2";
}else{		
hclass="lab";
}
}

pinImage.innerHTML='<a href="javascript:labClick(\'' + label + '\',\'' + name + '\',' + $i + ',' + noteId + ');" id="L' + $i+'t" class="' + hclass + '">' + label + '</a>';
$("imageLabels").appendChild(pinImage);


}   //L1

if (!hlabeled){
document.title='BrainMaps.org - Interactive Brain Atlas, Neuroanatomy, Brain Mapping';
}

   }
}


function labClick(label2,name2,i2,id){
var labClickOutput = $('labClickOutput');

labClickOutput.style.display = "block";

var Ltemp="L"+i2;
labClickOutput.style.left = stripPx($(Ltemp).style.left)  + labShiftX;
labClickOutput.style.top = stripPx($(Ltemp).style.top)  - labShiftY;
labClickOutput.innerHTML = '<b class="t"><b class="r"></b></b><div class="c"><div style="float:left" class="lab"><b>' + label2 + '</b></div><div style="float:right"><a href="javascript:deleteNote(\'' + id + '\');"><img src="delete.gif"/></a>&nbsp;&nbsp;<a href="javascript:closeLab();"><img  src="close.gif"/></a></div><br clear="all"><div class="lab">' + name2 + '</div><br><div class="lab"><small><a href="javascript:parsePubmed(\'' + name2 + '\');" class="fnav2">Parse Pubmed</a>&nbsp;&middot; <a href="javascript:ajaxSearch2(\'' + name2 + '\');" class="fnav2">Search&nbsp;Dataset</a></small></div></div><b class="b"><b class="r"><!-- --></b></b>';


//if ($(Ltemp+'t').className=="lab2"){$(Ltemp+'t').className="lab";}else{$(Ltemp+'t').className="lab2";}	

 }

function closeLab(){
var labClickOutput = $('labClickOutput');
labClickOutput.style.display="none";
labClickOutput.innerHTML="";
}




//DELETE NOTE

var urlDeleteNote = "delete-note.php";
var httpDeleteNote = getHTTPObject();

function deleteNote(id2){

var parameters="id=" + encodeURI(id2) +"&key=" + encodeURI($("notesKey").value);
$('Notes').style.display="block";
//window.alert(parameters);

httpDeleteNote.onreadystatechange = deleteNoteResponse;
httpDeleteNote.open("POST", urlDeleteNote, true);
httpDeleteNote.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
httpDeleteNote.setRequestHeader("Content-length", parameters.length);
httpDeleteNote.setRequestHeader("Connection", "close");
httpDeleteNote.send(parameters);

}

function deleteNoteResponse() {
  if (httpDeleteNote.readyState == 4) {
    // Split the comma delimited response into an array
    deleteNoteResults = httpDeleteNote.responseText;
    $('addNotesOutput').innerHTML = deleteNoteResults;
//$('addNotesOutput').innerHTML = "TEST";

init();
//refreshTiles();
checkTiles();

  }
}








//PARSE PUBMED


//var urlPubmed = 'parse-pubmed.php?pm="' + 'thalamus' + '"';
//var urlPubmed = "parse-pubmed.php?pm=thalamus";
var pmhttp = getHTTPObject(); 

function parsePubmed(pm){

pm2=escape(pm);
var urlPubmed = 'parse-pubmed.php?pm=' + escape(pm);

$('parsePubmed2').style.display="block";

$('parsePubmed2').innerHTML = '<table class="letbl" width="100%"><tr><td class="lelbl">&nbsp;</td><td class="leclose"><a href="parse-pubmed.php?pm=' + pm2 + '" target="_blank"><img  src="fullscreen.gif"/></a>&nbsp;&nbsp;<a href="javascript:closePubmed();"><img  src="close.gif"/></a></td></tr><tr><td colspan="2">Waiting for Results from Pubmed.....</td></tr></table>';

clickedPubmed=1;


//$('parsePubmed2').innerHTML='<iframe src="parse-pubmed.php?pm=' + escape(pm) + '" />';

  pmhttp.open("GET", urlPubmed, true);
  pmhttp.onreadystatechange = handlePubmedResponse;
  pmhttp.send(null); 


 
}

function handlePubmedResponse() {
  if (pmhttp.readyState == 4) {


    pubmedResults = pmhttp.responseText;
//$('parsePubmed2').innerHTML ="TEST";
$('parsePubmed2').innerHTML = '<table class="letbl" width="100%"><tr><td class="lelbl">&nbsp;</td><td class="leclose"><a href="parse-pubmed.php?m=1&pm=' + pm2 + '" target="_blank"><img  src="fullscreen.gif"/></a>&nbsp;&nbsp;<a href="javascript:closePubmed();"><img  src="close.gif"/></a></td></tr><tr><td colspan="2">' + pubmedResults + '</td></tr></table>';

  }
}

function closePubmed(){
$('parsePubmed2').style.display="none";
clickedPubmed=0;
}
















//SEARCH FUNCTIONS

function link2search(){
clickedSearch=1;
searchMode1();
$('Search').style.display="block";
}

var urlSearch = "ajaxSearch.php";
var shttp = getHTTPObject();

function ajaxSearch(q2){
urlSearch = 'ajaxSearch.php?q=' + escape($("q").value) + '&datid=' + escape(datid);
$('Search').style.display="block";
ajaxSearchNow();
}
function ajaxSearch2(q2){
urlSearch = 'ajaxSearch.php?q=' + escape(q2) + '&datid=' + escape(datid);
searchMode1();
$('Search').style.display="block";
$("q").value=q2;

ajaxSearchNow();
}

function ajaxSearchNow(){

clickedSearch=1;

shttp.open("GET", urlSearch, true);
shttp.onreadystatechange = handleSearchResponse;
shttp.send(null); 
 
}

function handleSearchResponse() {
  if (shttp.readyState == 4) {

    searchResults = shttp.responseText;
//searchOut=$('searchOut');
searchOut.style.height ="400";
//searchOut.style.width ="34em";
searchOut.innerHTML =searchResults;
//$('searchOut').innerHTML =urlSearch;

  }
}

function closeSearch(){
$('Search').style.display="none";
clickedSearch=0;
}

function searchMode1(){
$('SearchMode').innerHTML='<div style="float:left" class="lab"><b>Search:</b> <small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="color" value="searchmode1" checked  onClick="searchMode1()">&nbsp;within this dataset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="color" value="searchmode2" onClick="searchMode2()" >&nbsp;across all datasets</small></div><div style="float:right"><a href="javascript:ajaxSearch2(\'\');" class="fnav2"><small>[ View All ]</a></small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:closeSearch();"><img src="close.gif"/></a>&nbsp;</div><br clear="all"><div style="float:left;padding:4;" ><FORM action="javascript:ajaxSearch(document.getElementById(\'q\'));" method="GET" id="searchForm" autocomplete="off"><INPUT type="text" id="q" name="q" size="40"  onMouseOver="select()">&nbsp;<input value="Go" type="submit" class="searchButton2"> </FORM></div>';
}

function searchMode2(){
$('SearchMode').innerHTML='<div style="float:left" class="lab"><b>Search:</b> <small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="color" value="searchmode1" onClick="searchMode1()">&nbsp;within this dataset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="color" value="searchmode2" onClick="searchMode2()" checked  >&nbsp;across all datasets</small></div><div style="float:right"><a href="index.php?y=" class="fnav2"><small>[ View All ]</a></small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="javascript:closeSearch();"><img src="close.gif"/></a>&nbsp;</div><br clear="all"><div style="float:left;padding:4;" ><FORM method=get action="index.php" autocomplete="off"><INPUT type="text" id="txtSearch" name="y" alt="Search Criteria" onkeyup="searchSuggest();" onblur="searchSuggestHide();"  autocomplete="off" size="40">&nbsp;<input value="Go" type="submit" class="searchButton2"> </FORM></div>';
}





// SHOW DATASET LABELS
var dhttp = getHTTPObject();

function grabLabels(datid, species){
grabLabel = 'get-labels2.php?species=' + escape(species);
$('grabLabels2').style.display="block";
grabLabelNow();
}

function grabLabelNow(){

clickedGrabLabels=1;

dhttp.open("GET", grabLabel, true);
dhttp.onreadystatechange = handleGrabLabelResponse;
dhttp.send(null); 
 
}

function handleGrabLabelResponse() {
  if (dhttp.readyState == 4) {

grabLabelResults3 = dhttp.responseText;
    
/*
var grabLabelResults2='';
    
var grabLabelResults = eval('('+dhttp.responseText+')');
var grablab=grabLabelResults.labels.length;

for (var $i = 0; $i < grablab; $i++){  //L1
       var label2 = grabLabelResults.labels[$i].label;
       var name2 = grabLabelResults.labels[$i].name;
       grabLabelResults2 += "<div nowrap><a href=\"javascript:addGrabLabel('"+label2+"','"+name2+"');\"><b>"+label2 + "</b> - " + name2 + "</a></div>";
}
 */   
    
$('grabLabels2').innerHTML = '<table class="letbl" width="100%"><tr><td class="lelbl">&nbsp;</td><td class="leclose"><a href="javascript:closeGrabLabels2();"><img  src="close.gif"/></a></td></tr></table><table class="letbl" width="100%"><tr><td colspan="2" nowrap>' + grabLabelResults3 + '</td></tr></table>';

//$('grabLabels2').innerHTML =grabLabelResults3;
  }
}
function closeGrabLabels2(){
$('grabLabels2').style.display="none";
clickedGrabLabels=0;
}
function addGrabLabel(label,name){
$('notesLabel').value=label;
$('notesName').value=name;
}










//WHEEL MODE

function wheelMode1(){
$('wheelMode').innerHTML='<b>Mouse Wheel:</b><br><input type="radio" checked  onClick="wheelMode1()">&nbsp;Zoom<br><input type="radio" onClick="wheelMode2()" >&nbsp;Next/Prev';
wheelmode=0;
}

function wheelMode2(){
$('wheelMode').innerHTML='<b>Mouse Wheel:</b><br><input type="radio" onClick="wheelMode1()">&nbsp;Zoom<br><input type="radio" checked  onClick="wheelMode2()" >&nbsp;Next/Prev';
wheelmode=1;
}















//TREE FUNCTIONS


function link2tree(){
if (treeCounter==0){

if (clickedTree==0){
clickedTree=1;
updateTree();
}else{
$('divTree').style.background="";
$('divTree').style.border="0px";
}

$('Hierarchy').style.display="block";




treeCounter=1;

}else if(treeCounter==1){
$('divTree').style.background="#DDDDFF";
$('divTree').style.border="1px solid #0055FF";
treeCounter=2;
}else{
$('divTree').style.background=="";
$('Hierarchy').style.display="none";
treeCounter=0;
}
 
}

var urlTree = "get-hierarchy.php?class=" + escape(spclass); 
var http = getHTTPObject(); 



function updateTree() {
  http.open("GET", urlTree, true);
//http.open("GET", urlTree + escape(zipValue), true);
  http.onreadystatechange = handleHttpResponse;
  http.send(null);
}


function handleHttpResponse() {
  if (http.readyState == 4) {
    // Split the comma delimited response into an array
    treeResults = http.responseText;
    $('Hierarchy').innerHTML = treeResults;

  }
}


function treePopup(label2,name2){
var treeClickOutput = $('treeClickOutput');

treeClickOutput.style.display = "block";


treeClickOutput.innerHTML = '<b class="t"><b class="r"></b></b><div class="c"><div style="float:left" class="lab"><b>' + label2 + '</b></div><div style="float:right"><a href="javascript:closeTreePopup();"><img  src="close.gif"/></a></div><br clear="all"><div class="lab">' + name2 + '</div><br><div class="lab"><small><a href="javascript:parsePubmed(\'' + name2 + '\');" class="fnav2">Parse Pubmed</a>&nbsp;&middot; <a href="javascript:ajaxSearch2(\'' + name2 + '\');" class="fnav2">Search&nbsp;Dataset</a></small></div></div><b class="b"><b class="r"><!-- --></b></b>';

 }

function treePopupEvent(event){
                // necessary for IE
                if (!event) event = window.event;

treeClickOutput.style.left = event.clientX - 220;
treeClickOutput.style.top = event.clientY - 25;
}

function closeTreePopup(){
treeClickOutput.style.display="none";
treeClickOutput.innerHTML="";
}

























//SERIES SCROLL



seriesScrollCounter=0;
function seriesScroll(seriesValue){

seriesScrollCounter++;

if (seriesScrollCounter<5){
if (seriesValue=="next"){
window.setTimeout('slideNext()', 2000);
window.setTimeout('seriesScroll("next")', 2000);
}else{
window.setTimeout('slidePrev()', 2000);
window.setTimeout('seriesScroll("prev")', 2000);
}
}else{
seriesScrollCounter=0;
}

//}
}














//SLIDE SWITCHING




function loadJSON(){

JSONrequest = getHTTPObject();
 

JSONrequest.onreadystatechange = JSONread;
JSONrequest.open("GET", "get-slide2.php?datid=" + escape(datid) , true);
//JSONrequest.open("GET", "ABAcor.txt" , true);
JSONrequest.send(null);
}

function JSONread() {
if (JSONrequest.readyState == 4) {

JSONout = eval('('+JSONrequest.responseText+')');
JSONnum=JSONout.slides.length;
//path = JSONout.slides[slidePointer].path; 
//width = JSONout.slides[slidePointer].width;
//height = JSONout.slides[slidePointer].height;

for (var counter = 0; counter <= JSONnum; counter++ ) 
{  
	 if( JSONout.slides[counter].sname == sname ) 
 { 
 	 slidePointer=counter;   break;
 	 }
}

updateZoom();        
loadedJSON=1;
//init();
}

}


function slideNext(){

	if (slidePointer<JSONnum-1){
		slidePointer++; 
	}else{
		slidePointer=0;
	}
	
	imgpath = JSONout.slides[slidePointer].path;   
	sname=JSONout.slides[slidePointer].sname;
	gImageWidth = JSONout.slides[slidePointer].width;
	gImageHeight = JSONout.slides[slidePointer].height;
	res = JSONout.slides[slidePointer].res;
	init();
	refreshTiles();
	$('titleslidename').innerHTML=sname;
	checkTiles();
	

}

function slidePrev(){

	if (slidePointer>0){
		slidePointer--;
	}else{
		slidePointer=JSONnum-1;	
	}
	
	imgpath = JSONout.slides[slidePointer].path;
	sname=JSONout.slides[slidePointer].sname;	
	gImageWidth = JSONout.slides[slidePointer].width;
	gImageHeight = JSONout.slides[slidePointer].height;
	res = JSONout.slides[slidePointer].res;
	init();
	refreshTiles();
	$('titleslidename').innerHTML=sname;	
	checkTiles();
	

}









//OLD SLIDE SWITCHING

var req = getHTTPObject();
 

function slideNav2(datid2,slideName,hlabel2){
hlabel=hlabel2;

sname=slideName;
datid=datid2;
var urlSlide = "get-slide.php?datid=" + escape(datid) +"&sname=" + escape(sname); // The server-side script

req.open("GET", urlSlide, /*async*/true);
req.onreadystatechange = slideHandler;
req.send(/*no params*/null);


}




function slideHandler() {
   if (req.readyState == 4 /*complete*/) {

       //$('Debug').innerHTML+=req.responseText;

var newdata = eval('('+req.responseText+')');
       imgpath = newdata.imgpath;
       gImageWidth = newdata.gImageWidth;
       gImageHeight = newdata.gImageHeight;
       res = newdata.res;
       //slidePrev = newdata.slidePrev;
       //slideNext = newdata.slideNext;
       spclass = newdata.spclass;

//$('Debug').innerHTML=spclass;

for (var counter = 0; counter <= JSONnum; counter++ ) 
{  
	 if( JSONout.slides[counter].sname == sname ) 
 { 
 	 slidePointer=counter;   break;
 	 }
}

updateZoom();        
init();
refreshTiles();

$('titleslidename').innerHTML=sname;


checkTiles();

   }


}



































// GENERIC FUNCTIONS



function getHTTPObject() {
var xhr;
	try {
		xhr=new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e){
		try {
			xhr= new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E){
		xhr=false;
		}
	}
if (!xhr && typeof XMLHttpRequest != ' undefined'){
	xhr=new XMLHttpRequest();
}
return xhr;
}








function winsize(){
	viewportWidth = 1300;
	viewportHeight = 1000;

  	if( typeof( window.innerWidth ) == 'number' ) {
    	viewportWidth = window.innerWidth;
    	viewportHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    	viewportWidth = document.documentElement.clientWidth;
    	viewportHeight = document.documentElement.clientHeight;
  	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    	viewportWidth = document.body.clientWidth;
    	viewportHeight = document.body.clientHeight;
  	}
//document.write("Window width = "+viewportWidth+"&nbsp;"+"Window height = "+viewportHeight)
}





function stripPx(value) {
	if (value == "") return 0;
	return parseFloat(value.substring(0, value.length - 2));
}





//ALIASES

function $(i) {
	return document.getElementById(i);
}






//START: Mouse-Wheel Zoom
function handle(delta) {
        if (delta < 0)
        	if (wheelmode==0){
			ZoomIn();
		}else{
			slideNext();
		}
        else
		if (wheelmode==0){
			ZoomOut();
		}else{
			slidePrev();
		}
}

function wheel(event){
	if (!clickedPubmed && treeCounter==0 && !clickedSearch && !clickedGrabLabels){
        var delta = 0;
        if (!event) /* For IE. */
                event = window.event;
        if (event.wheelDelta) { /* IE/Opera. */
                delta = event.wheelDelta/120;
    
        } else if (event.detail) { /** Mozilla case. */
                /** In Mozilla, sign of delta is different than in IE.
                 * Also, delta is multiple of 3.
                 */
                delta = -event.detail/3;
        }
        /** If delta is nonzero, handle it.
         * Basically, delta is now positive if wheel was scrolled up,
         * and negative, if wheel was scrolled down.
         */
        if (delta)
                handle(delta);
        /** Prevent default actions caused by mouse wheel.
         * That might be ugly, but we handle scrolls somehow
         * anyway, so don't bother here..
         */
        if (event.preventDefault)
                event.preventDefault();
	event.returnValue = false;
}
}

if (window.addEventListener)
        /** DOMMouseScroll is for mozilla. */
        window.addEventListener('DOMMouseScroll', wheel, false);
/** IE/Opera. */
window.onmousewheel = document.onmousewheel = wheel;


//END: Mouse-Wheel Zoom





//KEYPRESS EVENTS

function capturekey(e){
var k=(typeof event!='undefined')?window.event.keyCode:e.keyCode;

	if ( k == 187 || k== 61){
		ZoomIn();
	}else if( k == 189 || k== 109){
		ZoomOut();
	}else if(k== 34 || ((k == 39 || k== 40) && !clickedNotes)){
			slideNext();
	}else if(k== 33 || ((k == 37 || k== 38) && !clickedNotes)){
		slidePrev();
	}

}
if(navigator.appName!= "Mozilla"){document.onkeyup=capturekey}
else{document.addEventListener("keypress",capturekey,true);}











function getVar(name) {
	get_string =  document.location.search;         
	return_value = '';       
	do { //This loop is made to catch all instances of any get variable.
		name_index = get_string.indexOf(name + '=');
		if(name_index != -1) {
			get_string = get_string.substr(name_index + name.length + 1, get_string.length - name_index);
			end_of_value = get_string.indexOf('&');
			if(end_of_value != -1)                
				value = get_string.substr(0, end_of_value);                
			else                
				value = get_string;                
                
			if(return_value == '' || value == '')
				return_value += value;
			else
				return_value += ', ' + value;
		}
	} while(name_index != -1)
	space = return_value.indexOf('+');    //Restores all the blank spaces.
	while(space != -1) { 
		return_value = return_value.substr(0, space) + ' ' + 
		return_value.substr(space + 1, return_value.length);
		space = return_value.indexOf('+');
	} 
	return(return_value);        
}






//var isSafari=navigator.userAgent.indexOf("Safari")!=-1
var openImg=new Image()
openImg.src="open.gif"
var closedImg=new Image()
closedImg.src="closed.gif"

function showBranch(branch){
var objBranch=$(branch).style
if(objBranch.display=="none"){
objBranch.display="block"}
else{
objBranch.display="none"}
swapFolder(branch+'2')}

function swapFolder(img){
objImg=$(img)
if(objImg.src.indexOf('closed.gif')>-1){
objImg.src=openImg.src}
else{
objImg.src=closedImg.src}}
var anchorMemory="top"

function scrollDiv(sAnchor){
anchorMemory=sAnchor
$("divLegend").scrollTop=$(sAnchor).parentNode.offsetTop}

