function hideSelectBoxes(object)
{
	if (!object) return;
	if (!object.sboxes)
		object.sboxes = [];
	var ol = getElementX(object);
	var ot = getElementY(object);
	var ow = object.offsetWidth;
	var oh = object.offsetHeight;
	var sboxes = document.all.tags("select");
	for (var i=0; i<sboxes.length; i++)
	{
		var node = sboxes[i].parentNode;
		while (node != object && node.tagName != "BODY")
			node = node.parentNode;
		var skip = (node == object);
		if (skip) continue;
		var t = getElementY(sboxes[i]);
		var l = getElementX(sboxes[i]);
		var w = sboxes[i].offsetWidth;
		var h = sboxes[i].offsetHeight;
		var ver = false;
		if (t > ot && t < (ot + oh))
			ver = true;
		else if ((t + h) > ot && (t + h) < (ot + oh))
			ver = true;
		var hor = false;
		if (l > ol && l < (ol + ow))
			hor = true;
		else if ((l + w) > ol && (l + w) < (ol + ow))
			hor = true;
		else if (l < ol && (l + w) > ol)
			hor = true;
		if (ver && hor && sboxes[i].style.visibility != "hidden")
			object.sboxes[object.sboxes.length] = sboxes[i];
	}
	for (var i=0; i<object.sboxes.length; i++)
		object.sboxes[i].style.visibility = "hidden";
}

function showSelectBoxes(object)
{
	if (!object) return;
	if (!object.sboxes) return;
	for (var i=0; i<object.sboxes.length; i++)
		object.sboxes[i].style.visibility = "";
	object.sboxes = [];
}

function getElementX(object) {return getElementC(object, true)}
function getElementY(object) {return getElementC(object, false)}

function getElementC(element, xAxis)
{
	var initialElement = element;
	var c = 0;

	while (element != null)
	{
		c += (xAxis) ? element.offsetLeft : element.offsetTop;
		if (element.style.position == "absolute")
			break;
		else
			element = element.offsetParent;
	}

	var elementWnd = document.window;
	if (!elementWnd) return c;

	if (!elementWnd.frameElement) return c;

	return c + getElementC(elementWnd.frameElement, xAxis);
}

function initPage()
{
	var nav = document.getElementById("navigation");
	if (nav)
	{
		var nodes = nav.getElementsByTagName("li");
		for (var i = 0; i < nodes.length; i++)
		{		
				nodes[i].onmouseover = function () 
				{
					this.className += " hover";
					hideSelectBoxes(this.getElementsByTagName("ul")[0]);
				}
				nodes[i].onmouseout = function ()
				{
					this.className = this.className.replace(" hover", "");
					showSelectBoxes(this.getElementsByTagName("ul")[0]);
				}
		}
	}
}
if (window.attachEvent)
	window.attachEvent("onload", initPage);

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);
	}
}



function hideSelectBoxes(object)
{
	if (!object) return;
	if (!object.sboxes)
		object.sboxes = [];
	var ol = getElementX(object);
	var ot = getElementY(object);
	var ow = object.offsetWidth;
	var oh = object.offsetHeight;
	var sboxes = document.all.tags("select");
	for (var i=0; i<sboxes.length; i++)
	{
		var node = sboxes[i].parentNode;
		while (node != object && node.tagName != "BODY")
			node = node.parentNode;
		var skip = (node == object);
		if (skip) continue;
		var t = getElementY(sboxes[i]);
		var l = getElementX(sboxes[i]);
		var w = sboxes[i].offsetWidth;
		var h = sboxes[i].offsetHeight;
		var ver = false;
		if (t > ot && t < (ot + oh))
			ver = true;
		else if ((t + h) > ot && (t + h) < (ot + oh))
			ver = true;
		var hor = false;
		if (l > ol && l < (ol + ow))
			hor = true;
		else if ((l + w) > ol && (l + w) < (ol + ow))
			hor = true;
		else if (l < ol && (l + w) > ol)
			hor = true;
		if (ver && hor && sboxes[i].style.visibility != "hidden")
			object.sboxes[object.sboxes.length] = sboxes[i];
	}
	for (var i=0; i<object.sboxes.length; i++)
		object.sboxes[i].style.visibility = "hidden";
}

function showSelectBoxes(object)
{
	if (!object) return;
	if (!object.sboxes) return;
	for (var i=0; i<object.sboxes.length; i++)
		object.sboxes[i].style.visibility = "";
	object.sboxes = [];
}

function getElementX(object) {return getElementC(object, true)}
function getElementY(object) {return getElementC(object, false)}

function getElementC(element, xAxis)
{
	var initialElement = element;
	var c = 0;

	while (element != null)
	{
		c += (xAxis) ? element.offsetLeft : element.offsetTop;
		if (element.style.position == "absolute")
			break;
		else
			element = element.offsetParent;
	}

	var elementWnd = document.window;
	if (!elementWnd) return c;

	if (!elementWnd.frameElement) return c;

	return c + getElementC(elementWnd.frameElement, xAxis);
}

