// names of JSON fields to be shown show per section; * are mandatory
// scientific name
rules0 = new Array();
	rules0[0] = '*name';
	rules0[1] = '*rank';
	rules0[2] = '*status';
	rules0[3] = 'synonyms';
// common names
rules1 = new Array();
	rules1[0] = '*commonNames';
// description
rules2 = new Array();
	rules2[0] = '*description';
// image
rules3 = new Array();
	rules3[0] = '*image';


// page sections
sections = new Array();
	sections[0] = rules0;
	sections[1] = rules1;
	sections[2] = rules2;
	sections[3] = rules3;

// print functions per section
sectionFunctions = new Array();
	sectionFunctions[0] = 'printScientificNames(data,jSONsourceName)';
	sectionFunctions[1] = 'printCommonNames(data,jSONsourceName)';
	sectionFunctions[2] = 'printDescription(data,jSONsourceName)';
	sectionFunctions[3] = 'printImage(data,jSONsourceName,myJSONtext)';

var overview = false;
var htmlSect0data =
	'<tr><td valign="top" width="120"><p style="margin-top: 0px;">%label%</p></td>'+
	'<td valign="top"  width="350"><p style="margin-left: 10px; margin-top: 0px;">%value%</p></td></tr>\n';
var printedItemsScientificNames = new Array();
var printedItemsScientificNamesCounter = 0;

function makeSect0HtmlLine(label,value) {
	if ((label!='' || value!='') && value!=undefined)
		return htmlSect0data.replace('%label%',(label!='' ? '<b>'+label+'</b>:' : '')).replace('%value%',value);
}

function printScientificNames(data,jSONsourceName) {
	if (!data.name || !data.rank || !data.status) {
		return;
	}
	var str ='';
	str = str + makeSect0HtmlLine(texts[12],unescape((data.nameDisplayed!='' && data.nameDisplayed != undefined) ? data.nameDisplayed : data.name));
	str = str + makeSect0HtmlLine(texts[13],unescape(data.rank));
	str = str + makeSect0HtmlLine(texts[14],unescape(data.status));
	if (data.synonyms) {
		for (var i=0;i<data.synonyms.length;i++) {
			str = str + makeSect0HtmlLine(i==0 ? texts[15] : '',unescape(data.synonyms[i].nameDisplayed));
		}
	}
	str = str + makeSect0HtmlLine('','&nbsp;');

	var sourceData = checkSourceAndLink(data,jSONsourceName);
	var printedbefore = wasPrintedBefore(printedItemsScientificNames,str);
	if (printedbefore===false) {
		document.getElementById('data0').innerHTML =
			document.getElementById('data0').innerHTML +
			makeTable(
				makeSourceHeader('sect0',printedItemsScientificNamesCounter,sourceData[0],sourceData[1]) +
				str
			);
		printedItemsScientificNames[printedItemsScientificNamesCounter++] = str;
	} else {
		updateSourceHeader('sect0',printedbefore,sourceData[0],sourceData[1]);
	}
}

/* functions for section 1: common names */
var htmlSect1data = '<tr><td valign="top" style="width:225px;"><p>%label%</p></td><td valign="top"><p style="margin-left: 80px;">%value%</p></td></tr>\n';

var printedItemsCommonNames = new Array();
var printedItemsCommonNamesCounter = 0;
var firstCommonNameSource = true;
var maxInitialCommonLines = 5;
var hiddenCommonTableIds = new Array();

function makeSect1HtmlLine(label,value) {
	if (label && value && label!='' && value!='') return htmlSect1data.replace('%label%',(label!='' ? label : '')).replace('%value%',value);
}

function showAllCommon() {
	if (!hiddenCommonTableIds || hiddenCommonTableIds.length==0) return;
	for(var i=0;i<hiddenCommonTableIds.length;i++) {
		if (document.getElementById(hiddenCommonTableIds[i]))
			document.getElementById(hiddenCommonTableIds[i]).style.display='block';
	}
	document.getElementById('seeMoreLink').style.display='none';
}

