In your first code, the if statement is irrelevant, since you specify the channel in the ON JOIN event. Aside from that, I see nothing wrong with that section of the code, however, here's the re-write
Code:
on !*:join:#mychannel:{
  notice $nick Welcome to $chan $+ .  I'm the channels bot. For our latest deals type !deals. To get me to idle in your channel type !idle #yourchannel
} 


Regarding #2, you just need to specify the full channel name in the ON TEXT event, rather than using # (which will match whatever channel the bot is on). You already specify the specific channel in the ON JOIN event (reference question #1)

A recommendation for an altered code reads as follows
Code:
on *:text:!idle*:#mychan:{
  if !$2 { .msg $nick You have to specify a channel }
  elseif $2 ischan { .msg $nick I'm already in $2 }
  else {
    set %chan $2
    join $2
  }
}
on me:*:join:%chan:{
  msg $chan,#mychan I'm now idling in $chan
} 


Regarding query #3, try this instead
Code:
 on *:TEXT:!broadcast *:#:{
  if ($nick isop $chan) {
    amsg $+(<,$nick,>) $2- <#mychan>
  }
}