  /**
   *  Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0).
   *  
   *  var res = source.take(5);
   *  var res = source.take(0, Rx.Scheduler.timeout);
   * @param {Number} count The number of elements to return.
   * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case <paramref name="count count</paramref> is set to 0.
   * @returns {Observable} An observable sequence that contains the specified number of elements from the start of the input sequence.  
   */
  observableProto.take = function (count, scheduler) {
      if (count < 0) { throw new RangeError(argumentOutOfRange); }
      if (count === 0) { return observableEmpty(scheduler); }
      var observable = this;
      return new AnonymousObservable(function (observer) {
        var remaining = count;
        return observable.subscribe(function (x) {
          if (remaining-- > 0) {
            observer.onNext(x);
            remaining === 0 && observer.onCompleted();
          }
        }, observer.onError.bind(observer), observer.onCompleted.bind(observer));
      });
  };
