function removeFromShortlist(evt)
{
	if (evt == undefined)
	{
		evt = event;
	}
	if (evt.stopPropagation)
	{
		evt.stopPropagation();
	}
	else
	{
		evt.cancelBubble = true;
	}
	var source = evt.srcElement || evt.target;
	// backtrack up to the nearest tr element
	var row = findParentElement(source, "tr");
	var id = row.id.replace("shortlist", "");
	var div = document.getElementById("addToShortlist" + id);
	if (div != undefined)
	{
		div.style.display = "block";
	}
	row.parentNode.removeChild(row);
}


function addToShortlist(evt)
{
	if (evt == undefined)
	{
		evt = event;
	}
	if (evt.stopPropagation)
	{
		evt.stopPropagation();
	}
	else
	{
		evt.cancelBubble = true;
	}
	var source = evt.srcElement || evt.target;
	source.style.display = "none";
	// extract values from the sources parent row element
	var row = findParentElement(source, "tr");
	var vacancyId = source.id.replace("addToShortlist", "");
	var title = null;
	var location = null;
	var refno = null;
	var category = null

	for (var i = 0; i < row.childNodes.length; i++)
	{
		var node = row.childNodes[i];
		if (node.nodeName.toUpperCase() == "TD")
		{
			if (displayMode == "wide" && refno == null)
			{
				refno = getInnerHtml(node);
			}
			else if (title == null)
			{
				title = getInnerHtml(node);
			}
			else if (displayMode == "wide" && category == null)
			{
				category = getInnerHtml(node);
			}
			else if (location == null)
			{
				location = getInnerHtml(node);
			}
		}
	}
	var insertPoint = document.getElementById("shortlistInsertPoint");
	if (insertPoint.parentNode.childNodes.length == 3)
	{
		className = "item";
	}
	else
	{
		var classes = new Array();
		classes[0] = "item";
		classes[1] = "itemAlt";
		className = classes[((insertPoint.parentNode.childNodes.length - 3) % 2)];
	}
	var row = createShortlistRow(vacancyId, title, location, refno, category);
	var container = document.getElementById("shortlistContainer");
	container.style.display = "block";
	insertPoint.parentNode.insertBefore(row, insertPoint);
	window.scrollTo(0, 1000);
}

function getInnerHtml(node)
{
	var nodes = node.getElementsByTagName("a");
	return nodes.item(0).innerHTML;
}

function createShortlistRow(vacancyId, title, location, refno, category)
{
	var input = document.createElement("input");
	input.setAttribute("type", "hidden");
	input.setAttribute("name", "basket[" + vacancyId + "]");
	var row = document.createElement("tr");
	row.id = "shortlist" + vacancyId;
	var cell = document.createElement("td");
	var link = document.createElement("a");
	link.setAttribute("href", "search.html?module=vacancy&amp;id=" + vacancyId + "&amp;searchCriteria=" + searchCriteria + "&amp;category=" + searchCategory + "&amp;region=" + searchRegion + "&amp;offset=" + searchOffset + "&amp;limit=" + searchLimit);
	if (displayMode == "wide")
	{
		link.innerHTML = refno;
		cell.appendChild(link);
		cell.className = "first";
		row.appendChild(cell);
	}
	cell = document.createElement("td");
	var titleLink = link.cloneNode(true);
	titleLink.innerHTML = title;
	cell.appendChild(titleLink);
	if (displayMode == "narrow")
	{
		cell.className = "first";
	}
	row.appendChild(cell);
	if (displayMode == "wide")
	{
		cell = document.createElement("td");
		var titleLink = link.cloneNode(true);
		titleLink.innerHTML = category;
		cell.appendChild(titleLink);
		row.appendChild(cell);
	}
	cell = document.createElement("td");
	var catLink = link.cloneNode(true);
	catLink.innerHTML = location;
	cell.appendChild(catLink);
	row.appendChild(cell);
	cell = document.createElement("td");
	cell.className = "last";
	cell.setAttribute("align", "center");
	var div = document.createElement("div");
	div.className = "removeFromShortlist";
	// gecko browsers
	if (document.addEventListener)
	{
		div.addEventListener("click", removeFromShortlist, false);
	}
	// internet explorer 6+
	else if (document.attachEvent)
	{
		div.attachEvent("onclick", removeFromShortlist);
	}
	// unknown
	else
	{
		div.onclick = removeFromShortlist;
	}
	cell.appendChild(div);
	cell.appendChild(input);
	row.appendChild(cell);
	return row;
}

function findParentElement(startElement, nodeName)
{
	if (startElement.nodeName.toUpperCase() == nodeName.toUpperCase())
	{
		return startElement;
	}
	else
	{
		return findParentElement(startElement.parentNode, nodeName);
	}
}
