;(function($) {

function sendToggleAction(url,nodeId,open,content,child,container) {
	if (!open) {
		action="close";
	} else if (content) {
		action="opencontent";
	} else {
		action="open";
	}
	var data={
		nodeId: nodeId,
		action: action
	};
	$.post(url,data,function(response) {
		if (response.content) {
			var content=$(response.content).replaceAll(child);
			$(container).treeview({add: content});
		}
	},"json");
}

function sendClickAction(url,nodeId) {
	var data={
		nodeId: nodeId,
		action: "selected"
	};
	$.post(url,data,function(response) {
		if (response.url) {
			if (response.url.substring(0,11)=="javascript:") {
				eval(response.url.substring(11));
			} else {
				location.href=response.url;
			}
		}
	},"json");
}

var proxied = $.fn.treeview;
$.fn.treeview = function(settings) {
	if (!settings.url) {
		return proxied.apply(this, arguments);
	}
	var container = this;
	var userToggle = settings.toggle;
	var userClickHandler = settings.clickHandler;
	return proxied.call(this, $.extend({}, settings, {
		collapsed: true,
		toggle: function() {
			var $this = $(this);
			var content=false;
			var open=false;
			if ($this.hasClass("children")) {
				var childList = $this.removeClass("children").find("ul");
				childList.empty();
				content=true;
			}
			if ($this.hasClass("collapsable")) {
				open=true;
			}
			sendToggleAction(settings.url, this.id, open, content, childList, container);
			if (userToggle) {
				userToggle.apply(this, arguments);
			}
		},
		clickHandler: function(nodeId) {
			if (userClickHandler) {
				userClickHandler(nodeId);
			} else {
				sendClickAction(settings.url, nodeId);
			}
		}
	}));
};

})(jQuery);