function printCommonNames(data,jSONsourceName) {
	if (!data.commonNames || data.commonNames.length==0) {
		return;
	}

	var str = strHidden ='';
	for (var i=0;i<data.commonNames.length;i++) {
		if (!data.commonNames[i].name || data.commonNames[i].name=='') continue;
		if (!data.commonNames[i].language || data.commonNames[i].language=='') data.commonNames[i].language = '&nbsp;';
		var thisName = stripSlashes(unescape(data.commonNames[i].name));
		var thisLang = unescape(data.commonNames[i].language);
		var stringToRemember = thisName+':'+thisLang;

		var printedbefore = wasPrintedBefore(printedItemsCommonNames,stringToRemember);
		
		if (printedbefore===false) {
			if (printedItemsCommonNames.length+1 > maxInitialCommonLines) {
				strHidden = strHidden + makeSect1HtmlLine(thisName,thisLang);
			} else {
				str = str + makeSect1HtmlLine(thisName,thisLang);
			}
			printedItemsCommonNames.push(stringToRemember);
		}
	
	}

	var sourceData = checkSourceAndLink(data,jSONsourceName);

	if (strHidden!='') {
		var id = uniqId();
		hiddenCommonTableIds.push(id);
	}
	document.getElementById('data1').innerHTML = 
		(firstCommonNameSource ? 
			makeSourceHeader('sect1','0',sourceData[0],sourceData[1]) : 
			document.getElementById('data1').innerHTML)	 + 
		makeTable(str) +
		makeTable(strHidden,id,true) + 
		(strHidden!='' && hiddenCommonTableIds.length == 1 ? 
			makeTable(
				makeEmptyCell(
					htmlSeeMore.replace(/%link%/g,'<a href="javascript:void(0);" onclick="showAllCommon();">'+texts[5]+'<span id="commonCount">'+(printedItemsCommonNames.length)+'</span>'+texts[6]+'</a>')
				),'seeMoreLink'
			) : '');

	if (hiddenCommonTableIds && hiddenCommonTableIds.length > 0) document.getElementById('commonCount').innerHTML = printedItemsCommonNames.length;
	if (!firstCommonNameSource) updateSourceHeader('sect1','0',sourceData[0],sourceData[1]);
	firstCommonNameSource = false;
}


/* functions for section 2: description */
var htmlSect2data = '<p style="margin-bottom: 16px;width"500px;">%data%%more%</p>';
var htmlSect2moreBit = ' [<a title="%label%" href="%url%" target="_blank">'+texts[8]+'</a>]';
// var numAltDesc declared in speciesdetail.js

