// map is supported in JS 1.6 and up, but I want to use it now
// @see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }

    return res;
  };
}

Array.prototype.max =  Array.prototype.max || function() {
    var m;
    for (var i=0,l=this.length;i<l;i++) {
        if (i in this && (!m || this[i] > m))
            m = this[i];
    }
    return m;
}

