Optimising repetitive code

(Last) Section 4:

//LED STUFF
unsigned int Color(byte r, byte g, byte b)
{
  return( ((unsigned int)g & 0x1F )<<10 | ((unsigned int)b & 0x1F)<<5 | (unsigned int)r & 0x1F);
}

void colorWipe(uint16_t c, uint8_t wait) {
  int i;
  for (i=0; i < strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void quarterLights()
{
  delay(2000);
  colorWipe(Color(63,0,0),50); 
  delay(400);
  colorWipe(Color(0,0,63),50);
  delay(400);
  colorWipe(Color(0,63,0),50);
  delay(350);
  colorWipe(Color(63,0,0),50); 
  delay(2000);
}

void halfLights()
{  
  delay(2200);
  colorWipe(Color(63,0,0),50); 
  delay(300);
  colorWipe(Color(0,63,0),50);
  delay(300);
  colorWipe(Color(0,0,63),50);
  delay(200);
  colorWipe(Color(63,0,0),50); 
  delay(700);
  colorWipe(Color(0,63,0),50); 
  delay(300);
  colorWipe(Color(0,0,63),50); 
  delay(200);
  colorWipe(Color(63,0,0),50);  
  delay(200);
  colorWipe(Color(0,63,0),50); 
  delay(1800);
}

int interval = 1000;
unsigned int pColors[] = {Color(63,0,0),Color(0,63,0),Color(0,0,63)};

void threeQuarterLights()
{ 
  int delays[] = {2200,300,300,200,700,300,200,200,700,300,200,100,700};
  unsigned int pColors[] = {Color(63,0,0),Color(0,63,0),Color(0,0,63)};
  byte loopCount = 0;
  
  for(byte i=0;i<13;i++)
  {
     delay(delays[i]);
     colorWipe(pColors[loopCount],50);
     if(loopCount<2)
       loopCount++;
     else
       loopCount=0;
  }
}

/* TODO - Find enough sketch space to fit this in, implement
/* hour chimes properly
void hourLights(byte b)
{
  //threeQuarterLights();
  
  int delays[] = {2200,300,300,200,700,300,200,200,700,300,200,100,700};
  unsigned int pColors[] = {Color(63,0,0),Color(0,63,0),Color(0,0,63)};
  byte loopCount = 0;
  
  for(byte i=0;i<13;i++)
  {
     delay(delays[i]);
     colorWipe(pColors[loopCount],50);
     
     if(loopCount<2)
       loopCount++;
     else
       loopCount=0;
  }
  /*
  delay(2200);
  colorWipe(Color(63,0,0),50); 
  delay(300);
  colorWipe(Color(0,63,0),50);
  delay(300);
  colorWipe(Color(0,0,63),50);
  delay(200);
  colorWipe(Color(63,0,0),50); 
  delay(700);
  colorWipe(Color(0,63,0),50); 
  delay(300);
  colorWipe(Color(0,0,63),50); 
  delay(200);
  colorWipe(Color(63,0,0),50);  
  delay(200);
  colorWipe(Color(0,63,0),50); 
  delay(700);
  colorWipe(Color(0,0,63),50); 
  delay(300);
  colorWipe(Color(63,0,0),50);
  delay(200);
  colorWipe(Color(0,63,0),50);
  delay(100);
  colorWipe(Color(0,0,63),50); 
  delay(700);
  
  for(byte j=0;j<b;j++)
  {     
     colorWipe(Color(0,0,63),50);
     delay(300);
  }
}
*/

void rainLights()
{
  for(byte j=0;j<10;j++)
  {
    for(byte i=0;i<10;i++)
    {
      strip.setPixelColor(i, Color(random(17,25),63,20));
      strip.show();
      delay(50);
    }
  }
}

void sunLights()
{
  for(byte j=0;j<10;j++)
  {
    for(byte i=0;i<10;i++)
    {
      strip.setPixelColor(i, Color(random(58,63),0,random(55,63)));
      strip.show();
      delay(50);
    }
  }
}

void snowLights()
{
  for(byte j=0;j<10;j++)
  {
    for(byte i=0;i<10;i++)
    {
      strip.setPixelColor(i, Color(random(60,63),59,random(60,63)));
      strip.show();
      delay(50);
    }
  }
}

void stormLights()
{
  for(byte j=0;j<10;j++)
  {
    for(byte i=0;i<10;i++)
    {
      strip.setPixelColor(i, Color(random(50,55),random(50,55),10));
      strip.show();
      delay(50);
      strip.setPixelColor(i+2, Color(random(50,55),random(50,55),10));
      strip.show();
      delay(50);
      strip.setPixelColor(i, Color(63,63,63));
    }
  }
}

void cloudLights()
{
  for(byte j=0;j<10;j++)
  {
    for(byte i=0;i<10;i++)
    {
      strip.setPixelColor(i, Color(random(10,15),random(10,15),10));
      strip.show();
      delay(50);
    }
  }
}

void nightLights()
{
  for(byte j=0;j<10;j++)
  {
    for(byte i=0;i<10;i++)
    {
      strip.setPixelColor(i, Color(random(45,50),random(45,50),0));
      strip.show();
      delay(50);
    }
  } 
}