Your elseif statements aren't lining up with corresponding if statements.

I've given your code a bit of a rewrite..let me know what you think
Code:
alias away.off {
  if (%away = on) {
    set %away off
    echo 5 -a Away is off.
    set %chan 1
    set %cnum $chan(0)      
    while (%chan <= %cnum) {
      notice $chan(%chan) $me is back.    
      inc %chan      
    }    
  }      
  else {
    echo 5 -a away is already off.
  }
}  
alias away.on {
  if (%away = off) {
    set %away on
    echo 5 -a Away is on.
    set %chan 1
    set %cnum $chan(0)      
    while (%chan <= %cnum) {
      notice $chan(%chan) $me is away.    
      inc %chan      
    }      
  }      
  else {
    echo 5 -a away is already on.   
  }
}    
on *:Connect: { 
  .timeraway 0 10 away.idle 
}
alias away.idle {
  if (($idle >= 600) && (%away != on)) {
    away.on
  }
}
menu channel {
  auto away 
  .auto back  
  ..on {
    echo 5 -a auto back is $iif($group(#autoback) != off,already) on
    $iif($group(#autoback) == off,.enable #autoback)
  }
  ..off {
    echo 5 -a auto back is $iif($group(#autoback) != on,already) off
    $iif($group(#autoback) == on,.disable #autoback)
  }
  .on { 
    away.on
  }
  .off {
    away.off
  }
}
on *:text:*:?:{
  if (%away == on) {
    msg $nick I'm currently away from the keyboard
    closemsg $nick 
  }
}

#autoback on
on *:input:#:{
  if (%away = on) { 
    away.off
  }
}
#autoback end