﻿function openNode ( id ) {
	var parentNode = $( id );
	var taxonnumber = new String ( id );
	taxonnumber = taxonnumber.substr ( 1, taxonnumber.length );

	new Ajax.Request ( 'getnodechildren.php',
		{
			method: 'get',
			parameters: { nameid: taxonnumber, linkto: document.URL },
			onSuccess: function ( transport ) {
				var response = transport.responseText || "FAIL";
				//var responseArray = processResponseStringToArray(response);
				var newListElement = new Element ( 'ul' );
				parentNode.insert ( newListElement );
				/*for(var i = 0; i < responseArray.length; i++){
					if ($("t"+responseArray[i][0]) == null){
						var newNode = new Element('li', {'id': "t"+responseArray[i][0]});
						newListElement.insert(newNode);
						var newImage = new Element('img',{'src': "images/js/nolines_plus.gif", 'onclick': "openNode(\"t"+responseArray[i][0]+"\")", 'id': "i"+responseArray[i][0]});
						newNode.insert(newImage);
						var newHref = new Element('a',{'href': "taxonview.php?name="+responseArray[i][0]}).update(responseArray[i][1]);
						newNode.insert(newHref);
					}
				}
				*/
				newListElement.update(response);
				var nodeimage = $("i"+taxonnumber);
				//if (responseArray.length > 0){
					nodeimage.setAttribute("src","images/js/nolines_minus.gif");
					nodeimage.setAttribute("onclick","closeNode(\""+id+"\")");
				/*}
				else {
					nodeimage.setAttribute("src","images/js/empty.gif");
					nodeimage.removeAttribute("onclick");
				}
				*/
				//resize();
			},
			onFailure: function(transport){ 
				alert('Something went wrong... ' + transport.status);
			}
		});
}

function openNodeAgain(id){
	var parentNode = $(id);
	var children = parentNode.childElements();
	children.each(function(child){
		if(child.tagName == 'UL'){
			child.show();
		}
	});
	var nodeimage = $("i"+((new String(id)).substr(1)));
	nodeimage.setAttribute("src","images/js/nolines_minus.gif");
	nodeimage.setAttribute("onclick","closeNode(\""+id+"\")");
	//resize();
}

function closeNode(id){
	var parentNode = $(id);
	var children = parentNode.childElements();
	children.each(function(child){
		if(child.tagName == 'UL'){
			child.hide();
		}
	});
	var nodeimage = $("i"+((new String(id)).substr(1)));
	nodeimage.setAttribute("src","images/js/nolines_plus.gif");
	nodeimage.setAttribute("onclick","openNodeAgain(\""+id+"\")");
	//resize();
}

function getMainData(id){
	var resultDiv = $("taxondata");

	new Ajax.Request('gettaxonmaindata.php',
	{
		method:'get',
		parameters: {nameid: id},
		onSuccess: function(transport){
			var response = transport.responseText || "FAIL";
			resultDiv.update(response);
			getRelations(id);
			searchTaxons();
			getTaxonTree(id);
		},
		onFailure: function(transport){ 
			alert('Something went wrong... ' + transport.status);
		}
	});
}

function getTaxonTree(id){
	var resultDiv = $("taxontree");

	new Ajax.Request('gettaxontree.php',
	{
		method:'get',
		parameters: {nameid: id},
		onSuccess: function(transport){
			var response = transport.responseText || "FAIL";
			resultDiv.update(response);
		},
		onFailure: function(transport){ 
			alert('Something went wrong... ' + transport.status);
		}
	});
}

function getRelations(id){

	var resultDiv = $("relationdata");

	new Ajax.Request('gettaxonrelations.php',
	{
		method:'get',
		parameters: {nameid: id},
		onSuccess: function(transport){
			var response = transport.responseText || "FAIL";
			resultDiv.update(response);
		},
		onFailure: function(transport){ 
			alert('Something went wrong... ' + transport.status);
		}
	});
}

