//This script controls expanding the navbar.
//It also fetches content where appropriate via AJAX in order to avoid unnecessary load times.

alreadyfetched = false;

function BrowseWorkCallback(ResponseCode, Contents) {

	document.getElementById("BrowseWork").style.cursor = "pointer";
	
	if (ResponseCode >= 400) {
		alert("Could not retrieve categories; server returned HTTP response " + ResponseCode + ". Click the list item once more to try again.");
		document.getElementById("BrowseWork").style.backgroundImage = "url(images/xtoplus.gif)";
		eraseCookie("BrowseWork");
		return;
	}

	document.getElementById("BrowseWork").style.backgroundImage = "url(images/xtominus.gif)";

	document.getElementById("BrowseWorkList").innerHTML = Contents;
	document.getElementById("BrowseWorkList").onclick = expandcategory;
	
	document.getElementById("BrowseWorkList").style.visibility = "visible";
	document.getElementById("BrowseWorkList").style.display = "block";
}

function NewestWorkCallback(ResponseCode, Contents) {

	document.getElementById("NewestWork").style.cursor = "pointer";
	
	if (ResponseCode >= 400) {
		alert("Could not retrieve newest work; server returned HTTP response " + ResponseCode + ". Click the list item once more to try again.");
		document.getElementById("NewestWork").style.backgroundImage = "url(images/xtoplus.gif)";
		eraseCookie("NewestWork");
		return;
	}

	document.getElementById("NewestWork").style.backgroundImage = "url(images/xtominus.gif)";
	document.getElementById("NewestWorkList").innerHTML = Contents;
	document.getElementById("NewestWorkList").style.visibility = "visible";
	document.getElementById("NewestWorkList").style.display = "block";
}

function expand(evt) {
	if (!evt) var evt = window.event;
	var targelem = (evt.target) ? evt.target : evt.srcElement;
	
	//Konqueror registers clicks on the TEXT node. Not what we want.
	//Some browsers need this constant defined for them.
	if (document.TEXT_NODE == null) { document.TEXT_NODE = 3; }
	if (targelem && targelem.nodeType == document.TEXT_NODE) {
		//Transfer the event to the parent (which is not a text node).
		targelem = targelem.parentNode;
	}
	
	if (targelem && targelem != this) {
		//We do not want the bubbling behavior, but neither do we want to define event handlers for every
		//element underneath this level to cancel bubbling.
		
		//However, we do want the link's action to execute... if one exists.
		if (targelem.childNodes && targelem.childNodes.length > 0 && targelem.childNodes[0].nodeName.toUpperCase() == 'A' && targelem.parentNode.nodeName.toUpperCase() != 'MARQUEE') {
			location.href = targelem.childNodes[0].href;
		}
		
		return;
	}
	
	return expandelem(this);
}

function expandcategory(evt) {
	if (!evt) var evt = window.event;
	var targelem = (evt.target) ? evt.target : evt.srcElement;
	if (targelem && targelem != this) {
		return expandelem(targelem);
	}
}

function expandelem(elem) {
	var http_prefix = "http";

	var colonpos = document.location.href.indexOf(":");

	if (colonpos >= 0) {
		http_prefix = document.location.href.substring(0, colonpos);
	}

	if (elem.childNodes[1].style.visibility == "visible") {
		elem.childNodes[1].style.display="none";
		elem.childNodes[1].style.visibility="hidden";
		elem.style.backgroundImage="url(images/plus.gif)";

		if (elem.id != "BrowseWork" && elem.id != "NewestWork") {
			createCookie(elem.id, "1", 365);
		}
		else {
			eraseCookie(elem.id);
		}
	}

	else if (elem.id == "BrowseWork" && !alreadyfetched) {
		elem.style.cursor = "progress";
		elem.style.backgroundImage = "url(images/plustox.gif)";

		var fetchpage = new SafeXMLRequest();
		fetchpage.setCallback(BrowseWorkCallback);
	
		fetchpage.open("GET", http_prefix + "://www.hiregeeks.com/dynamic/categories.shtml");
		alreadyfetched = true;

		createCookie(elem.id, "1", 365);
	}
	else if (elem.id == "NewestWork") {
		elem.style.cursor = "progress";
		elem.style.backgroundImage = "url(images/plustox.gif)";

		var fetchpage = new SafeXMLRequest();
		fetchpage.setCallback(NewestWorkCallback);
		
		fetchpage.open("GET", http_prefix + "://www.hiregeeks.com/dynamic/newestwork.shtml");

		createCookie(elem.id, "1", 365);
	}
	else {
		elem.childNodes[1].style.display="block";
		elem.childNodes[1].style.visibility="visible";
		elem.style.backgroundImage="url(images/minus.gif)";
		
		eraseCookie(elem.id);
		//createCookie(elem.id, "1", 365);
	}
	
	return true;
}

//The browse and newest items are hidden when we start up (since non-JS browsers can't use them).
//Make them, along with every other subitem, visible.
var parentnavnode = document.getElementById("ParentNavNode");
for (var childnavnode = 0; childnavnode < parentnavnode.childNodes.length; childnavnode++) {
	var navchild = parentnavnode.childNodes[childnavnode];
	
	//Certain browsers don't know about ELEMENT_NODE, so use 1 for it in that case.
	if (document.ELEMENT_NODE == null) { document.ELEMENT_NODE = 1; }
	if (navchild.nodeType == document.ELEMENT_NODE) {
		navchild.style.display="block";
		navchild.style.visibility="visible";
		
		if (navchild.id != "BrowseWork" && navchild.id != "NewestWork") {
			navchild.childNodes[1].style.display = "block";
			navchild.childNodes[1].style.visibility = "visible";
		}
		else {
			navchild.style.backgroundImage="url(images/plus.gif)";
		}
	}
}

//Now set the default action to be expanding the nodes.
document.getElementById("SiteInfo").onclick = expand;
document.getElementById("Buyers").onclick = expand;
document.getElementById("Geeks").onclick = expand;
document.getElementById("BrowseWork").onclick = expand;
document.getElementById("NewestWork").onclick = expand;

//Shown by default.
if (parseInt(readCookie("SiteInfo")) == 1) { expandelem(document.getElementById("SiteInfo")); }
if (parseInt(readCookie("Buyers")) == 1) { expandelem(document.getElementById("Buyers")); }
if (parseInt(readCookie("Geeks")) == 1) { expandelem(document.getElementById("Geeks")); }

//Hidden by default (without javascript, these won't work anyway).
if (parseInt(readCookie("BrowseWork")) == 1) {
	expandelem(document.getElementById("BrowseWork"));
	
	if (parseInt(readCookie("NewestWork")) == 1) {
		//Wait half a second; don't do both at once.
		setTimeout("expandelem(document.getElementById('NewestWork'))", 500);
	}
}
else if (parseInt(readCookie("NewestWork")) == 1) { expandelem(document.getElementById("NewestWork")); }
