// JavaScript Document
function loadData(id) {
	// initialize variables that will hold the chip data
	var GPLArray, GPLIndex;
	
	var status = document.getElementById('status');
	var geo_platform = document.getElementById('geo_platform');
	var no_of_spots = document.getElementById('no_of_spots');
	var no_of_info_spots = document.getElementById('no_of_info_spots');
	var no_of_unique_spots = document.getElementById('no_of_unique_spots');
	var description = document.getElementById('description');
	var image = document.getElementById('image');
	var gal = document.getElementById('gal');
	var price = document.getElementById('price');
	var layout_dimensions = document.getElementById('layout_dimensions');
	var layout_image = document.getElementById('layout_image');
	var layout_link = document.getElementById('layout_link');
	
	var http_request = makeRequest();
	http_request.open('GET', 'ChipData.xml', true);

	http_request.onreadystatechange = function() {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				
				var xmldoc = http_request.responseXML;
				
				GPLArray = xmldoc.getElementsByTagName('GPL');
				GPLIndex = getGPLIndex(xmldoc, id, GPLArray);
				changeLinkColor(id);
				
				geo_platform.innerHTML = '<a href="http://www.ncbi.nlm.nih.gov/projects/geo/query/acc.cgi?acc=GPL' + id + '">GPL' + id;
				status.innerHTML = getStatus(GPLIndex, GPLArray);
				if (getStatus(GPLIndex, GPLArray) == 'Discontinued') {
					status.className = 'discontinued';
				} else {
					status.className = 'inProduction';
				}
				no_of_spots.innerHTML = getTotalNumOfSpots(GPLIndex, GPLArray);
				no_of_info_spots.innerHTML = getTotalNumOfInfoSpots(GPLIndex, GPLArray);
				no_of_unique_spots.innerHTML = getTotalNumOfUniqueSpots(GPLIndex, GPLArray);
				description.innerHTML = '<a href="' + getDescLink(GPLIndex, GPLArray) + '"><img src="/images/iconAdobePDF.gif" alt="PDF File" width="20" height="20" border="0" /></a>';
				image.innerHTML = '<a href="' + getIMGLink(GPLIndex, GPLArray) + '"><img src="/images/GIFIcon.gif" alt="GIF Image" width="20" height="20" border="0" /></a>';
				gal.innerHTML = getGALString(GPLIndex, GPLArray);
				price.innerHTML = getListPrice(GPLIndex, GPLArray);
				layout_dimensions.innerHTML = getLayoutString(GPLIndex, GPLArray);
				layout_image.src = getDiagramThumb(GPLIndex, GPLArray);
				layout_link.href = getDiagramLink(GPLIndex, GPLArray);
			} else {
				alert('There was a problem communicating with the server.');
			}
		}
	}
	
	http_request.send(null);
}

// gets the location of the desired GPL within the XML document, which will be used to further parse data
function getGPLIndex(xmldoc, id, GPLArray) {
	var GPLIndex = -1;
	
	for (i = 0; i < GPLArray.length; i++) {
		var currentID = GPLArray[i].getAttribute('id');
		
		if (currentID == id) {
			GPLIndex = i;
		}
	}
	
	return GPLIndex;
}

function getStatus(GPLIndex, GPLArray) {
	var status;
	
	status = GPLArray[GPLIndex].getElementsByTagName('status').item(0).firstChild.data;
	
	return status;
}

function getTotalNumOfSpots(GPLIndex, GPLArray) {
	var totalNumOfSpots;
	
	totalNumOfSpots = GPLArray[GPLIndex].getElementsByTagName('totalNumOfSpots').item(0).firstChild.data;
	
	return totalNumOfSpots;
}

function getTotalNumOfInfoSpots(GPLIndex, GPLArray) {
	var totalNumOfInfoSpots;
	
	totalNumOfInfoSpots = GPLArray[GPLIndex].getElementsByTagName('totalNumOfInfoSpots').item(0).firstChild.data;
	
	return totalNumOfInfoSpots;
}

function getTotalNumOfUniqueSpots(GPLIndex, GPLArray) {
	var totalNumOfUniqueSpots;
	
	try {
		totalNumOfUniqueSpots = GPLArray[GPLIndex].getElementsByTagName('totalNumOfUniqueSpots').item(0).firstChild.data;
	} catch(e) {
		totalNumOfUniqueSpots = 'n/a';
	}
	
	return totalNumOfUniqueSpots;
}

