QueryString.keys = new Array();
QueryString.values = new Array();
QueryString_Parse();

var species = QueryString("species");

var gbifNames = new Object();
gbifNames.scientificNames = new Array();
gbifNames.commonNames = new Array();

var buildJSON = {
	init: function() {

		if(typeof window.addEventListener != 'undefined'){
			window.addEventListener('load', this.getNames, false);
			}
		else if(typeof document.addEventListener != 'undefined'){
			document.addEventListener('load', this.getNames, false);
			}
		else if(typeof window.attachEvent != 'undefined'){
			window.attachEvent('onload', this.getNames);
			}
		else {
			if(typeof window.onload == 'function'){
				var existing = onload;
				window.onload = function(){
					existing();
					buildJSON.getNames();
				};
			}
			else{
				window.onload = this.getNames;
			}
		}
	},
	getNames: function() {
		sn = QueryString("species");
		if (sn == "" || sn == null) {
			return;
		}
		
		var searchedTerm = document.getElementById('searchedTerm');
		searchedTerm.innerHTML = "Search: <b>" + unescape(species.replace(/\+/gi,' ')) + "</b>";
		
		showSpinner();

		var elem = document.createElement("script");
		elem.src = "http://data.gbif.org/species/nameSearch?rank=species&view=json&query=" + sn + "&returnType=nameId&maxResults=10&view=json&callback=buildCalls&noCacheIE=" + (new Date()).getTime();
		elem.id = "jsonGBIF";
		document.body.appendChild(elem);
	}

};

function QueryString(key)
{
    var value = null;
    for (var i=0;i<QueryString.keys.length;i++)
    {
        if (QueryString.keys[i]==key)
        {
            value = QueryString.values[i];
            break;
        }
    }
    return value;
}

function QueryString_Parse()
{
    var query = window.location.search.substring(1);
    var pairs = query.split("&");

    for (var i=0;i<pairs.length;i++)
    {
        var pos = pairs[i].indexOf('=');
        if (pos >= 0)
        {
            var argname = pairs[i].substring(0,pos);
            var value = pairs[i].substring(pos+1);
            QueryString.keys[QueryString.keys.length] = argname;
            QueryString.values[QueryString.values.length] = value;
        }
    }
}

