var xmlHttp = false;
var nodesIDs = 0;

// IE
try {
    xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
    try {
        xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(e) {
        xmlHttp  = false;
    }
}

// Gecko, KHTML, Opera
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
    xmlHttp = new XMLHttpRequest();
}

function addEvent(obj, eventType, f, useCapture) {
	if (obj.addEventListener) {
		// Gecko, KHTML, Opera
		obj.addEventListener(eventType, f, useCapture);
		return true;
	} else if (obj.attachEvent) {
		// IE
		return obj.attachEvent("on"+eventType, f);
	} else {
		alert("Fehler, Event konnte nicht gesetzt werden!");
		return false;
	}
}

function removeLastSelectNode() {
	removeSelectNode(nodesIDs-1);
}

function removeSelectNode(nodeID) {
	var node = document.getElementById("node_select_"+nodeID);
	var nodeDiv = document.getElementById("node_div_"+nodeID);

	if (nodeID == 0) {
		node.disabled = false;
		updateSelection(node);
		document.getElementById("select_cat_back").style.display = "none";
		return;
	}

	var nodeBefore = document.getElementById("node_select_"+(nodeID-1));

	document.getElementById("select_cat").removeChild(nodeDiv);

	nodeBefore.disabled = false;

	// IE-Hack
	nodesIDs--;
	updateSelection(nodeBefore);

	if (nodeID == 1) {
		document.getElementById("select_cat_back").style.display = "none";
	}

}

function updateSelection(elem) {
	// IE-Hack
	elem = document.getElementById("node_select_"+(nodesIDs-1));

	document.getElementById("cat_id").value = elem.value;
	document.getElementById("cat_name").innerHTML = "<label>&nbsp</label><span class=\"textmarker\">"+elem.options[elem.selectedIndex].text+"<\/span>";
	document.getElementById("select_cat_back").style.display = "";
}

function updateSubCats() {
	// IE-Hack
	myThis = document.getElementById("node_select_"+(nodesIDs-1));

	if (myThis.value > 0) {
		updateSelection(myThis);
		loadSubCats(myThis.value);
	}
}

function loadSubCats(cat_id) {
	if (xmlHttp) {
		
		xmlHttp.open('GET', 'ajax_cat_select.php?cat_id='+cat_id, true);
		xmlHttp.onreadystatechange = function () {
			if (xmlHttp.readyState == 4) {
				var response = xmlHttp.responseText;
				var cats = new Array();
				var nodeOption;
				var cat = new Array();

				if (response.indexOf("<>" != -1)) {
					cats = response.split("<>");
					if (cats.length > 1) {
						if (nodesIDs > 0) {
							document.getElementById("node_select_"+(nodesIDs-1)).disabled = true;
						}

						var tab = "";
						for (var i = 0; i < nodesIDs; i++) {
							// :FIXME:
							// Aus optischen Gründen wurden die Tabs bis
							// auf weiteres auskommentiert
							//tab = tab + "-- ";
						}

						var nodeDiv = document.createElement("div");
						nodeDiv.id = "node_div_"+nodesIDs;
						nodeDiv.innerHTML += tab;
						nodeDiv.style.margin = "5px 0px 0px 115px;";

						var nodeSelect = document.createElement("select");
						nodeSelect.id = "node_select_"+nodesIDs;
						nodesIDs++;

						// IE-Hack
						// Bei einigen IE Versionen kann die folgende Anweisung zu Problemen
						// führen und daher lasse ich den Hack hier zunächst stehen
						/*if (nodesIDs > 1) {
							
							var prevSelect = document.getElementById("node_select_"+(nodesIDs-2));
							nodeSelect.options[0] = new Option(prevSelect.options[prevSelect.selectedIndex].text, -1);
							nodeSelect.options[0].style.fontWeight = "bold";
							nodeSelect.options[0].style.background = "#eeeeee";
							nodeSelect.options[0].style.color = "#000000";
						
						} else {
							nodeSelect.options[0] = new Option("-- Bitte wählen --", -1);
						}*/
						
						// Non IE
						nodeSelect.options[0] = new Option("-- Bitte wählen --", -1);
						
						nodeSelect.options[0].disabled = true;
						nodeSelect.options[0].defaultSelected = true;
						nodeSelect.options[0].selected = true;

						for (var i = 0; i < cats.length - 1; i++) {
							cat = cats[i].split("=>");

							// IE-Hack
							nodeSelect.options[nodeSelect.options.length] = new Option(cat[1], cat[0]);
						}

						addEvent(nodeSelect, "change", updateSubCats);

						nodeDiv.appendChild(nodeSelect);
						document.getElementById('select_cat').appendChild(nodeDiv);
					}
				}
				
			}
		}
	};
	xmlHttp.send(null);
}
