/*
	Copyright (c) 2004-2006, The Dojo Foundation
	All Rights Reserved.

	Licensed under the Academic Free License version 2.1 or above OR the
	modified BSD license. For more information on Dojo licensing, see:

		http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("memtext.widget.TreeLoadingControllerSx");
dojo.require("dojo.widget.TreeLoadingControllerV3");
dojo.require("dojo.widget.TreeBasicControllerV3");
dojo.require("dojo.event.*");
dojo.require("dojo.json");
dojo.require("dojo.io.*");
dojo.require("dojo.Deferred");
dojo.require("dojo.DeferredList");
dojo.declare("dojo.Error", Error, function (message, extra) {
	this.message = message;
	this.extra = extra;
	this.stack = (new Error()).stack;
});
dojo.declare("dojo.CommunicationError", dojo.Error, function () {
	this.name = "CommunicationError";
});
dojo.declare("dojo.LockedError", dojo.Error, function () {
	this.name = "LockedError";
});
dojo.declare("dojo.FormatError", dojo.Error, function () {
	this.name = "FormatError";
});
dojo.declare("dojo.RpcError", dojo.Error, function () {
	this.name = "RpcError";
});
//Aenderung: RpcActionParam
dojo.widget.defineWidget("memtext.widget.TreeLoadingControllerSx", dojo.widget.TreeLoadingControllerV3, 
	{RpcUrl:"", RpcActionParam:"",
		setRpcActionParam:function(param)
		{
			this.RpcActionParam=param;
			dojo.debug("param5:"+param);
		}

, loadRemote:function (node, sync) {
	var _this = this;
	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
	//MB Aenderung node.objectId
	var deferred = this.runRpc({url:this.getRpcUrl(node.objectId), sync:sync, params:params});
	// wird nur bei Erfolg aufgerufen
	deferred.addCallback(function (res) {
		return _this.loadProcessResponse(node, res);
	});
	return deferred;
}
// Method: post!
, runRpc:function (kw) {
	var _this = this;
	var deferred = new dojo.Deferred();
	//text/json-comment-filtered -> in deferredBindHandler eingebaut
	dojo.io.bind({url:kw.url, method:"get",handle:this.getDeferredBindHandler(deferred), mimetype:"text/plain", preventCache:this.preventCache, sync:kw.sync, content:{data:dojo.json.serialize(kw.params)}});
	return deferred;
}, // json-comment-filtered!!
getDeferredBindHandler:function (deferred) {
	return dojo.lang.hitch(this, function (type, obj) {
		if (obj) obj=obj.substring(obj.indexOf("\/\*")+2, obj.lastIndexOf("\*\/"));
		obj=eval(obj);
		var error = this.checkValidRpcResponse.apply(this, arguments);
		if (error) {
			deferred.errback(error);
			return;
		}
		deferred.callback(obj);
	});
}
//extra
});