Optimising repetitive code

Section 2:

void loop()
{
  colorWipe(Color(0,0,0), 50);

  //If [1] pressed on remote, pause clock,
  //retrieve Yahoo weather RSS, parse for 
  //weather code, play audio sample, run lights
  if (irrecv.decode(&results)) {
    if(results.value == 0xFF30CF)
    {
      connectAndRead(); //connect to the server and read the output
      
      //track000 - track014 are used for clock chimes
      byte trackNum = atoi(wCode) + 15;
      itoa(trackNum, wCode, 10);            

      trackName[6] = wCode[0];
      trackName[7] = wCode[1];
      MP3player.playMP3(trackName);
      
      //Large, extremely gimpy selection routine for selecting
      //LED routine based on weather code. Weather code table at:
      //http://developer.yahoo.com/weather/#codes
      if((trackNum-15 < 5) ||
         ((trackNum-15 > 36) && (trackNum-15 < 40)))
      {
        stormLights; 
      }
      else if((trackNum-15 == 5) ||
             (trackNum-15 == 6) ||
             ((trackNum-15 > 7) && (trackNum-15 < 13)) ||
             (trackNum-15 == 17) ||
             (trackNum-15 == 35) ||
             (trackNum-15 == 40) ||
             (trackNum-15 == 45) ||
             (trackNum-15 == 47))
      {
        rainLights();         
      }
      else if((trackNum-15 == 7) ||
              ((trackNum-15 > 12) && (trackNum-15 < 17)) ||
              (trackNum-15 == 18) ||
              (trackNum-15 == 25) ||
              ((trackNum-15 > 40) && (trackNum-15 < 44)) ||              
              (trackNum-15 == 46))
      {
        snowLights();
      }
      else if((trackNum-15 == 19) ||
              (trackNum-15 == 21) ||
              (trackNum-15 == 22) ||
              (trackNum-15 == 32) ||
              (trackNum-15 == 34) ||
              (trackNum-15 == 36))
      {
        sunLights();
      }        
      else if((trackNum-15 == 20) ||
              (trackNum-15 == 23) ||
              (trackNum-15 == 24) ||
              ((trackNum-15 > 25) && (trackNum-15 < 31)) ||
              (trackNum-15 == 44))
      {
        cloudLights();
      }
      else
      {
        nightLights();
      }  

      //Reset LEDs, wait 3 secs before next possible
      //weather request
      colorWipe(Color(0,0,0), 50);
      delay(3000);
    }
    irrecv.resume();
  }

  else
  {
    //Clock stuff
    
    //check if MP3player is already playing back
    result = MP3player.isPlaying();
    
    //if not playing
    if(result == 0)
    { 
      //Get time from RN-XV
      strTime = wifly.getTime(buf,sizeof(buf)); 

      Serial.println(strTime);

      currentMinute[0] = strTime[3];
      currentMinute[1] = strTime[4];
      currentMinute[2] = '\0';
      
      //figure out what hour it is, translate
      //24 hour clock value to one of 12 MP3 track names
      if((currentMinute[0] == '0') && (currentMinute[1] == '0'))
      {
        if((currentMinute[0] != lastPlayed[0]) || (currentMinute[1] != lastPlayed[1]))
        {
          currentHour[0] = strTime[0];
          currentHour[1] = strTime[1];
          currentHour[2] = '\0';

          if(atoi(currentHour) < 12)
          {
            trackName[6] = currentHour[0];
            trackName[7] = currentHour[1]; 
          }
          else if((atoi(currentHour) >= 12) && (atoi(currentHour) <20))
          {
            trackName[6] = currentHour[0] - 1;
            trackName[7] = currentHour[1] - 2; 
          }
          else if((atoi(currentHour) >= 20) && (atoi(currentHour) <22))
          {
            trackName[6] = currentHour[0] - 2;
            trackName[7] = currentHour[1] + 8; 
          }
          else if((atoi(currentHour) >= 21) && (atoi(currentHour) <24))
          {
            trackName[6] = currentHour[0] - 1;
            trackName[7] = currentHour[1] - 2; 
          }

          lastPlayed[0] = currentMinute[0];
          lastPlayed[1] = currentMinute[1];
          
          MP3player.playMP3(trackName);
          //TODO: Implement hour chimes/LED routine
          threeQuarterHourLights();
        }
      }
      //Quarter hour chime
      else if((currentMinute[0] == '1') && (currentMinute[1] == '5'))
      {
        if((currentMinute[0] != lastPlayed[0]) || (currentMinute[1] != lastPlayed[1]))
        {
          lastPlayed[0] = currentMinute[0];
          lastPlayed[1] = currentMinute[1];

          trackName[6] = '1';
          trackName[7] = '3';

          MP3player.playMP3(trackName);
          quarterLights();
        }
      }
      //Half hour chime
      else if((currentMinute[0] == '3') && (currentMinute[1] == '0'))
      {
        if((currentMinute[0] != lastPlayed[0]) || (currentMinute[1] != lastPlayed[1]))
        {
          lastPlayed[0] = currentMinute[0];
          lastPlayed[1] = currentMinute[1];

          trackName[6] = '1';
          trackName[7] = '2';

          MP3player.playMP3(trackName);
          halfLights();
        }
      }
      //Three quarter hour chime
      else if((currentMinute[0] == '4') && (currentMinute[1] == '5'))
      {
        if((currentMinute[0] != lastPlayed[0]) || (currentMinute[1] != lastPlayed[1]))
        {
          lastPlayed[0] = currentMinute[0];
          lastPlayed[1] = currentMinute[1];

          trackName[6] = '1';
          trackName[7] = '4';

          MP3player.playMP3(trackName);
          threeQuarterLights();
        }
      }
    } 
    //Wait 1 sec between clock updates
    delay(1000);
  }
}