//Function.prototype.partial = function(/* 0..n args */)
/*{
	var func=this;
	var args = Array.prototype.slice.call(arguments).splice(1);
	return function()
	{
		var allArguments = args.concat(Array.prototype.slice.call(arguments));
		return func.apply(this, allArguments);
	};
}
*/
Function.prototype.partial = function()
{
	var fn = this, args = Array.prototype.slice.call(arguments);
	return function()
	{
		var arg = 0;
		for(var i = 0; i < args.length && arg < arguments.length; i++)
		{
			if(args[i] === undefined)
			args[i] = arguments[arg++];
		}
		return fn.apply(this, args);
	};
}