function openWindow(url, title, params) {
	if (!params) params = {};
	if (params.confirm && !confirm(params.confirm))
		return null;
	var def = 'toolbar,menubar,location,status,resizable,scrollbars'.split(',');
	for (var n in def)
		if (!params[def[n]])
			params[def[n]] = 0;
	if (params.width && params.height) {
		if (params.left == null) params.left = Math.max(0, Math.round((screen.width - params.width) / 2));
		if (params.top == null) params.top = Math.max(0, Math.round((screen.height - params.height) / 2 - 40));
	}
	var ps = [];
	for (n in params)
		if (n != "focus" && n != "confirm")
			ps[ps.length] = n + "=" + params[n];
	var win = window.open(url, title.replace(/\s+|\.+|-+/gi, ''), ps.join(','));
	if (params.focus) win.focus();
	return win;
}

function openEditor(url, width, height) {
	editCache=null;
	openWindow(url, 'edit', { width: width, height: height, left: (screen.width - width - 20), top: 40, resizable: 1, scrollbars: 1, noFocus: 1 });
	return false;
}

function loadContent(url, id, method, params) {
	new HttpRequest().send(url, method, params, function(html) {
		setContent(id, html);
	});
	return false;
}

function getVisible(e, def) {
	if (typeof e == "string") e = document.getElementById(e);
	if (e) {
		var d = e.style.display;
		if (d == 'none') return false;
		else if (d == '') return def;
		else return true;
	}
	return false;
}

function setVisible(e, visible) {
	if (typeof e == "string") e = document.getElementById(e);
	if (e) e.style.display = visible ? 'block' : 'none';
}

function setContent(e, html) {
	if (typeof e == "string") e = document.getElementById(e);
	if (e) e.innerHTML = html;
}

function enableForm(form, enable) {
	var es = form.elements;
	for (var i = 0; i < es.length; i++) {
		var e = es[i];
		e.blur();
		e.disabled = !enable;
	}
}

function editPost(url, id, scroll) {
	var form = document.forms["post-view-form-" + id];
	new HttpRequest().send(url, "GET", null, function(html) {
		setPost(id, html);
		enableForm(form, true);
		if (scroll)
			setTimeout("scrollToElement('post-" + id + "')", 1);
	});
	enableForm(form, false);
	return false;
}

function setPost(id, editHtml) {
	setVisible("post-view-" + id, !editHtml);
	var e = document.getElementById("post-edit-" + id);
	setVisible(e, editHtml);
	setContent(e, editHtml);
}

function savePost(url, id, key, newPost) {
	var form = document.forms["post-edit-form-" + id];
	form.key.value = key;
	new HttpRequest().send(url, "POST", form, function(html) {
		if (html.indexOf('__error__') == 0) {
			setContent("post-edit-" + id, html.substring(9));
		} else	if (html.indexOf("__redirect__") == 0) {
			document.location.href = html.substring(13);
			return false; // don't enable form
 		} else {
			if (newPost) {
				// create the new post first:
				var n = document.createElement("div");
				n.innerHTML = html;
				var e = document.getElementById("post-insert-" + id);
				e.parentNode.insertBefore(n, e);
			} else {
				setContent("post-view-" + id, html);
			}
			setPost(id);
		}
		enableForm(form, true);
	});
	enableForm(form, false);
	return false;
}

function removePost(url, id) {
	var form = document.forms["post-view-form-" + id];
	if (confirm("Do you really want to delete your post?")) {
		enableForm(form, false);
		new HttpRequest().send(url, "POST", null, function(html) {
			if (html == "__ok__") {
				var e = document.getElementById("post-" + id);
				if (e) e.parentNode.removeChild(e);
			} else if (html == "__error__") {
				alert("Cannot remove this post as others have already replied to it.");
			} else if (html.indexOf("__redirect__") == 0) {
				document.location.href = html.substring(13);
				return false; // don't enable form
			}
			enableForm(form, true);
		});
	}
	return false;
}

