
var TYPE_ROOT = 0;
var TYPE_CONTAINER = 1;
var TYPE_FOLDER = 2;

var myTree = null;
var myMenuRoot = null;

var myDoYuiMenuLogging = false;

function initMenu(elementId, config) {
	if(config == undefined) {
		config = myMenu;
	}
	initYuiTree(elementId, myMenu);
}

function initYuiTree(elementId, config) {

	/*LOG*/if(logElementId && myDoYuiMenuLogging) log('initYuiTree');
	myTree = new YAHOO.widget.TreeView(elementId);
   	myTree.subscribe("labelClick", onNodeSelected); 
	
	var child = null;
	var tmpNode = null;
	var treeRoot = myTree.getRoot();

	var successRead = false;
	if(config != undefined) {
		/*LOG*/if(logElementId && myDoYuiMenuLogging) log('we have config');
		successRead = readTreeFromConfig(treeRoot, config);
	} else {
		/*LOG*/if(logElementId && myDoYuiMenuLogging) log('no config');
		successRead = false;
	}
	
	if(successRead == true) {
		myMenuRoot = myTree.getRoot().children[0];
	} else {
		//appendLog("Inserting default node");
		myMenuRoot = new YAHOO.widget.TextNode(
			{type:TYPE_CONTAINER, label:'Home', ckey: 'home'},
			myTree.getRoot(), 
			true); 
	}
	
	//myTree.expandAll();
	myTree.collapseAll();
	treeRoot.expand();
	//treeRoot.refresh();
	myTree.draw();

}

function readTreeFromConfig(treeRoot, config) {
	//insertConfigNode(treeRoot, config[0]); // using root node
	insertConfigNodeArray(treeRoot, config[0].children); // using first children
	return true;
}

function insertConfigNodeArray(mparent, cnodeArray) {
	if(cnodeArray != undefined) {
		for(var i = 0; i < cnodeArray.length; i++) {
			insertConfigNode(mparent, cnodeArray[i]);
		}
	}
	return true;
}

function insertConfigNode(mparent, cnode) {
	var mnode = null;
	if(typeof(cnode) == 'array') {
		mnode = mparent;
	} else {
		if(cnode == undefined) {
			// [MARF] Fehlerzustand: Kein Container angegeben
			/*
			mnode = new YAHOO.widget.TextNode(
				{id: 0, label: '???'},
				mparent, 
				true);
			*/
			
		} else {
			if(cnode.data.type == 0 || cnode.data.type == 2) {
				mnode = new YAHOO.widget.TextNode(
					cnode.data,
					mparent, 
					true);
				mnode.href = getContentLink(
					cnode.data.label, 
					cnode.data.cid, 
					cnode.data.id, 
					cnode.data.dipstype, 
					myPars);
			}
		}
	}
	/*LOG*/if(logElementId && myDoYuiMenuLogging) log('+ node ' + getObjectInternals(cnode));
	///*LOG*/if(logElementId && myDoYuiMenuLogging && typeof(cnode) != 'array') log(' ' + cnode.data.label);
	
	try { // [MARF] moved around this next line
		if(mnode != undefined) {
			insertConfigNodeArray(mnode, cnode.children);
		}
	} catch(ex) { /* no children */}
	/*
	if(cnode.children != undefined) {
		for(var i = 0; i < cnode.children.length; i++) {
			insertConfigNode(mnode, cnode.children[i]);
		}
	}
	*/
	return true;
}

function showNodeAsSelected(smid) {
	try {
		var node = myTree.getNodeByProperty("id", smid);
		expandToRoot(node);
		var el = node.getLabelEl();
		if(el) el.style.fontWeight = "bold";
	} catch(ex) {
		// node not found ... ignore
	}
}

function expandToRoot(node) {
	while(node != null) {
		node.expand();
		node = node.parent;
	}
}

