function $(id) {
	return document.getElementById(id);
}

function FoldInFoldOut(id) {
	this.id = id;
	this.defaultstate = 'folded'; // expanded or folded, default folded
	this.path = '';
	
	this.foldOut = function (elm) {
		//symbol auf minus setzen (+ aktion)
		this.prependReplace('<img src="'+this.path+'minus.gif" class="plusminus" onClick="tree.foldIn(this.parentNode)" />', elm);
	
		//alle unterpunkte einblenden
		var uls = elm.getElementsByTagName('ul');
		for (var i=0; i<uls.length; i++) {
			if (uls[i].parentNode == elm) {
				this.show(uls[i]);
			}
		}
	}
	
	this.show = function (elm) {
		elm.style.display = 'block';
	}
	
	this.foldIn = function (elm) {
		//symbol auf plus setzen (+ aktion)
		this.prependReplace('<img src="'+this.path+'plus.gif" class="plusminus" onClick="tree.foldOut(this.parentNode)" />', elm);
	
		//alle unterpunkte ausblenden
		var uls = elm.getElementsByTagName('ul');
		for (var i=0; i<uls.length; i++) {
			if (uls[i].parentNode == elm) {
				this.hide(uls[i]);
			}
		}
	}
	
	this.hide = function (elm) {
		elm.style.display = 'none';
	}
	
	this.init = function (elm, isSub) {
		if (!elm) {
			elm = $(this.id);
		}
		var lis = elm.getElementsByTagName('li');
		for (var i=0; i<lis.length; i++) {
			this.initSingle(lis[i], isSub);
		}
	}
	
	this.initSingle = function (elm, isSub) {
		if (this.hasSub(elm)) {
			if (this.defaultstate == 'expanded') {
				this.foldOut(elm);
			} else {
				this.foldIn(elm);
			}
			this.init (elm, true);
		} else {
			// symbol auf leer setzen
			this.prependReplace('<img src="'+this.path+'shim.gif" class="plusminus" />', elm);
		}
	}
	
	this.hasSub = function (elm) {
		return elm.getElementsByTagName('ul').length;
	}
	
	this.prependReplace = function (html, elm) {
		if (elm.firstChild.className == 'plusminus') {
			elm.removeChild(elm.firstChild);
		}
		elm.innerHTML = html + elm.innerHTML;
	}
}

function getPopupHtml(userid, groupname, parentgroup) {
	if (userid && groupname) {
		var html = '<a href="javascript:void(0);" onClick="removeUser('+userid+', \''+groupname+'\');">Benutzer aus Gruppe entfernen</a>';
	} else if (groupname) {
		var html = '<a href="javascript:void(0);" onClick="removeGroup(\''+groupname+'\',\''+parentgroup+'\');">Gruppe entfernen</a>';
		html += "<br />";
		html += '<a href="javascript:void(0);" onClick="addUser(\''+groupname+'\');">Benutzer hinzufügen</a>';
		html += "<br />";
		html += '<a href="javascript:void(0);" onClick="addGroup(\''+groupname+'\');">Untergruppe hinzufügen</a>';
	} else if (userid) {
		var html = '<a href="javascript:void(0);" onClick="addGroupToUser('+userid+');">Benutzer zu Gruppe hinzufügen</a>';
	}
	return html;
}

function getPopupHtml_Level(name) {
	var html = '<a href="javascript:void(0);" onClick="delLevel(\''+name+'\');">Berechtigungsstufe löschen</a>';
	html += "<br />";
	html += '<a href="javascript:void(0);" onClick="renameLevel(\''+name+'\');">Berechtigungsstufe umbenennen</a>';
	return html;
}
function getPopupHtml_Conn(groupname, clustername) {
	if (clustername) {
		var html = '<a href="javascript:void(0);" onClick="delCluster(\''+groupname+'\', \''+clustername+'\');">Cluster entfernen</a>';
	} else if (groupname) {
		var html = '<a href="javascript:void(0);" onClick="addCluster(\''+groupname+'\');">Cluster hinzufügen</a>';
	}
	return html;
}

function addUser(group) {
	$('xacl_groupname').value = group;
	$('xacl_action').value = 'addUser';
	$('xacl_formtitle').innerHTML = "Benutzer hinzufügen";
	$('xacl_groupselect').style.display = 'none';
	$('xacl_newgroupname').style.display = 'none';
	$('xacl_userselect').style.display = 'inline';
	$('xacl_groupaction').style.display = 'block';
	$('xacl_groupaction').scrollIntoView();
}

