Need to clear data from LED strip that uses WS2812

I put together something for Halloween using 150 LED strip that uses the WS2812 chip.
Using IR as control to select 3 different display patterns and works well — sort of.
When I first select, the strip works great! However selecting either of the other 2, the LED pattern of the previous pattern is still there and only after the newly selected pattern completes it’s own circuit does the old pattern clear out.
Is there a way to clear the data from the WS2812 chips so when I choose any 1 of the 3, that only the one chosen is there and not the ghost of the previous one?

Open to all comments and or suggestions…

#include "IRremote.h"
#include <Adafruit_NeoPixel.h>
#define PIN 6

Adafruit_NeoPixel strip = Adafruit_NeoPixel(150, PIN, NEO_GRB + NEO_KHZ800);

int r =0;
int x = 0;
int d = 2;
int b = 0;  
int pos = 0, dir = 1;
int j = 0;
int m = 0;
int direction=1;
int receiver = 3;

IRrecv irrecv(receiver);      
decode_results results;         

void setup()  
{
  Serial.begin(9600);
  irrecv.enableIRIn();
  Serial.println("IR Receiver Raw Data + Button Decode Test");
}

void loop()  
{
  if (irrecv.decode(&results)) 
  {
    irrecv.resume();
  } 
  switch(results.value)
  {
  case 0xFF30CF: 
    Serial.println(" 1              ");
    break;
  case 0xFF18E7: 
    Serial.println(" 2              ");
    Serial.println("Phase_1");
    Phase_1();
    break;
  case 0xFF7A85: 
    Serial.println("Phase_2");
    Phase_2();
    break;
  case 0xFF10EF: 
    Serial.println(" 4              ");
    Serial.println("Phase_3");
    Phase_3();
    break;
  case 0xFF38C7: 
    Serial.println(" 5              ");
    break;
  case 0xFF5AA5: 
    Serial.println(" 6              ");
    break;
  case 0xFF42BD: 
    Serial.println(" 7              ");
    break;
  case 0xFF4AB5: 
    Serial.println(" 8              ");
    break;
  case 0xFF52AD: 
    Serial.println(" 9              ");
    break;
  default:
    Serial.println(" other button   ");
  }
  delay(200);
}



void Phase_1()
{ 
  b = 75;  
  strip.setBrightness(200);
  strip.begin();
  strip.show(); 
  for (int z = 74, y = 75; z<x, y>r; z++, y--)
  {  
    strip.setPixelColor(z, 50, 14, 2);  
    strip.setPixelColor(y, 50, 14, 2);  
    strip.show();
    delay(20);
    strip.setPixelColor(b, 30, 5, 0); 
    strip.setPixelColor(z, 0, 0, 0);
    strip.setPixelColor(y, 0, 0, 0);
    b++;
    strip.show();
  }
  strip.setPixelColor(r, 30, 5, 0);  
  strip.setPixelColor(x, 30, 5, 0);  
  strip.show();
  x--;
  r++;
  if (x<74)
  {
    x=75;
  }
  if (r>75)
  {
    r=0;
  }
  delay(10);
}


void Phase_2()
{
  strip.begin();
  strip.show();
  strip.setBrightness(200); 
  strip.setPixelColor(pos - 5, 13, 2, 0); 
  strip.setPixelColor(pos - 4, 13, 2, 0); 
  strip.setPixelColor(pos - 3, 13, 2, 0); 
  strip.setPixelColor(pos - 2, 110, 22, 5); 
  strip.setPixelColor(pos - 1, 110, 22, 5); 
  strip.setPixelColor(pos    , 110, 22, 5); 
  strip.setPixelColor(pos + 1, 110, 22, 5); 
  strip.setPixelColor(pos + 2, 110, 22, 5); 
  strip.setPixelColor(pos + 3, 13, 2, 0); 
  strip.setPixelColor(pos + 4, 13, 2, 0); 
  strip.setPixelColor(pos + 5, 13, 2, 0); 
  strip.show();
  delay(1);
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0); 
  pos += dir;
  if(pos < 0)
  {
    pos = 1;
    dir = -dir;
  } 
  else if(pos >= strip.numPixels())
  {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}



void Phase_3()
{
  int TOTAL_LEDS = 150;
  float MaximumBrightness = 200;
  float SpeedFactor = 0.12; 
  float StepDelay = 7; 
  for (int m = 0; m < 100; m++)
  {
    float intensity = MaximumBrightness /2.0 * (1.0 + sin(SpeedFactor * m));
    strip.setBrightness(intensity);
    for (int ledNumber=0; ledNumber<TOTAL_LEDS; ledNumber++)
    {
      strip.setPixelColor(ledNumber, 50, 14, 2);
    }
    strip.show();
    delay(StepDelay);
  }
}
  for (int ledNumber=0; ledNumber<TOTAL_LEDS; ledNumber++)
  {
    strip.setPixelColor(ledNumber, 0,0,0);
  }
  strip.show();

... thanks for answering quickly, will try this and let you know the results

Well ... almost fixes the ghosting. The function Phase_1 lights the LEDS beginning in the middle and sends one each in both directions and the ends continue to add up until the strip is completely lite and then it starts over. Phase_2 is like the larson-scanner-shades where it's 9 LEDS with the center being 5 also being the brightness and as it travels left to right and reverses it leaves the LEDS behind it on at a lower level of brightness. Phase_3 lights everything at the same time -- it dims down low and fades back up to full brightness.

The fix for the ghost effect does well for removing the ghost from Phase_3 but it also removes the ends of Phase_1 and Phase_2.

Thank you for giving it a try...

Where did you paste fungus' code, exactly?

Try pasting it at the end of Phase_3(), before the final "}".

Paul