var Delegate = {
	create : function(target, method) {
		var t = target;
		var m = method;
		var args = [];
		for (var i = 2; i < arguments.length; i++) {
			args.push(arguments[i]);
		}
		return function() {
			var arr = [].concat(args);
			for (var i = 0; i < arguments.length; i++) {
				arr.push(arguments[i]);
			}
			var el = document.getElementById(t) || t;
			try {
				switch (typeof(m)) {
					case 'string':
						return (el[m] || eval(m)).apply(el, arr);
					case 'function':
						return m.apply(el, arr);
					default:
						alert('WARNING: Delegate.create unexpected method type: '+typeof(m));
				}
			} catch (error) {
				alert('ERROR in '+t+'.'+m+' => '+(error.description || error));
			}
			return null;
		};
	}
	
};

$delegate = function() {
	return Delegate.create.apply(Delegate, arguments);
};