On the outbound rules page, you would name the rule with whatever you like so that you can uniquely identify the rule in question. Then you would use the rule starting "with prefix" and input the number that you want people to manually add to the dial string so that when dialed, that call will use this rule. So, say 9 in this case. Then down in the route section you would indicate (in the pull down box) which route/trunk this call will use and then you would also indicate strip "1" digit so that the "9" you manually entered in earlier to direct the call to this route would be removed and not sent to the carrier as a part of your normal LD call dial string. On the otherhand, you could also set up a rule for each Canadian/Intl country code or area code such that upon dialing 1418 for example it will route to the MJ. The problem here is that I do know how many area codes that might entail and there is a limitation as to the number of rules you can have.
The problem is that the GS is programmed as one trunk in your case. All calls are sent to it and it finds the available port (either MJ or Comcast) and sends the call out. The gateway can be programmed (I think) to have more than one trunk in 3CX, but I think there will be some issues between how you want it and how reality will dictate its use -
Assume for the second that the GS is programmed to have the separate ports rather than being one common trunk and that the MJ can be reached by dialing 9 and Comcast by dialing 8 (or whatever numbers you want).
1. Calls to Canada/Intl are to use 9 and go out the MJ port, but what will happen if more than one call to Canada/Intl is desired at the same time? 3CX will indicate that no trunks are available if the port is already in usel. Will your folks have the dedication/discipline to resist using the Comcast line? Conceivably you could set up rules that take into account the country code and/or Canadian ACodes, but this may not be practical as you may need more rules than what the system can support and then if a new country comes into play that is not already rule based, the call would not go to MJ until such time as you created it. Presumably, it would go to Comcast unless you also have rules that preclude calls of this type. The Canada dial string is like that of the US, but you could set a rule such that calls of more than 11 digits or or start with 011 (international based) must go to MJ.
2. Whatever port (MJ or Comcast) is used to complete the call, my assumption is that there will be an outbound caller-id associated with the call. You customer will see this number and very likely will use it to return calls thereby tying up your MJ line if Canada/Intl. Of course, you could tell those customers to call a different number but the reality is that they likely have the caller-id in a log or stored and will use it despite what you might ask them to do.
Forcing an inbound call to use a given port is not possible unless you have call forwarding in place on the carrier of interest. Your caller is placing the call to a number. That number is associated to a carrier who in turn routes it to you via your number. Assuming that the carrier supports call forwarding, you could (AT&T example) input on the phone connected to the carrier you want to have implement the call forwarding 72#xxxxxxxxx where the x represents the number you want the call forwarded to. Keep in mind that the number you want it forwarded to may also represent a long distance call as well. To stop the forwarding, you dial 73#. You will not be able to do this from inside or while using 3CX, but will have to accomplish this with an analog phone connected directly to the line on which you want to have forwarded.
If you are set on the method, then what I would do is get a couple of FXO single port gateways, look at the HT503 as it will support FXO and FXS (an incomming phone line as well as an analog phone connection) and program them as separate trunks. On the MJ trunk you can set the trunk up so that only outbound calls are acceptable. You can edit this in the Port/Trunk status tab within 3CX by double clicking the trunk number so that you can edit the port. Make sure that you can have MJ not send any caller-id info otherwise people who get the caller-id and attempt to use it to return a call wil be out of luck. The call will not be accepted by 3CX. On that same trunk, program the outbound so that all dial strings preceded with a 9 are directed to it. You now have it that all calls preceded with a 9 will go to MJ, that MJ will not accept any calls, but you will/must tell people what non-MJ number they must use. This is all predicated on the notion that the MJ line can be precluded from sending any caller-id info. I do not have MJ so am not knowledgeable as to its capabilities. It could be that the caller-id is programmable and you can set it to the number you want. While you can program the caller-id to some extent in 3CX, the carrier may not accept it and instead assert the actual caller-id associated to the device.
The other HT is programmed to allow both inbound and outbound and to use 8 in its rule so that local or non-intl calls are directed to it instead.
You can do the 4104 into separate trunks, but the HT method is easier to program, if one fails only one line is affected, etc.
Have you looked into SIP trunk providers? I saw in an earlier post where you asked and some of the input you received (in my opinion) was not in line with my experience. This would be oh so much easier. Take a look at http://www.nexvortex.com. They may have a plan and cost structure that fits your needs as it is not a line based fee, but rather a minute plan that is packaged. You can make as many calls as your 3CX licence allows and your internet bandwidth will support. They support international as well and while I suspect that they will not be a MJ price beater, the MJ appears to be more of a consumer item than meant for business. You might also look into Skpe. There are other quality providers as well (and yes, some that might not be), but I would not lump them all as being inferior. I only reference nexvortex based upon how you have expressed your desired usage.
Yes, the 3CX softphone does indicate Vmail. There is a small envelope just above the line keys and there is another indicator just below the transfer button. I do not know what version you of 3CX you have, but it could be that if you are using the free, that this is not supported. It is supported in the paid; I just tested it.