text: if (!Array.prototype.forEach)
  {
  	Array.prototype.forEach = function(fun /*, thisArg */)
  	{
  		'use strict';
  
  		if (this === void 0 || this === null) {
  			throw new TypeError();
  		}
  
  		var t = Object(this);
  		var len = t.length >>> 0;
  		if (typeof fun !== "function") {
  			throw new TypeError();
  		}
  
  		var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
  		for (var i = 0; i < len; i++) {
  			if (i in t) {
  				fun.call(thisArg, t[i], i, t);
  			}
  		}
  	};
  }
  
  if (!Array.prototype.map)
  {
    Array.prototype.map = function(fun /*, thisArg */)
    {
      "use strict";
  
      if (this === void 0 || this === null)
        throw new TypeError();
  
      var t = Object(this);
      var len = t.length >>> 0;
      if (typeof fun !== "function")
        throw new TypeError();
  
      var res = new Array(len);
      var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
      for (var i = 0; i < len; i++)
      {
        // NOTE: Absolute correctness would demand Object.defineProperty
        //       be used.  But this method is fairly new, and failure is
        //       possible only if Object.prototype or Array.prototype
        //       has a property |i| (very unlikely), so use a less-correct
        //       but more portable alternative.
        if (i in t)
          res[i] = fun.call(thisArg, t[i], i, t);
      }
  
      return res;
    };
  }