function getDescLink(GPLIndex, GPLArray) {
	var descLink;
	var parent;
	
	parent = GPLArray[GPLIndex].parentNode;
	descLink = parent.getElementsByTagName('description').item(0).firstChild.data;
	
	return descLink;
}

function getIMGLink(GPLIndex, GPLArray) {
	var IMGLink;
	var parent;
	
	parent = GPLArray[GPLIndex].parentNode;
	IMGLink = parent.getElementsByTagName('imageExample').item(0).firstChild.data;
	
	return IMGLink;
}

function getListPrice(GPLIndex, GPLArray) {
	var listPrice;
	
	try {
		listPrice = GPLArray[GPLIndex].getElementsByTagName('listPrice').item(0).firstChild.data;
	} catch(e) {
		listPrice = '-----';
	}
	
	return listPrice;
}

function getGALString(GPLIndex, GPLArray) {
	var GALLink;
	var GALSize;
	var GALString;

	try {
		GALLink = GPLArray[GPLIndex].getElementsByTagName('galLink')[0].firstChild.data;
		GALSize = GPLArray[GPLIndex].getElementsByTagName('galSize')[0].firstChild.data;
		GALString = '<a href="' + GALLink + '">[' + GALSize + ']</a>';
	} catch(e) {
		GALString = '--';
	}
	return GALString;
}

function getLayoutString(GPLIndex, GPLArray) {
	var fieldA, fieldB, diagramLink;
	
	fieldA = getLayoutA(GPLIndex, GPLArray);
	fieldB = getLayoutB(GPLIndex, GPLArray);
	diagramLink = getDiagramLink(GPLIndex, GPLArray);
	
	if (fieldA == -1 && fieldB == -1) {
		var dimensions;
		var parent;
		
		parent = GPLArray[GPLIndex].parentNode;
		dimensions = parent.getElementsByTagName('layoutDiagram').item(0).firstChild.data;
		
		var returnString = '<a href="' + diagramLink + '">' + dimensions + '</a>';
		
		return returnString;
	} else {
		var returnString = '<a href="' + diagramLink + '">' + fieldA + '<br />' + fieldB + '</a>';
		
		return returnString;
	}
}

function getLayoutA(GPLIndex, GPLArray) {
	var dimensions = -1;
	var layouts;
	var parent;
	
	parent = GPLArray[GPLIndex].parentNode;
	layouts = parent.getElementsByTagName('layoutDiagram');
	
	for (i = 0; i < layouts.length; i++) {
		var field = layouts[i].getAttribute('field');
		
		if (field == 'A') {
			dimensions = layouts[i].firstChild.data;
			return dimensions;
		}
	}
	
	return dimensions;
}

function getLayoutB(GPLIndex, GPLArray) {
	var dimensions = -1;
	var layouts;
	var parent;
	
	parent = GPLArray[GPLIndex].parentNode;
	layouts = parent.getElementsByTagName('layoutDiagram');
	
	for (i = 0; i < layouts.length; i++) {
		var field = layouts[i].getAttribute('field');
		
		if (field == 'B') {
			dimensions = layouts[i].firstChild.data;
			return dimensions;
		}
	}
	
	return dimensions;
}

function getDiagramLink(GPLIndex, GPLArray) {
	var diagramLink;
	var parent;
	
	parent = GPLArray[GPLIndex].parentNode;
	diagramLink = parent.getElementsByTagName('layoutLink').item(0).firstChild.data;
	
	return diagramLink;
}

function getDiagramThumb(GPLIndex, GPLArray) {
	var diagramLink;
	var diagramThumb;
	var parent;
	
	diagramLink = getDiagramLink(GPLIndex, GPLArray);
	parent = GPLArray[GPLIndex].parentNode;
	diagramThumb = parent.getElementsByTagName('layoutThumb').item(0).firstChild.data;
	
	return diagramThumb;
}

function changeLinkColor(id) {
	var linkID = new Array(4521, 3333, 2613, 2572, 3538, 2557, 3578, 6053, 3021, 1996, 1984);
	
	// first change all link colors back to normal
	for (i = 0; i < linkID.length; i++) {
		var currentLink = document.getElementById(linkID[i]);
		
		if (linkID[i] == id) {
			currentLink.className = 'active';
			currentLink.style.outline = 'none';
		} else {
			currentLink.className = '';
		}
	}
}
