/* delegate */
function delegate (this_object, method) {
	//console.log("delegate" + [this_object, method] + ")");
	
	return function () { return method.apply(this_object, arguments); }
}

function delegateWithArgs (this_object, method, args, join_args) {
	//console.log("delegateWithArgs(" + [this_object, method, args, join_args] + ")");
	
	return function () {
		if (join_args) {
			var joined_args = new Array();
			var i;
			var length = arguments.length;
			for (i = 0; i < length; i++) {
				joined_args.push(arguments[i]);
			}
			joined_args = joined_args.concat(args);
			return method.apply(this_object, joined_args);
		}
		else {
			return method.apply(this_object, args);
		}
	}
}

