// treeview.js
// funzioni per la gestione delle treeview

var SelectedNode = null;
var DefaultPath = null;

// Reindirizza gli eventi
document.onclick = Node_MouseClick;
document.onmousedown = Mouse_Down;
document.onmouseout = Node_MouseOut;
document.onmouseover = Node_MouseOver;

if (document.layers)
	window.captureEvents(Event.MOUSEDOWN);
window.onmousedown = Mouse_Down;

var popup = null;

// i navigatori
var theText = new Reference(), theNotes = new Reference(), theParallels = new Reference();

theText.subType = refText;
theNotes.subType = refNotes;
theParallels.subType = refParallels;

// Premendo uno dei pulsanti del mouse
function Mouse_Down(button) {

	// Se è il pulsante è il destro o centrale
	if (navigator.appName == 'Netscape' && (button.which == 3 || button.which == 2)) {
		return false;
	}
	else if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3)) {
		alert("© 2001 - Copyright by CathoMedia\nTutti i diritti riservati");
		return false;
	}

	// è ammesso
	return true;
}

// Naviga all'indirizzo del nodo...
function NavigateTo(obj) {
	
	// Se ha un indirizzo per navigare...
	if (obj.nurl != null) {
		var s = obj.nurl.toString();
		
		// Se è stata specificata dir di default...
		if (DefaultPath != null) {
			s = DefaultPath + s;
		}
		if (parent.frames["workarea"].frames["testo"] == null) {
			parent.frames["workarea"].location = "text_browser.htm?" + s;
		}
		else {
			parent.frames["workarea"].frames["testo"].location = s;
		}
	}
	
}

// Click con il mouse sull'oggetto...
function Node_MouseClick() {
	var e = window.event.srcElement;

	SelectNode(e, false);
	NavigateTo(e);

}

// Il mouse è passato su un oggetto, ora non è più su di esso...
function Node_MouseOut() {
	var e = window.event.srcElement;
	var s, name, index;
	
	if (e.id != null) {
		// Converte in stringa l'Id
		s = e.id.toString();
		// Estrae nome ed indice dall'Id
		name = s.substring(0, 2);
		index = s.substring(2);
		// l'oggetto è un nodo o parte di esso...
		if ((name == "pm" || name == "ni" || name == "nt") && index != SelectedNode)
			document.all("nt" + index).style.textDecoration = "none";
	}
	
}

// Il mouse è sopra l'oggetto...
function Node_MouseOver() {
	var e = window.event.srcElement;
	var s, name, index;
	
	if (e.id != null) {
		// Converte in stringa l'Id
		s = e.id.toString();
		// Estrae nome ed indice dall'Id
		name = s.substring(0, 2);
		index = s.substring(2);
		// l'oggetto è un nodo o parte di esso...
		if ((name == "pm" || name == "ni" || name == "nt") && index != SelectedNode)
			document.all("nt" + index).style.textDecoration = "underline";
	}
	
}

// Apre il primo nodo...
function OpenFirstNode() {
	var e = document.all("nt1");
	var i;
	
	// Fino a quando ci sono nodi validi
	while (e != null && e.nc != null) {
		// Seleziona questo
		SelectNode(e, false);
		// prossimo nodo figlio
		i = e.nc;
		e = document.all("nt" + i);
	}
	// Seleziona il successivo e naviga
	e = document.all("nt" + i);
	SelectNode(e, false);
	NavigateTo(e);
	
}

// Seleziona un libro
function selectBook(book) {
	var i = 1, allobj = parent.frames["treeview"].document.all, node, nodeList;

	node = allobj("nt" + i);
	while (node != null) {
		if (node.nurl == book + ".htm")
			break;
		i++;
		node = allobj("nt" + i);
	}

	nodeList = node.id + ";";

	node = allobj("nt" + node.np);
	while (node.np != null) {
		nodeList = node.id + ";" + nodeList;
		node = allobj("nt" + node.np);
	}
	nodeList = node.id + ";" + nodeList;
	
	i = nodeList.indexOf(";");
	while (i != -1) {
		node = allobj(nodeList.substr(0, i));
		parent.frames["treeview"].SelectNode(node, true);
		nodeList = nodeList.substr(i + 1);
		i = nodeList.indexOf(";");
	}
	// visualizza all'inizio della finestra
	node.scrollIntoView(true);
	
}

// Seleziona l'oggetto specificato (un nodo di una treeview)...
function SelectNode(obj, expandAll) {

	if (obj.id != null) {
		var s, name, index;

		// Converte in stringa l'Id
		s = obj.id.toString();
		// Estrae nome ed indice dall'Id
		name = s.substring(0, 2);
		index = s.substring(2);

		if (name == "pm" || name == "ni" || name == "nt") {
			var pm, ni, nt, flag;
			
			pm = document.all("pm" + index);
			ni = document.all("ni" + index);
			nt = document.all("nt" + index);
			
			if (nt.nc != null) {
				// Se richiesto expand all (se no switcha)
				flag = SwitchDisplay(document.all("t" + nt.nc), expandAll);
				// Scambia +/- e icona
				SwitchIcon(pm, flag);
				SwitchIcon(ni, flag);
			}
		
			// Selezione
			if (SelectedNode != null) {
				nt = document.all("nt" + SelectedNode);
				// Deseleziona
				nt.style.border = "0";
				nt.style.background = "#FFFFFF";
				nt.style.color = "#000000";
				nt.style.cursor = "hand";
				nt.style.textDecoration = "none";
				if (nt.nc == null)
					SwitchIcon(document.all("ni" + SelectedNode), false);
			}
			// Ora il nodo selezionato è..
			SelectedNode = index;
			nt = document.all("nt" + SelectedNode);
			// Seleziona
			nt.style.border = "2 solid #000080";
			nt.style.background = "#000080";
			nt.style.color = "#FFFFFF";
			nt.style.cursor = "default";
			nt.style.textDecoration = "none";
			if (nt.nc == null)
				SwitchIcon(ni, true);
		}
	}
}

// Inverte l'icona (usa esrc/csrc)
// Uso:
// obj = oggetto a cui cambiare l'icona
// Expanded_Icon (boolean) true se deve usare l'icoca Expanded, false se l'icona Collapsed
function SwitchIcon(obj, Exapnded_Icon) {

	if (obj != null) {
		if (obj.src != null && obj.esrc != null && obj.csrc != null) {
			if (Exapnded_Icon)
				obj.src = obj.esrc + ".gif";
			else
				obj.src = obj.csrc + ".gif";
		}
	}
	
}

// Inverte lo stato della visibilità...
function SwitchDisplay(obj, flag) {

	if (obj != null) {
		if (flag) {
			obj.style.display = "";
			return true;
		}
		else {
			if (obj.style.display == "") {
				obj.style.display = "none";
				return false;
			}
			else {
				obj.style.display = "";
				return true;
			}
		}
	}
	
}