function addGroup(group) {
	$('xacl_groupname').value = group;
	$('xacl_action').value = 'addGroup';
	$('xacl_formtitle').innerHTML = "Gruppe hinzufügen";
	$('xacl_userselect').style.display = 'none';
	$('xacl_newgroupname').style.display = 'none';
	$('xacl_groupselect').style.display = 'inline';
	$('xacl_groupaction').style.display = 'block';
	$('xacl_groupaction').scrollIntoView();
}

function createGroup() {
	$('xacl_formtitle').innerHTML = "Neue Benutzergruppe erstellen";
	$('xacl_action').value = 'createGroup';
	$('submitButton').value = 'erstellen';
	$('xacl_userselect').style.display = 'none';
	$('xacl_groupselect').style.display = 'none';
	$('xacl_groupaction').style.display = 'block';
	$('xacl_newgroupname').style.display = 'inline';
	$('createGroup').scrollIntoView();
}

function removeUser(userid, groupname) {
	$('xacl_userid').value = userid;
	$('xacl_groupname').value = groupname;
	$('xacl_action').value = 'removeUserFromGroup';
	var confirmText = "Sind Sie sicher, dass Sie den Benutzer aus der Gruppe "+groupname+" entfernen möchen?";
	if (confirm(confirmText)) {
		$('xacl_groupaction').submit();
	}
}

function removeGroup(groupname, parentgroup) {
	$('xacl_parentgroup').value = parentgroup;
	$('xacl_groupname').value = groupname;
	$('xacl_action').value = 'removeGroup';
	var confirmText = "Sind Sie sicher, dass Sie die Gruppe "+groupname+" entfernen möchen?";
	if (!parentgroup) { 
		confirmText += "\nAlle Zuordnungen zu Benutzern gehen dadurch verloren.";
	}
	if (confirm(confirmText)) {
		$('xacl_groupaction').submit();
	}
}

function addGroupToUser(userid) {
	$('xacl_userid').value = userid;
	$('xacl_action').value = 'addUserToGroup';
	$('xacl_formtitle').innerHTML = "Benutzer zu Gruppe hinzufügen";
	$('xacl_groupselect').style.display = 'inline';
	$('xacl_groupaction').style.display = 'block';
	$('xacl_groupaction').scrollIntoView();
}

function makeOption(val1, val2, text) {
	var html = '<option value="'+val1+'"';
	if (val1 == val2) {
		html += ' selected="selected"';
	}
	html += '>'+text+'</option>';
	return html;
}

function changeToInput(elm, name, right, value) {
	var html = '<select name="xacl_rights['+name+']['+right+']">';
	html += makeOption(0, value, '-');
	html += makeOption(1, value, 'erlaubt');
	html += makeOption(-1, value, 'verboten');
	html += '</select>';

	elm.innerHTML = html;
	elm.onclick = '';
	$('submitButton').style.display = 'block';
}

function changeToLevelInput(elm, group, level, cluster) {
	var html = '<select name="xacl_level['+group+']['+cluster+']">';
	for (var i in allLevels) {
		html += makeOption(allLevels[i], level, allLevels[i]);
	}

	elm.innerHTML = html;
	elm.onclick = '';
	$('submitButton').style.display = 'block';
}

function renameLevel(name) {
	var html = '<input type="text" name="xacl_renames['+name+']" value="'+name+'" />';
	var elm = $('xacl_level_'+name);
	elm.innerHTML = html;
	$('submitButton').style.display = 'block';
}
function delLevel(name) {
	var confirmText = "Berechtigungsstufe "+name+" sicher löschen?";
	if (confirm(confirmText)) {
		$('xacl_action').value = 'delLevel';
		$('xacl_name').value = name;
		$('xacl_levelaction').submit();
	}
}

function create_Level() {
	$('createLevel').style.display = 'block';
	$('createLevel').scrollIntoView();
	$('xacl_action').value = 'createLevel';
}


function addCluster(groupname) {
	$('xacl_action').value = 'addCluster';
	$('xacl_groupname').value = groupname;
	$('addCluster').style.display = 'block';
	$('addCluster').scrollIntoView();
}

function delCluster(groupname, clustername) {
	$('xacl_action').value = 'delCluster';
	$('xacl_groupname').value = groupname;
	$('xacl_clustername').value = clustername;
	$('xacl_levelaction').submit();
}




