Máscara de teléfono Javascript para campo de texto con expresiones regulares

Estoy usando esta función para llamar por teléfono a la máscara y funciona casi perfectamente.

function mask(o, f) 
{ 
    v_obj = o; 
    v_fun = f; 
    setTimeout("execmask()", 1) 
};

function execmask() 
{ 
    v_obj.value = v_fun(v_obj.value) 
};

function mphone(v){
    v=v.replace(/\D/g,"");           
    v=v.substring(0, 11);
    v=v.replace(/^(\d{2})(\d)/g,"(OXX$1) $2"); 
    v=v.replace(/(\d)(\d{4})$/,"$1-$2"); 
    return v;
}

Aquí corro la máscara en el campo de texto:

<input type="text" id="phone" name="phone" onkeypress="mask(this, mphone);" onblur="mask(this, mphone);" />

El problema es que necesito cambiar esta parte del código(OXX $ 1) para(0XX $ 1).

Situación actual con 9 dígitos:(OXX99) 99999-9999.

Situación actual con 8 dígitos:(OXX99) 9999-9999.

El formato correcto que necesito con 9 dígitos:(0XX99) 99999-9999

El formato correcto que necesito con 8 dígitos:(0XX99) 99999-9999

La cantidad de 8 o 9 dígitos es la elección del usuario.

Si cambio el carácter 'O' por '0', se produce un error en la máscara.

¡Por favor ayuda!

Respuestas a la pregunta(2)

Su respuesta a la pregunta