RESOLVIDO-Alterar máscara em campo textfield de acordo com a quantidade de caracteres digitados

Boa tarde,

Gostaria de saber se existe alguma maneira de verificar em tempo real a quantidade de caracteres e baseado nisso alterar a máscara de um textfield. Possuo um campo que aceita tanto CPF quanto CNPJ, então gostaria que, de alguma forma, conseguisse fazer essa validação enquanto o usuário preenche o form.

Existe alguma maneira de fazer isso? Os plugins de maskedinputs que conheço do jQuery não possuem nada semelhante, então aceito sugestões.

Obrigado.

Pelo q entendi é html? Faz por javaScript, é só chamar o código abaixo qdo o usuário sair do textField:

function maskCpfCnpj(v){
	v=v.replace(/\D/g,"");                           //Remove tudo o que não é dígito

	if (v != "" && validarCpfCnpj(v)) {
		if (v.length == 11) {
			v=v.replace(/(\d{3})(\d)/,"$1.$2");       //Coloca um ponto entre o terceiro e o quarto dígitos
			v=v.replace(/(\d{3})(\d)/,"$1.$2");       //Coloca um ponto entre o terceiro e o quarto dígitos
			//de novo (para o segundo bloco de números)
			v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2"); //Coloca um hífen entre o terceiro e o quarto dígitos
		} else if (v.length == 14) {
			v=v.replace(/^(\d{2})(\d)/,"$1.$2");             //Coloca ponto entre o segundo e o terceiro dígitos
			v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3"); //Coloca ponto entre o quinto e o sexto dígitos
			v=v.replace(/\.(\d{3})(\d)/,".$1/$2");           //Coloca uma barra entre o oitavo e o nono dígitos
			v=v.replace(/(\d{4})(\d)/,"$1-$2");              //Coloca um hífen depois do bloco de quatro dígitos
		}

		return v;
	} else {
		return "";
	}
}

Aproveitando o post, tenho outros códigos muito bons para máscara em javascript, vou postar abaixo.
Encontrei esses códigos na internet há um tempo atrás e nem agradeci o camarada q postou, se por acaso vc ler esse post, parabéns e valeu!

// Aqui vc coloca a função e o valor que deseja a máscara, ex: onkeypress="mascara(nomeDoTextField, soNumeros)"
function mascara(o,f){
	v_obj=o;
	v_fun=f;
	setTimeout("execmascara()",1);
}

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

function soNumeros(v){
	return v.replace(/\D/g,"");
}

function telefone(v){
	if (v.length > 14) v = v.substring(0, 14);

	v=v.replace(/\D/g,"");                //Remove tudo o que não é dígito
	v=v.replace(/^(\d\d)(\d)/g,"($1) $2"); //Coloca parênteses em volta dos dois primeiros dígitos
	v=v.replace(/(\d{4})(\d)/,"$1-$2");    //Coloca hífem entre o quarto e o quinto dígitos
	return v;
}

function cep(v){
	if (v.length > 10) v = v.substring(0, 10);

	v=v.replace(/\D/g,"");                //Remove tudo o que n�o � d�gito
	v=v.replace(/^(\d{2})(\d)/,"$1.$2");		// Coloca ponto entre o segundo e o terceiro d�gitos
	v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2-$3");
	return v;
}

function site(v){
	v=v.replace(/^http:\/\/?/,"");
	dominio=v;
	caminho="";
	if(v.indexOf("/")>-1)
		dominio=v.split("/")[0];
	caminho=v.replace(/[^\/]*/,"");
	dominio=dominio.replace(/[^\w\.\+-:@]/g,"");
	caminho=caminho.replace(/[^\w\d\+-@:\?&=%\(\)\.]/g,"");
	caminho=caminho.replace(/([\?&])=/,"$1");
	if(caminho!="")dominio=dominio.replace(/\.+$/,"");
	v="http://"+dominio+caminho;
	return v;
}

Poutz valeu! Adaptei aqui pro meu caso e deu certinho!

Blz, não esquece d marcar o tópico como [RESOLVIDO].