function functional($){ return { /** * Test: * fn.format("Hello %s", "world") == "Hello world" */ format: function(){ var i=1; var fmtStr = arguments[0]; var args = arguments; return fmtStr.replace(/%s/g,function(){return args[i++];}) }, addStylesheet: function(url){ /*From: http://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS*/ var headID = document.getElementsByTagName("head")[0]; var cssNode = document.createElement('link'); cssNode.type = 'text/css'; cssNode.rel = 'stylesheet'; cssNode.href = url; cssNode.media = 'screen'; headID.appendChild(cssNode); }, id: function(v){ return v; }, map: function(fn, list){ var out = []; $.each(list, function(i, v){ out[out.length]=fn(v); }); return out; }, field: function(name){ return function(object){ return object[name]; } }, zip: function(){ var out = []; var lengths = map(field('length'), arguments); var min = reduceR(function(a,b){return aarguments.length){ nparams = arguments.length; } var args = []; for(var i=0;i