Problem in using IRremote.h Library

Hi,
I am using iRremote.h library.
I want to receive ir signal and based on ir signal I have used switch to diect it to three different cases. In one of the case I am using switch again after receiving the signal. Second time when I am using the switch statement I have used the if statement
if (irrecv.decode(&results)).
It seems that the problem is not reading this statement. I think the problem is in using the statement
irrecv.resume();
I have tried it to place it in various places but nothing seems to work.
Could you please see my code and tell me where the problem is
My code is as follows

#include <Wire.h>
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();

}
void loop()
{
if (irrecv.decode(&results)){ // have we received an IR signal?
Serial.println(results.value, HEX);
switch(results.value)
{
case 0x7:
Serial.println("q");
break;
case 0x8:
Serial.println("w");
break;
case 0x9:
Serial.println("e");
unsigned long sec;
unsigned long B;
B=millis();
sec=millis()-B;
while(sec < 120000){
if (irrecv.decode(&results)){ // have we received an IR signal?
Serial.println(results.value, HEX);
switch(results.value){
case 0x21:
Serial.println("A");
break;
case 0x20:
Serial.println("B");
break;
case 0x11:
Serial.println("c");
break;
case 0x10:
Serial.println("d");
break;
}
irrecv.resume();
}
sec=millis()-B;
Serial.println(sec);
}
Serial.println("done");

break;
}
irrecv.resume();
}

}

if (irrecv.decode(&results)){ // have we received an IR signal?
    Serial.println(results.value, HEX);
    switch(results.value)
    {
    case 0x7:
      Serial.println("q");
      break;
    case 0x8:
      Serial.println("w");
      break;
   case 0x9:
      Serial.println("e");
      unsigned long sec;
      unsigned long B;
      B=millis();
      sec=millis()-B;
      while(sec < 120000){
        if  (irrecv.decode(&results)){ // have we received an IR signal?

Once the IR receiver has completed receiving an IR signal, decode() returns true AND the receiver is turned off. You never turn it back on (that's what resume() does). So, of course you'll never receive another signal.