Counting a button press during led fade cycle

So I am making an rgb lamp. So far it’'s working to my liking

In the first 6 cases the led will be solid unless a I double press the button, then it fades just that color, and to get out of that fade, it takes another double press, which will take it back to the solid color at the end of that current fade cycle

But on case 7, I do a full rainbow fade, and I can’t figure out how to check menuCount in between fade cycles. I’ve played around with different code and the close i got was to count after the full rainbow cycle. I would rather have it change at either the end of the fadeIn or fadeOut function.

here are the main snippets of code that are giving me a hard time, but you can find the full code right underneath it.

 case 7: // Rainbow Fade
    fadeIn(gPin,rPin,bPin);//red yellow
    fadeOut(rPin,gPin,bPin);//yellow green
    fadeIn(bPin,gPin,rPin);//green cyan
    fadeOut(gPin,bPin,rPin);//cyan blue
    fadeIn(rPin,bPin,gPin);// blue magenta
    fadeOut(bPin,rPin,gPin);//magenta red
    break;

//function to fade up led
void fadeIn(int fadePin, int onPin, int offPin) {
  float in, out;
  analogWrite(onPin, 255);//turn on solid color
  analogWrite(offPin, 0);//turn off unused color
  // for loop to fade up fadePin using sine function
  for(in=4.712;in<7.845;in=in+halfStep) {
    out = sin(in) * 127.5 + 127.5;
    analogWrite(fadePin,out);
    delayMicroseconds(1000);
  }
}

void fadeOut(int fadePin, int onPin, int offPin) {
  float in, out;
  analogWrite(onPin, 255);
  analogWrite(offPin, 0);
  for(in=1.570;in<4.721;in=in+halfStep){
    out = sin(in) *127.5 + 127.5;
    analogWrite(fadePin, out);
    delayMicroseconds(1000);
  }
}

I am using this button libraryhttp://code.google.com/p/clickbutton/wiki/Usageto read one press and two presses.

here is my code in full, as of now, when you get to case 7, it runs one rainbow cycle and stops. I deleted the code that would change after a full rainbow cycle.

#include <ClickButton.h>

//the button
const int buttonPin = 8;
ClickButton b1(buttonPin,LOW, CLICKBTN_PULLUP);
//leds
const int rPin = 9;
const int gPin = 10;
const int bPin = 6;
// variables
volatile int menuCount = 0;
int fadeCount;
float halfStep = 0.002094333;
float fullStep = 0.002094333;
int hold = 5000;

void setup() {
  for (int i = 9; i < 11 ; i ++) pinMode(i,OUTPUT);
  b1.multiclickTime = 200;
}

void loop() {
  b1.Update();
  if(b1.clicks == 1) menuCount++ ;
  if(b1.clicks == 2) fadeCount = true;
  if(menuCount > 9) menuCount = 0;

  switch(menuCount) {
  case 0: // white
    setColor(128, 127, 128);
    break;
  case 1: // Red
    setColor(255, 0, 0);
    if(fadeCount == true) fade(rPin, 0);
    break;  
  case 2: // Yellow
    setColor(255, 255, 0);
    if(fadeCount == true) fade(rPin, gPin);
    break;
  case 3: // Green
    setColor(0, 255, 0);
    if(fadeCount == true) fade(gPin, 0);
    break;
  case 4: // Cyan
    setColor(0, 255, 255);
    if(fadeCount == true) fade(gPin, bPin);
    break ;
  case 5: // Blue
    setColor(0, 0, 255);
    if(fadeCount == true) fade(bPin, 0);
    break;
  case 6: // Magenta
    setColor(255, 0, 255);
    if(fadeCount == true) fade(bPin, rPin);
    break;
  case 7: // Rainbow Fade
    fadeIn(gPin,rPin,bPin);//red yellow
    fadeOut(rPin,gPin,bPin);//yellow green
    fadeIn(bPin,gPin,rPin);//green cyan
    fadeOut(gPin,bPin,rPin);//cyan blue
    fadeIn(rPin,bPin,gPin);// blue magenta
    fadeOut(bPin,rPin,gPin);//magenta red
    break; 
  case 8: // Random
    break;
  case 9: // black
    setColor(0,0,0);
    break;
  } 

}

void setColor(int r, int g, int b) {
  analogWrite(rPin, r);
  analogWrite(gPin, g);
  analogWrite(bPin, b);
}

//fucntion to fade sold colors
void fade(int pin1, int pin2) {
  float in, out;
  for(in=0; in<6.283; in=in+fullStep){
    out = cos(in) * 127.5 +127.5;
    analogWrite(pin1, out);
    analogWrite(pin2, out);
    delayMicroseconds(1000);
    b1.Update();
    if(b1.clicks == 2) fadeCount = false;
  }
}
//function to fade up led
void fadeIn(int fadePin, int onPin, int offPin) {
  float in, out;
  analogWrite(onPin, 255);//turn on solid color
  analogWrite(offPin, 0);//turn off unused color
  // for loop to fade up fadePin using sine function
  for(in=4.712;in<7.845;in=in+halfStep) {
    out = sin(in) * 127.5 + 127.5;
    analogWrite(fadePin,out);
    delayMicroseconds(1000);
  }
}

void fadeOut(int fadePin, int onPin, int offPin) {
  float in, out;
  analogWrite(onPin, 255);
  analogWrite(offPin, 0);
  for(in=1.570;in<4.721;in=in+halfStep){
    out = sin(in) *127.5 + 127.5;
    analogWrite(fadePin, out);
    delayMicroseconds(1000);
  }
}

Get rid of the delay()s. See the 'blink without delay' example.