var mySelectedNode = null;
function onNodeSelected(node) {

	if(mySelectedNode != undefined) {
		changeNodeSelectionStyle(mySelectedNode, false);
	}
	mySelectedNode = node;
	changeNodeSelectionStyle(mySelectedNode, true);
	//if(afx.isIE()) fixTree(tree);
	
	if(mySelectedNode.data.type == TYPE_CONTAINER) {
		var ckey = null;
		try {
			ckey = node.data.ckey;
		} catch(ex) {}
		if(ckey == undefined) {
			// normal operation
			document.location.href = getContentLink(node.data.label, node.data.cid, node.data.id, node.data.dipstype, myPars);
			
		} else {
			// open container by container_key
			document.location.href = getContentLink(node.data.label, null, node.data.id, node.data.dipstype, myPars, null, node.data.ckey);
		}
		return false;
		
	} else if(mySelectedNode.data.type == TYPE_FOLDER) {
		if(myIsFlatFolderMenu) {
			// get cids
			/*
			var cids = "";
			for(var i = 0; i < node.children.length; i++) {
				if(cids != "") cids += '.';
				cids += String(node.children[i].data.cid);
			}
			document.location.href = getContentLink(cids, node.data.id, node.data.disptype, myPars);
			*/
			// let CMS decide which are the child nodes
			document.location.href = getContentLink(node.data.label, null, node.data.id, node.data.disptype, myPars);
		}
		return false;
			
	} else if(mySelectedNode.data.type == TYPE_ROOT) {
		
	} else {

	}
	
	return true;
}

function doSwitchLang(lang) {
	document.location.href = getContentLink(
		"",
		myPars.cid, 
		myPars.smid, //((mySelectedNode == undefined)?null:mySelectedNode.data.id), 
		myPars.disptype,
		myPars, 
		lang);
	return false; // used in onlclick ... this prevents calling the actual url
}

function getContentLink(caption, cid, smid, disptype, pars, lang, /* optional */ ckey) {
	if(disptype == undefined) disptype = 0;
	if(lang == undefined) {
		try {
			if(pars != undefined) lang = pars.lang;
		} catch(ex) {}
	}
	
	if(cid != undefined || ckey != undefined) {
		return 'index.php?' + 
			(( cid == undefined)?'':'cid=' + cid + '&') + 
			((ckey == undefined)?'':'ckey=' + ckey + '&') + 
			((lang == undefined)?'':'lang=' + lang + '&') + 
			((pars.mmid == undefined)?'':'mmid=' + pars.mmid + '&') + 
			((smid == undefined)?'':'smid=' + smid + '&') + 
			((disptype == undefined)?'':'disptype=' + disptype + '&') + 
			'';
	} else {
		caption = caption.replace(/([ÄÖÜäöüß\\\/\$\?#: \s\-\n\.\W])/g, replaceUmlaute);
		//caption = caption.replace(/[\\\/\$\?#: \s\-\n\.\W]/g, '_');
		caption = caption.replace(/_+/g, '_');
		return 'info-' + 
			((lang == undefined)?'de':lang) + 
			((pars.mmid == undefined)?'':'-'+pars.mmid) + 
			((smid == undefined)?'':'-'+smid) + 
			((disptype == undefined)?'':'-'+disptype) + 
			((caption == undefined)?'':'_'+escape(caption)) + 
			'.html';
	}
}

function replaceUmlaute(foundChar) {
	if(foundChar == 'ä') return 'ae';
	if(foundChar == 'ö') return 'oe';
	if(foundChar == 'ü') return 'ue';
	if(foundChar == 'Ä') return 'Ae';
	if(foundChar == 'Ö') return 'Oe';
	if(foundChar == 'Ü') return 'Ue';
	if(foundChar == 'ß') return 'sz';
	return '_';
}

function changeNodeSelectionStyle(node, asSelected) {
	return true;
	/*
	var el = node.getLabelEl();
	if(el == undefined) return false;
	el.style.fontWeight = (asSelected)?'bold':'normal';
	el.style.border = (asSelected)?"1px solid #d0d0d0":"1px solid #fff";
	el.style.backgroundColor = (asSelected)?"#f0f0f0":'#fff';
	*/
}


function fixTree(aTree) {
	var el = null;
	for(var i = 0; i < aTree._nodes.length; i++) {
		try {
			el = document.getElementById('ygtvc' + aTree._nodes[i].index);
			if(el.childNodes.length == 0) {
				el.style.display = 'none';
			} else {
				el.style.display = 'block';
			}
		} catch(ex) {}
	}
}

var _isIE = null;
function isIE() {
	if(_isIE == undefined) {
		_isIE = (navigator.appName.indexOf("Explorer") != -1);
	}
	return _isIE;
}

function getObjectInternals(obj) {
	if(obj == undefined) return '[undefined]';
	var ret = obj + '[' + typeof(obj) + ']' + "[";
	for(key in ret) ret += key + ':' + obj[key] + ';';
	return ret + "]";
}