function buildCalls(obj) {
	var allResults = document.getElementById("results");

	//GBIF Names Search
	
	showSpinner();

	header("The Global Biodiversity Information Facility");

	var names_content = document.createElement("div");
	names_content.setAttribute('id','gbif_names');
	allResults.appendChild(names_content);
	
	var gbifmap = document.createElement("div");
	gbifmap.setAttribute('id','gbifmap');
	gbifmap.style.display = 'none';
	allResults.appendChild(gbifmap);

	if(obj.Resultset.Result.length != 0) {
		gbifNamePairs = '';
		for(i=0;i<obj.Resultset.Result.length;i++) {
				gbifNamePairs += '<a href="http://data.gbif.org/species/' + obj.Resultset.Result[i].id + '/"><i>' + obj.Resultset.Result[i].scientificName + '</i>';
				if (obj.Resultset.Result[i].commonName != "") {
					gbifNamePairs += ' (' + obj.Resultset.Result[i].commonName + ')';
				}
				if (obj.Resultset.Result.length > 1) {
					var mapIcon = ' <a href="#" onClick="viewMap(' + obj.Resultset.Result[i].id + ');return false"><img src="http://www.canadianarachnology.org/iSpecies/files/map.png" alt="View Map" class="icons"></a>';
				}
				else {
					var mapIcon = '';
					viewMap(obj.Resultset.Result[i].id);
				}
				gbifNamePairs += '</a>' + mapIcon;
				if (i != obj.Resultset.Result.length-1) {
					gbifNamePairs += ', ';
				}

				gbifNames.scientificNames.push(obj.Resultset.Result[i].scientificName);
				gbifNames.commonNames.push(obj.Resultset.Result[i].commonName);
				gbifNames.allNames = gbifNames.scientificNames.concat(gbifNames.commonNames);
				
				q = gbifNames.allNames;
	 	}
		names_content.innerHTML = '<p>' + gbifNamePairs + '</p>';
				
		if (gbifNames.allNames.length > 2) {
			var refine = document.getElementById("refine");
			refine.setAttribute('className', 'refinediv');
			refine.setAttribute('class','refinediv');
			var names_suggest = document.createElement("span");
			names_suggest.innerHTML = '<img src="http://www.canadianarachnology.org/iSpecies/files/lightbulb.png" alt=""> Refine Search: ';
		
			for (j=0;j<gbifNames.scientificNames.length;j++) {
				gbifNames.scientificNames.sort();
				names_suggest.innerHTML += '<a href="?species=' + gbifNames.scientificNames[j] + '"><i>' + gbifNames.scientificNames[j] + '</i></a>';
				if (j != gbifNames.scientificNames.length-1) {
				names_suggest.innerHTML += ', ';
				}
			}
		refine.appendChild(names_suggest);		
		}
	}
	else {
		names_content.innerHTML = '<p>No species found. Proceeding with unfiltered search for <b>' + species.replace(/\+/gi,' ') + '</b>...</p>';
		q = species;
	}

	//Google Scholar and tree built only when a single match is found


	//Yahoo Image Search

/*	header("Yahoo Images");

	var yimg_content = document.createElement("div");
	yimg_content.setAttribute('id','yahoo_images');
	yimg_content.innerHTML = '<p>Loading images...</p>';
	allResults.appendChild(yimg_content);
	
	var scr_yimg = document.createElement("script");
	scr_yimg.src = "http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&results=9&type=any&output=json&callback=yahoo_images&query=" + q + "&noCacheIE=" + (new Date()).getTime();
	scr_yimg.id = "YahooImages";
	document.body.appendChild(scr_yimg);*/

	//Flickr Image Search

	//Yahoo News Search


	hideSpinner();
}

function showSpinner() {
	var spinner = document.getElementById('spinner');
	spinner.innerHTML = ' <img src="http://www.canadianarachnology.org/iSpecies/files/indicator.gif" alt="Searching...">';
}

function hideSpinner() {
	var spinner = document.getElementById('spinner');
	spinner.innerHTML = '';
}

function header(htitle) {
	var allResults = document.getElementById("results");
	var secHeader = document.createElement("div");
	secHeader.setAttribute('className','searchbar');
	secHeader.setAttribute('class','searchbar');
	secHeader.innerHTML = '<h2>' + htitle + '</h2>';
	allResults.appendChild(secHeader);
}

/*function yahoo_images(obj) 
{
	var d = document.getElementById('yahoo_images');
	if(obj.ResultSet.Result.length==0) {
		d.innerHTML = "<p>No images found</p>";
	}
	else {
		d.innerHTML = '';
		for(i=0;i<obj.ResultSet.Result.length;i++) {
				var imgdiv = document.createElement("div");
				imgdiv.setAttribute('className','images');
				imgdiv.setAttribute('class','images');
				imgdiv.innerHTML = '<a href="' +  obj.ResultSet.Result[i].RefererUrl + '"><img src="' + obj.ResultSet.Result[i].Thumbnail.Url + '" height="75"></a>';
				d.appendChild(imgdiv);
	 	}
	 	d.innerHTML += '<div style="clear:both"></div>';
	}
	document.body.removeChild(document.getElementById("YahooImages"));
}*/

