// Consts
var DEBUG = false;
var gAlerted = false;
var TOC_XML_FILE = 'toc_{lang}.xml';

// Global variables
var gBaseUrl = '';
var gHref = '';
var gTtreeItem = null;

// Handy functions
function showFailure(request, err) { if (DEBUG) { alert("Failure: " + err); } }
function showException(request, ex) { if (DEBUG) { alert("Exception: " + ex); } }

function displayToc(baseUrl, lang, href) {
	
	gBaseUrl = baseUrl;
	gHref = href;
	var url = TOC_XML_FILE.replace(/\{lang\}/, lang);
	url = baseUrl + 'xml/' + url;

	webFXTreeConfig.rootIcon        = baseUrl + 'icones/xtree/foldericon.png';
	webFXTreeConfig.openRootIcon    = baseUrl + 'icones/xtree/openfoldericon.png';
	webFXTreeConfig.folderIcon      = baseUrl + 'icones/xtree/foldericon.png';
	webFXTreeConfig.openFolderIcon  = baseUrl + 'icones/xtree/openfoldericon.png';
	webFXTreeConfig.fileIcon        = baseUrl + 'icones/xtree/file.png';
	webFXTreeConfig.iIcon           = baseUrl + 'icones/xtree/I.png';
	webFXTreeConfig.lIcon           = baseUrl + 'icones/xtree/L.png';
	webFXTreeConfig.lMinusIcon      = baseUrl + 'icones/xtree/Lminus.png';
	webFXTreeConfig.lPlusIcon       = baseUrl + 'icones/xtree/Lplus.png';
	webFXTreeConfig.tIcon           = baseUrl + 'icones/xtree/T.png';
	webFXTreeConfig.tMinusIcon      = baseUrl + 'icones/xtree/Tminus.png';
	webFXTreeConfig.tPlusIcon       = baseUrl + 'icones/xtree/Tplus.png';
	webFXTreeConfig.blankIcon       = baseUrl + 'icones/xtree/blank.png';
	webFXTreeConfig.defaultText     = '';
	webFXTreeConfig.behaviour		= 'explorer';

	var myAjax = new Ajax.Request(url,
	{
		method: 'get',
		parameters: '',
		onComplete: showTree,
		onFailure: showFailure,
		onException: showException
	});
}

function showTree(request) {
	var root = request.responseXML.documentElement;
	if (root == null) {
		// Horrible hack for local IE!!!
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
		xmlDoc.loadXML(request.responseText);
		root = xmlDoc.documentElement;
	}

	var tree = new WebFXTree('');

	browseCollection(root, tree, true);

	$('toc').innerHTML = tree.toString() + '<div class="clearer">&#160;</div>\n';
}

function computeAction(href) {
	if (href.substr(href.length - 4) == '.sxw') {
		href = href.substr(0, href.length - 4) + '.html';
	}
	return gBaseUrl + '../' + href;
}

function browseCollection(root, tree, isroot) {
	var children = root.childNodes;


	// First all resources
	for (var i=0; i<children.length; i++) {
		var child = children[i];
		var nodeName = child.nodeName;
		if (nodeName != 'tf:resource') {
			continue;
		}

		var treeItem = null;
		var childName = child.getAttribute('name');
		treeItem = new WebFXTreeItem(childName);
		var href = child.getAttribute('href');
		treeItem.action = computeAction(href);
		tree.add(treeItem);

		if (href == gHref) {
			//treeItem.icon = gBaseUrl + 'icones/xtree/selected_file.png';
			gTreeItem = treeItem;
		}
	}

	// Then all collections
	for (var i=0; i<children.length; i++) {
		var child = children[i];
		var nodeName = child.nodeName;
		if (nodeName != 'tf:collection') {
			continue;
		}

		var treeItem = null;
		var childName = child.getAttribute('name');
		if (	child.getAttribute('label') != undefined
			&&	child.getAttribute('label') != '') {
			childName = child.getAttribute('label');
		}
		if (isroot && childName == 'docs') {
			treeItem = tree;
			browseCollection(child, treeItem, true);
			return;
		} else {
			if (isroot) {
				treeItem = tree;
				treeItem.text = childName;
			} else {
				treeItem = new WebFXTreeItem(childName);
			}
			var href= child.getAttribute('href');
			if (href != undefined) {
				treeItem.action = computeAction(href);
			}
			if (!isroot) {
				tree.add(treeItem);
			}
			if (href == gHref) {
				//treeItem.icon = gBaseUrl + 'icones/xtree/selected_foldericon.png';
				gTreeItem = treeItem;
			}
		}

		browseCollection(child, treeItem, false);
	}
}
