docs: function(array, callback, caller) {
          var selected = [];
          if (Array.prototype.filter) {
              selected = array.filter(callback, caller);
          } else {
              var len = array.length;
              if (typeof callback != "function") {
                  throw new TypeError();
              }
              for(var i=0; i<len; i++) {
                  if (i in array) {
                      var val = array[i];
                      if (callback.call(caller, val, i, array)) {
                          selected.push(val);
                      }
                  }
              }        
          }
          return selected;
      }