function searchTaxons(){
		
		var name = document.taxonSearchForm.searchkey.value;
		name = name.strip();
		var wildcard = document.taxonSearchForm.wildcard.checked;
		var currentTaxon = document.currentValues.currentTaxon.value;
		var currentName = document.currentValues.currentName.value;
		var form = $("taxonSearchForm");
		var searchType = form['searchType'];
		
		//alert( typeof searchType + ' - ' + searchType );
		
		var fullName = true;
		for ( var i=0; i < searchType.length; i++ )
		{
			if ( searchType[ i ].checked && searchType[ i ].value == "singlename" )
			{
				fullName = false;
			}
		}
		
		if (name.length == 0){
			return false;
		}
		else if (name.length < 2){
			alert("Keyword must be at least 2 letters.");
			return false;
		}
		else if (name.indexOf('%') >= 0){
			alert("Please do not use the % character.");
			return false;
		}
		else if (wildcard == true){
			name = "%" + name + "%";
		}
		var parentDiv = $("searchresults");
		
		new Ajax.Request('gettaxons.php',
		{
			method:'post',
			parameters: {taxonname: name, currenttaxon: currentTaxon, fullname: fullName, currentname: currentName},
			onSuccess: function(transport){
				var response = transport.responseText || "FAIL";
				parentDiv.update(response);
			},
			onFailure: function(transport){ 
				alert('Something went wrong... ' + transport.status);
			}
		});
		return false;
}

function deleteRelation(currentTaxon, relatedTaxon){
	var doIt = confirm('Really remove relation?');
	if ( doIt == true ) {
		new Ajax.Request('editrelations.php',
		{
			method:'post',
			parameters: {taxon: currentTaxon, related: relatedTaxon, action: "delete"},
			onSuccess: function(transport){
				var response = transport.responseText || "FAIL";
				var currentName = document.currentValues.currentName.value;
				getMainData(currentName);
			},
			onFailure: function(transport){ 
				alert('Delete failed. Status: ' + transport.status);
			}
		});
	}
}

function addRelation(primaryTaxon, relatedTaxon, relationType){
		new Ajax.Request('editrelations.php',
		{
			method:'post',
			parameters: {taxon: primaryTaxon, related: relatedTaxon, action: "insert", type: relationType},
			onSuccess: function(transport){
				var response = transport.responseText || "FAIL";
				var currentName = document.currentValues.currentName.value;
				getMainData(currentName);
			},
			onFailure: function(transport){ 
				alert('Adding new relation failed. Status: ' + transport.status);
			}
		});
}

function deleteSynonym(nameId, taxonConcept){
	var doIt = confirm('Really remove synonym?');
	if ( doIt == true ) {
		new Ajax.Request('editrelations.php',
		{
			method:'post',
			parameters: {name: nameId, taxon: taxonConcept, action: "deletesynonym"},
			onSuccess: function(transport){
				var response = transport.responseText || "FAIL";
				var currentName = document.currentValues.currentName.value;
				getMainData(currentName);
			},
			onFailure: function(transport){
				alert('Delete failed. Status: ' + transport.status);
			}
		});
	}
}

function addSynonym(nameId, taxonConcept, resultId){
		new Ajax.Request('editrelations.php',
		{
			method:'post',
			parameters: {name: nameId, taxon: taxonConcept, action: "addsynonym"},
			onSuccess: function(transport){
				var response = transport.responseText || "FAIL";
				var currentName = document.currentValues.currentName.value;
				if(response.startsWith("FAIL")){
					alert(response.substring(4));
				}
				else {
					$('result'+resultId).hide();
					getMainData(currentName);
				}
			},
			onFailure: function(transport){ 
				alert('Adding synonym failed. Status: ' + transport.status);
			}
		});
}

function processResponseStringToArray(responsestring)
{
        var data = new Array();
        data = responsestring.split('</R>');

        var out = new Array(data.length-1);

        for (var i = 0; i < out.length; i++)
        {
                // Split the inner elements.
                out[i] = data[i].split('</E>');
        }
        return out;
}

function resize(){ 
	var frame = $("taxontree"); 
	var windowheight = window.innerHeight; 
	document.body.style.height = "99%"; 
	frame.style.height = windowheight - 96+ "px"; 
} 

function showSpecies(id){
	
	var targetCell = $("name"+id);
	new Ajax.Request('getspecies.php',
	{
		method:'get',
		parameters: {nameid: id},
		onSuccess: function(transport){
			var response = transport.responseText || "FAIL";
			targetCell.update(response);
		},
		onFailure: function(transport){ 
			alert('Something went wrong... ' + transport.status);
		}
	});	
}

function hideSpecies(id, linkText){
	
	var targetCell = $("name"+id);
	var newContent = "<a href=\"javascript:showSpecies(" + id + ")\">" + linkText + "</a>";
	targetCell.update( newContent );
}