function addFile(id) {
	var e = document.getElementById("post-files-" + id);
	var n = document.createElement("div");
	if (!e.idCount) e.idCount = e.elCount = 0;
	var fid = "file_" + e.idCount++;
	e.elCount++;
	n.id = fid + "-" + id;
	n.className = "edit-resource";
	e.style.display = "block";
	n.innerHTML = '<div class="edit-resource-file"><input type="file" name="' + fid + '-file"></div>\
<div class="edit-resource-remove"><input type="button" value="Remove" onClick="return removeFile(\'' + n.id + '\')"></div>\
<div class="clear"></div>';
	e.appendChild(n);
}

function removeFile(id) {
	var n = document.getElementById(id);
	if (n) {
		var e = n.parentNode;
		if (--e.elCount == 0)
			e.style.display = "none";
		e.removeChild(n);
	}
	return false;
}

function toggleHelp(button, id) {
	var e = document.getElementById("help-" + id);
	var v = getVisible(e, false);
	setVisible(e, !v);
	button.value = v ? "Help" : "Close Help";
	return false;
}

function setUser(editHtml) {
	setVisible("user-view", !editHtml);
	var e = document.getElementById("user-edit");
	setVisible(e, editHtml);
	setContent(e, editHtml);
}

function editUser(url) {
	var form = document.forms["user-view-form"];
	new HttpRequest().send(url, "GET", null, function(html) {
		setUser(html);
		enableForm(form, true);
	});
	enableForm(form, false);
	return false;
}

function saveUser(url) {
	var form = document.forms["user-edit-form"];
	new HttpRequest().send(url, "POST", form, function(html) {
		if (html.indexOf('__error__') == 0) {
			setContent("user-edit", html.substring(9));
		} else	if (html.indexOf("__redirect__") == 0) {
			document.location.href = html.substring(13);
			return false; // don't enable form
 		} else {
			setContent("user-view", html);
			setUser();
		}
		enableForm(form, true);
	});
	enableForm(form, false);
	return false;
}

var lastMemberId = null;
function toggleMember(id, scrollTo) {
	if (lastMemberId && lastMemberId != id) {
		var prevId = lastMemberId;
		lastMemberId = null;
		toggleMember(prevId, false);
	}
	var link = document.getElementById(id + "-link");
	if (link != null) {
		var desc = document.getElementById(id + "-description");
		var posts = document.getElementById(id + "-posts");
		var v = getVisible(link, link.className.indexOf('-hidden') == -1);
		if (v) {
			lastMemberId = id;
			setContent(posts, '<div class="block-interact"><div class="block-padded">Loading posts...</div></div>');
			loadContent(classUrl + id + '/posts', posts.id);
		} else {
			lastMemberId = null;
		}
		setVisible(link, !v);
		setVisible(desc, v);
		setVisible(posts, v);
		if (!v) setContent(posts, '');
		if (scrollTo)
			setTimeout("scrollToMember('" + id + "');", 1);
		return false;
	}
	return true;
}

function scrollToElement(id) {
	var e = document.getElementById(id);
	if (e && e.scrollIntoView) {
		e.scrollIntoView();
		window.scrollBy(0, -8);
	} else {
		document.location.hash = id;
	}
}

function togglePackage(id, def) {
	var e = document.getElementById("package-" + id);
	if (e) {
		var v = getVisible(e, def);
		setVisible(e, !v);
		var img = document.images["arrow-" + id];
		if (img) img.src = "/static/img/arrow-" + (v ? "close" : "open") + ".gif";
	}
	return false;
}

function toggleThumbnail(id, over) {
	var e = document.getElementById(id);
	if (e) {
		if (!e.origSrc)
			e.origSrc = e.src;
		if (over && (over = document.getElementById(id + '_over'))) {
			e.src = over.src;
		} else {
			e.src = e.origSrc;
		}
	}
}

window.onload = function()  {
	var h = unescape(document.location.hash);
	if (h) scrollToElement(h.substring(1));
}