function makeSect2HtmlLine(data,showMore,label,url) {
	if (data=='' || data==undefined) return;
		var more='';
		if (showMore)
			more = htmlSect2moreBit.replace(/%url%/,url).replace(/'%label%/,label);
			
	return htmlSect2data.replace(/%data%/,data).replace(/%more%/,more);
}

// Ruud 08-10-08: added alternate description layer to display when there is no description in the current language
// but there are descriptions in the alternate language (restored functionality from old version)
// Data is stored in hidden layer altDescription
function printDescription(data,jSONsourceName) {
	if (!data.description) {
		return;
	}

	for (var i=0;i<data.description.length;i++) {
		var desc = data.description[i];
		var descLang = desc.language;
		var str = "";
		var formattedStr = "";
		var sourceData = checkSourceAndLink(data,jSONsourceName);
		var isTruncd = !(desc.isTruncated && desc.isTruncated==0);
		
		str = str + makeEmptyCell(makeSect2HtmlLine(stripSlashes(unescape(desc.text)),isTruncd,sourceData[0],sourceData[1]));
		str = str + makeEmptyCell('&nbsp;');
		formattedStr = makeSourceHeader('sect2','',sourceData[0],sourceData[1]) + str;

		if (localLanguage == descLang) {
			document.getElementById('data2').innerHTML = document.getElementById('data2').innerHTML + makeTable(formattedStr, i);
		} else {
			numAltDesc++;
			document.getElementById('altDescription').innerHTML = document.getElementById('altDescription').innerHTML + makeTable(formattedStr, i);
		}
	}
}

function printAltResultsText(numbOfDesc) {
	if (numbOfDesc == "" || numbOfDesc == undefined) return;

	var altText = "<p>%nothing%.</p>\n<p style=\"margin: 12px 0 45px 0;\">%result% [%url%]</p>\n";
	var altUrl = "<a href=\"javascript:printHiddenDescriptions();\">%link%</a>";
	
	if (localLanguage == "English") {
		var altNothing = "No description found in English";
		var altResult = "However, %number% available in Dutch";
		if (numbOfDesc == 1) {
			altResult = altResult.replace(/%number%/, "a description is");
			var altLink = "Show description";
		} else {
			altResult = altResult.replace(/%number%/, numbOfDesc + " descriptions are");
			var altLink = "Show all descriptions";
		}
	} else {
		var altNothing = "Geen beschrijving gevonden in het Nederlands";
		var altResult = "Echter, %number% beschikbaar in het Engels";
		if (numbOfDesc == 1) {
			altResult = altResult.replace(/%number%/, "een beschrijving is");
			var altLink = "Toon beschrijving";
		} else {
			altResult = altResult.replace(/%number%/, numbOfDesc + " beschrijvingen zijn");
			var altLink = "Toon alle beschrijvingen";
		}
	}
	altUrl = altUrl.replace(/%link%/, altLink);
	altText = altText.replace(/%nothing%/, altNothing).replace(/%result%/, altResult).replace(/%url%/, altUrl);
	document.getElementById('data2').innerHTML = altText;
}

function printHiddenDescriptions() {
	document.getElementById('data2').innerHTML = document.getElementById('altDescription').innerHTML;
}
// End of changes

var availableImages = new Array();

function printImage(data,jSONsourceName,myJSONtext) {
	if (data.multimedia==undefined)  return;

	var imgSrc = '';
	for (var i=0;i<data.multimedia.length;i++) {
		if (data.multimedia[i].list) {
			for (var j=0;j<data.multimedia[i].list.length;j++) {
				var dummy = data.multimedia[i].list[j];
				if (dummy.type=='image') availableImages.push(dummy);
				var sourceData = checkSourceAndLink(data,jSONsourceName);
			}
		}
	}

	placeMainImage();
}

var htmlImageData =
	'<a title="%label%" href="%link%" target="blank"><img src="%url%" alt="%label%" style="width:%width%px;height:%height%px;border:1px solid #477AB0"></a>'+
	'<br/><p>%caption%</p>\n';

function makeImageHtml(data) {
	var thisHeight = parseInt(data.height);
	var thisWidth = parseInt(data.width);

	// Ruud 07-10-08: replaced Maarten's scaling code that was not considering proportions with Jorrit's original code
	if (thisHeight != 281 && thisWidth != 241) {
		if (thisWidth > 241) {
			thisHeight = Math.floor(thisHeight * 241 / thisWidth);
			thisWidth = 241 ;
		}
		htmlImageData = htmlImageData.replace(/%width%/g,thisWidth);
		htmlImageData = htmlImageData.replace(/%height%/g,thisHeight);
	}
		
	return htmlImageData.
		replace(/%link%/g,unescape(data.imageLink)).
		replace(/%url%/g,unescape(data.thumbnailURL!=''?data.thumbnailURL:data.URL)).
		replace(/%label%/g,unescape(data.name)).
		replace(/%caption%/g,unescape(data.caption));
}

function placeMainImage() {
	if (!document.getElementById('overviewpicturecontent') || !document.getElementById('overviewpicture')) return;

	// Ruud 07-10-08: overview pictures are preferred over any other sized picture
	// Only when a picture of 241x281 is not present, the largest picture will be scaled
	var prevSize = 0;
	for (var i=0;i<availableImages.length;i++) {
		if (availableImages[i].height == '281' && availableImages[i].width == '241') {
			overview = availableImages[i];
			break;
		} else {
			var size = availableImages[i].width * availableImages[i].height;
			if (size > prevSize) {
				prevSize = size;
				overview = availableImages[i];
			}
		}
	}
}

function cleanUp() {
	// Ruud 25-03-09: moved display of overview from placeMainImage to cleanup
	// Otherwise multiple overviews would be displayed, often with wrong dimensions	
	if (overview) {
		//alert(makeImageHtml(overview));
		document.getElementById('overviewpicturecontent').innerHTML = makeImageHtml(overview);
		document.getElementById('overviewpicture').style.visibility = 'visible';
	}
	
	var sourceData = new Array();
	if (document.getElementById('data0') && document.getElementById('data0').innerHTML=='') printData('data0','sect0',1,'<p>'+texts[0]+'</p>',sourceData);
	if (document.getElementById('data1') && document.getElementById('data1').innerHTML=='') printData('data1','sect1',1,'<p>'+texts[0]+'</p>',sourceData);
	if (document.getElementById('data2') && document.getElementById('data2').innerHTML=='') {
	// Ruud 08-10-08: alternate description is printed here
		if (numAltDesc > 0) {
			printAltResultsText(numAltDesc);
		} else {
			printData('data2','sect2',1,'<p>'+texts[0]+'</p>',sourceData);
		}
	}

}