/* sets a preferenes, it callback is true the it reloads the page once the
 * server responds to the request */
function link(parent_id, type, needs_reload) {
	child_id = document.getElementById(parent_id + '_child').value;
	if (child_id == '') return;
	var url = html_root + "js/admin.php?link="+type+"&parent_id=" + parent_id + "&child_id=" + child_id + "&sid=" + Math.random();
	// alert(url);
	ajax_query(url, true);
} 

function unlink(parent_id, child_id, type, needs_reload) {
	var url = html_root + "js/admin.php?unlink="+type+"&parent_id=" + parent_id + "&child_id=" + child_id + "&sid=" + Math.random();
	// alert(url);
	ajax_query(url, true);
} 

function add_category(parent_id, needs_reload) {
	child_name = document.getElementById(parent_id + "_child_name").value;
	// alert("Adding category `" + child_name + "' to category #" + parent_id);
	// &perms=admin:read,write,view;user=read,write,view;
	// &groups=admin,user&user=read,write,view&admin=read,write,view;
	inputs = document.getElementsByTagName('input');
	perms = new Object();
	for(i = 0; i < inputs.length; i++) {
		re = new RegExp('^' + parent_id + '-perm-(\\w*)-(\\w*)');
		if (matches = inputs[i].id.match(re)) {
			if (inputs[i].checked) {
				if (!perms[matches[1]]) {
					perms[matches[1]] = matches[2]
				} else {
					perms[matches[1]] += ',' + matches[2]
				}
			}
		}
	}
	perms_str = '';
	for (group in perms) {
		if (perms_str == '')
			perms_str  =       group + ':' + perms[group];
		else 
			perms_str += ';' + group + ':' + perms[group];
	}
	var url = html_root + "js/admin.php"   + 
		"?add="        + "category"    +
		"&parent_id="  + parent_id     +
		"&perms="      + perms_str     +
		"&child_name=" + child_name    +
		"&sid="        + Math.random() ;
	// document.location = url;
	// ajax_query(url, needs_reload);
	ajax_query(url, true);
}
function modify_category(category_id) {
	// child_name = document.getElementById(parent_id + "_child_name").value;
	// alert("Adding category `" + child_name + "' to category #" + parent_id);
	// &perms=admin:read,write,view;user=read,write,view;
	// &groups=admin,user&user=read,write,view&admin=read,write,view;
	inputs = document.getElementsByTagName('input');
	perms = new Object();
	for(i = 0; i < inputs.length; i++) {
		re = new RegExp('^' + category_id + '-perm-(\\w*)-(\\w*)');
		if (matches = inputs[i].id.match(re)) {
			if (!perms[matches[1]]) {
				perms[matches[1]] = '';
			}
			if (inputs[i].checked) {
				if (perms[matches[1]] == '') {
					perms[matches[1]] = matches[2]
				} else {
					perms[matches[1]] += ',' + matches[2]
				}
			}
		}
	}
	perms_str = '';
	for (group in perms) {
		if (perms_str == '')
			perms_str  =       group + ':' + perms[group];
		else 
			perms_str += ';' + group + ':' + perms[group];
	}
	// alert(perms_str);
	var url = html_root + "js/admin.php"    + 
		"?modify="      + "category"    +
		"&category_id=" + category_id   +
		"&perms="       + perms_str     +
		"&sid="         + Math.random() ;
	// alert(url);
	// document.location = url;
	// ajax_query(url, needs_reload);
	ajax_query(url, true);
}
function create_edit_box(category_id) {
	var url = html_root + "js/admin.php"   + 
		"?edit="        + "category"   +
		"&category_id=" + category_id  +
		"&sid="         + Math.random() ;
	ajax_query(url, create_edit_box_cb, category_id);
}
function create_edit_box_cb(category_id) {
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") { 
		box = document.getElementById("category_" + category_id);
		edit_box = document.createElement('div');
		edit_box.style.padding = "1em";
		edit_box.id = 'category_' + category_id + "_edit";
		edit_box.style.display = 'block';
		edit_box.innerHTML = xmlHttp.responseText +
			'<input type="button" value="Submit" onclick="javascript:modify_category(' + category_id + ')" />' + 
			'<br style="clear:both;"/>';
		box.appendChild(edit_box);
	} 
}
function toggle_edit(category_id) {
	edit_box = document.getElementById("category_" + category_id + "_edit");
	if (edit_box == null) {
		create_edit_box(category_id);
	} else {
		if (edit_box.style.display == 'block') {
			edit_box.style.display = 'none';
		} else {
			edit_box.style.display = 'block';
		}
	}
}