function flickr_images(obj) 
{
	var d = document.getElementById('flickr_images');
	if(obj.photos.photo.length==0) {
	d.innerHTML = "<p>No images found</p>";
	}
	else {
		d.innerHTML = '';
		for(i=0;i<obj.photos.photo.length;i++) {
				var imgdiv = document.createElement("div");
				imgdiv.setAttribute('className','images');
				imgdiv.setAttribute('class','images');
				imgdiv.innerHTML = '<a href="http://www.flickr.com/photos/' +  obj.photos.photo[i].owner + '/' +  obj.photos.photo[i].id + '"><img src="http://farm' +  obj.photos.photo[i].farm + '.static.flickr.com/' +  obj.photos.photo[i].server + '/' + obj.photos.photo[i].id + '_' +  obj.photos.photo[i].secret + '_s.jpg"></a>';
				d.appendChild(imgdiv);
		}
		d.innerHTML += '<div style="clear:both"></div>';
	 }
	 document.body.removeChild(document.getElementById("FlickrImages"));
}
function GScholar(obj) 
{
	d = document.getElementById('gs_articles');
	if(!obj.fields) {
		d.innerHTML = "<p>No articles found</p>";
	}
	else {
		d.innerHTML= '';
	 for(i=0;i<obj.fields.article.length;i++)
	 {
	 	d.innerHTML += '<p class="article"><a href="' + obj.fields.article[i].href + '" /><span class="title">' + obj.fields.article[i].value + '</span></a></p>';
	 }
	}
	document.body.removeChild(document.getElementById("GoogleScholar"));
}

//code developed by Dave Martin (GBIF) & modified here
function renderTree(obj){
	var classificationArray = obj.classificationSearch.classification;
	var treeDiv = document.getElementById('colp_tree');
	
	if (obj.classificationSearch.classification.length==0) {
		treeDiv.innerHTML = "<p>Sorry, that name is not in this catalogue</p>";
	}
	else {
	var treeList = document.createElement('UL');
	treeDiv.appendChild(treeList);
	var currentList = treeList;
	var currentParentId=null;
		
	for(var i=0; i<classificationArray.length;i++){	
			if(classificationArray[i].parentId!=null && classificationArray[i].parentId.length>0 && currentParentId != classificationArray[i].parentId){
				var newList = document.createElement('UL');
				currentList.appendChild(newList);
				currentList = newList;
				currentParentId = classificationArray[i].parentId;
			}
			var listItem = document.createElement('LI');
			if (classificationArray[i].rank=='species' || classificationArray[i].rank=='subspecies') {
				var theName = '<i>' + classificationArray[i].scientificName + '</i>';
			}
			else {
				var theName = classificationArray[i].scientificName;
			}
			theRank = classificationArray[i].rank.charAt(0).toUpperCase() + classificationArray[i].rank.substring(1);
			listItem.innerHTML = '<b>' + theRank + '</b>: ' + theName;
			listItem.id=classificationArray[i].id;
			listItem.name = classificationArray[i].scientificName;
			currentList.appendChild(listItem);
	}
	}
	document.body.removeChild(document.getElementById("CatalogueofLifeTree"));
}


function yahoo_news(obj) 
{
	var d = document.getElementById('yahoo_news');
	if(obj.ResultSet.Result.length==0) {
		d.innerHTML = "<p>No news found</p>";
	}
	else {
		d.innerHTML= '';
		for(i=0;i<obj.ResultSet.Result.length;i++) {
				pubdate = unixtimetodate(obj.ResultSet.Result[i].PublishDate);
	 			d.innerHTML += '<p><a href="' +  obj.ResultSet.Result[i].Url + '">' +  obj.ResultSet.Result[i].Title + '</a><br><span style="font-size:x-small">' +  obj.ResultSet.Result[i].Summary + '<br>(<a href="' +  obj.ResultSet.Result[i].NewsSourceUrl + '">' +  obj.ResultSet.Result[i].NewsSource + '</a>, ' + pubdate + ')</span></p><div style="clear:both"></div>';
	 	}
	}
	document.body.removeChild(document.getElementById("YahooNews"));
}

function unixtimetodate(vardate) {
	var theDate = new Date(vardate * 1000);
	dateString = theDate.toGMTString();
	return dateString;
}

function viewMap(id) {
	var map = document.getElementById("gbifmap");
	map.style.display = '';
//	mapImg = '<p><img src="http://data.gbif.org/species/' + id + '/overviewMap.png" width="450" alt=""></p>';
	mapImg = '<p><iframe src="http://data.gbif.org/species/' + id + '/mapWidget?size=small" frameborder="0" scrolling="no" width="360px" height="260px"></p>';
	map.innerHTML = mapImg;
}

buildJSON.init();

