calibration question- reset values then calibrate?

I am looking for a way to calibrate a light sensor. In the tutorials I found this example (below). The problem is that the sensorMax and sensorMin values are held constant at the extremes and can only go up or down.
My question is how is it possible to reset the values to 0, 1023 and start the calibration fresh when the calibrate button is held on the 2nd, 3rd, or 4th button push?

For an example, the first time I push the calibrate button, I get a min of 500 and a max of 900.
Now it gets darker, so I need to re-calibrate for the new max/ min.
I push the calibrate button and the new (theoretical) readings should be min 300, max 700.
With this code, the min gets adjusted from 500 to 300. But the max stays at 900 instead of setting to 700.
Is there a way to start the calibration with min 0, max 1023 each time I push the calibrate button? Something along the lines of a setup() function in the calibration() function is what I would like to have.
Thanks!

/*
  Conditionals - while statement
 
 This example demonstrates the use of  while() statements.
 
 While the pushbutton is pressed, the sketch runs the calibration routine.
 The  sensor readings during the while loop define the minimum and maximum 
 of expected values from the photo resistor.
 
 This is a variation on the calibrate example.
 
 The circuit:
 * photo resistor connected from +5V to analog in pin 0
 * 10K resistor connected from ground to analog in pin 0
 * LED connected from digital pin 9 to ground through 220 ohm resistor
 * pushbutton attached from pin 2 to +5V
 * 10K resistor attached from pin 2 to ground
 
 created 17 Jan 2009
 modified 30 Aug 2011
 by Tom Igoe
 
 This example code is in the public domain.

 http://arduino.cc/en/Tutorial/WhileLoop
 
 */


// These constants won't change:
const int sensorPin = A2;       // pin that the sensor is attached to
const int ledPin = 9;           // pin that the LED is attached to
const int indicatorLedPin = 13; // pin that the built-in LED is attached to
const int buttonPin = 2;        // pin that the button is attached to


// These variables will change:
int sensorMin = 1023;  // minimum sensor value
int sensorMax = 0;     // maximum sensor value
int sensorValue = 0;         // the sensor value


void setup() {
  // set the LED pins as outputs and the switch pin as input:
  pinMode(indicatorLedPin, OUTPUT);
  pinMode (ledPin, OUTPUT);
  pinMode (buttonPin, INPUT);
}

void loop() {
  // while the button is pressed, take calibration readings:
  while (digitalRead(buttonPin) == HIGH) {
    calibrate(); 
  }
  // signal the end of the calibration period
  digitalWrite(indicatorLedPin, LOW);  

  // read the sensor:
  sensorValue = analogRead(sensorPin);

  // apply the calibration to the sensor reading
  sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

  // in case the sensor value is outside the range seen during calibration
  sensorValue = constrain(sensorValue, 0, 255);

  // fade the LED using the calibrated value:
  analogWrite(ledPin, sensorValue);
}

void calibrate() {
  // turn on the indicator LED to indicate that calibration is happening:
  digitalWrite(indicatorLedPin, HIGH);
  // read the sensor:
  sensorValue = analogRead(sensorPin);

  // record the maximum sensor value
  if (sensorValue > sensorMax) {
    sensorMax = sensorValue;
  }

  // record the minimum sensor value
  if (sensorValue < sensorMin) {
    sensorMin = sensorValue;
  }
}

But the max stays at 900 instead of setting to 700.

Because 900 is greater than 700.

In the calibrate() function, you must reset the sensorMin and sensorMax values regardless of what they were before. So, add a new funtion - readForCalibration() - that does what calibrate() does now. Call that function from calibrate(), after setting sensorMin to 1023 and setting sensorMax to 0.

Thanks, your answer didnt work, but what you said made sense. The answer seems to be to have another while loop in the calibrate() function.
In short:

calibrate() {
turn on the indicator LED to indicate that calibration is happening
sensorMin = 1023; // minimum sensor value
sensorMax = 0; // maximum sensor value
while (digitalRead(buttonPin) == HIGH {
//rest of calibration code

This has the effect of resetting the min/max once, then continuing the while loop until buttonPin != HIGH. Once the button is released, the whole calibrate loop ends.
It works! Thanks again!