if (typeof console == "undefined")
	console = {debug:function(){}};

treeNav = {}

treeNav.tree = false;

treeNav.nodeIndexUpdate = function () {
	treeNav.nodeIndex = {};
	dojo.lang.forEach(treeNav.tree.getDescendants(),function (node) { if (!node.cId) { return; } treeNav.nodeIndex[node.cId] = node; })
};

treeNav.expandTo = function (id, doBreadcrumb) {
	if (typeof doBreadcrumb == "undefined")
		var doBreadcrumb = false;

	// has the tree been loaded?
	if (!treeNav.tree) { return; }

	// find the node
	var node = treeNav.nodeIndex[id];
	if (!node) { return; }

	// expand to node
	treeNav.controller.expandToNode(node);

	// expand the node itself if it has children
	if (node.children.length)
		node.expand();

	if (!doBreadcrumb) { return; }

	// breadcrumb
	var bc = dojo.byId("breadcrumb");
	if (!bc) { return; }
	var depth = 0;
	bc.appendChild(document.createTextNode(""));
	do
	{
		var title = node.cAlt ? node.cAlt : node.title;
		if (!title) { continue; }

		if (depth)
			bc.insertBefore(document.createTextNode(" > "), bc.childNodes[0]);

		if (node.cHref)
		{
			var link = document.createElement("a");
			link.href = node.cHref;
			link.appendChild(document.createTextNode(title));
			bc.insertBefore(link, bc.childNodes[0]);
		}
		else
			bc.insertBefore(document.createTextNode(title), bc.childNodes[0]);

		depth++;
	} while (node = node.parent)

	if (depth < 2)
		bc.style.display = "none";
};

treeNav.titleClick = function (event) {
	var node = event.node;
	if (!node.isFolder)
		return;

	if (node.isExpanded)
		treeNav.controller.collapseAll(node); //node.collapse();
	else
		node.expand();
};

treeNav.openWindow = function (event) {
	var w = window.open(event.target.href);
	if (w)
		event.preventDefault();
};

treeNav.makeLinks = function (event) {
	var node = event.child;
	if (!node.cHref)
		return;

	var link = document.createElement("a");
	link.href = node.cHref;
	link.title = node.cAlt;
	link.className = "TreeLabel";
	link.appendChild(document.createTextNode(node.title));

	if (node.cOw)
		dojo.event.connect(link, "onclick", treeNav, "openWindow");

	var labelNode = node.labelNode;
	labelNode.parentNode.replaceChild(link, labelNode);
	node.labelNode = link;
};

treeNav.drawNav = function () {
	var node;

	if (node = dojo.byId("navContainer"))
	{
		var controller = treeNav.controller = dojo.widget.createWidget("TreeBasicControllerV3");
		var selector = dojo.widget.createWidget("TreeSelectorV3");

		var tree = treeNav.tree = dojo.widget.createWidget("TreeV3", {listeners:[selector.widgetId, controller.widgetId], templateCssPath:"TreeV3.css", eagerWidgetInstantiation:true});

		dojo.event.topic.subscribe(tree.eventNames.afterAddChild, treeNav.makeLinks);

		dojo.event.topic.subscribe(selector.eventNames.select, treeNav.titleClick);
		dojo.event.topic.subscribe(selector.eventNames.dblselect, treeNav.titleClick);

		tree.setChildren(treeNav.getSiteMap().children);

		treeNav.nodeIndexUpdate();

		node.innerHTML = "";
		node.appendChild(tree.domNode);
		dojo.html.disableSelection(tree.domNode);
	}
};

function initPage () {
}

function genericBind (node)
{
	node.action = "submit.asp";
	var x = new dojo.io.FormBind
	({
		formNode: node,
		handle: genericFormResponseHandler,
		mimetype: "text/json",
		sendTransport: true
	});
	x.onSubmit = genericFormSubmitHandler;
}

function genericFormSubmitDisableForm (form)
{
	var e;
	for (var i = form.elements.length; i--;)
	{
		e = form.elements[i];

		switch (e.type)
		{
			case "hidden":
				break;

			default:
				if (!e.disabled)
				{
					e._genericFormSubmit_enableMe = true;
					e.disabled = true;
				}
				break;
		}
	}
}

function genericFormSubmitHandler (form)
{
	window.setTimeout((function () { genericFormSubmitDisableForm(form); }), 1);
	return true;
}

function genericFormResponseEnableForm (form)
{
	var e;
	for (var i = form.elements.length; i--;)
	{
		e = form.elements[i];

		switch (e.type)
		{
			case "hidden":
				break;

			default:
				if (e.disabled && e._genericFormSubmit_enableMe)
				{
					e._genericFormSubmit_enableMe = false;
					e.disabled = false;
				}
				break;
		}
	}
}

function genericIframeIOResponseHandler (type, result, request) { genericFormResponseHandler (type, result, null, request); }

function genericFormResponseHandler (type, result, evt, request)
{
	switch (type)
	{
		case "load":

			if (result.alert)
				alert(result.alert);	// show an alert using the browser's built-in dialog

			if (request.formNode)
				genericFormResponseEnableForm(request.formNode);	// if this response is bound to a form, re-enable the form elements

			if (result.reset && request.formNode)
				request.formNode.reset();

			if (result.windowOpen)
			{
				switch (typeof result.windowOpen)
				{
					case "array":
						var w = window.open(result.windowOpen[0], result.windowOpen[1], result.windowOpen[2], result.windowOpen[3]);
						break;

					default:
						var w = window.open(result.windowOpen)
						break;
				}
			}

			if (result.eval)
				eval(result.eval);

			if (result.redirect)
			{
				window.location.href = result.redirect;
				break;
			}

			if (result.reload)
			{
				window.setTimeout(function(){window.location.href = window.location;},redd.standardFadeDuration*1.5);
				break;
			}

			break;

		case "error":
			alert("An error occurred when attempting to perform this action. Please try again later.");
			if (request.formNode)
				genericFormResponseEnableForm(request.formNode);
			break;

		default:
			alert("Unhandled form result type: "+ type);
			if (request.formNode)
				genericFormResponseEnableForm(request.formNode);
			break;
	}
}

