Mascara porcento

alguem poderia me ajudar a fazer uma mascara com script em q um campo soh aceite numero e em porcentual?
por exemplo valores do tipo 65.9%, 30%, 47.55% e assim por diante em um input text
como valor padrao ficaria 0.0% e a medida q o usuario digitasse iria alterando
entenderam?!
valews!!!

se possivel mantenha o autor…ok…

[]'s

/** 
 *
 * GIULLIANO MORRONI
 * Mascara para ser usada em campos com formato de moeda.
 * Suporta até 99.999.999.999,99
 *
 * Ja possui bloqueio de caracteres que não sejam numeros. 
 */

	var posicaoMilhar;
	var code;
	
	function mascaraMoeda(obj,event){
		
		if (!event)	var event = window.event
		
		if (event.keyCode){
			code = event.keyCode;
		}else if (event.which) {
			code = event.which;
		}
		
		/*Aceita apenas numeros de 0-9*/
		if(code > 57 || code < 48){
			return false; 
		}
		
		var valor = obj.value;
		valor = valor.replace(',','');
		valor = valor.replace(',','');
		valor = valor.replace(',','');
		valor = valor.replace(',','');
		valor = valor.replace(',','');
		
		valor = valor.replace('.','');
		valor = valor.replace('.','');
		valor = valor.replace('.','');
		valor = valor.replace('.','');
		valor = valor.replace('.','');
		
		var primeiraCasa = valor.substring(0,1);
		var segundaCasa = valor.substring(1,2);
	
	
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		/* Dezena 0,01 */
		if(valor.length == 0){
			obj.value = '0,0'+valor;
		}
		
		/* Dezena 0,11 */
		if(valor.length == 3 && segundaCasa == 0){
			obj.value = '0,'+valor.substring(2,3);
		}
			
		/* Dezena 1,11 */
		if(valor.length == 3  && segundaCasa > 0){
			obj.value = valor.substring(1,2)+','+valor.substring(2,3);
		}		
	
		/* Dezena 11,11 */ 
		if(valor.length == 3&& primeiraCasa > 0){
			obj.value = valor.substring(0,2) +','+ valor.substring(2,4);
		}
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		
		
		
		
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		/* Centena 111,11 */ 
		if(valor.length == 4){
			obj.value = valor.substring(0,3) +','+ valor.substring(3,4);
			posicaoMilhar = 1;
		}			
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
	
	
	
	
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		/* Mil 11.111,11 */ 
		if(valor.length == 6 && posicaoMilhar == 2){
			obj.value = valor.substring(0,2) +'.'+valor.substring(2,5)+','+valor.substring(5,7);
		}		
		
		/* Mil 1.111,11 */ 
		if(valor.length == 5 && posicaoMilhar == 1){
			obj.value = valor.substring(0,1) +'.'+valor.substring(1,4)+','+valor.substring(4,5);
			posicaoMilhar = 2;
		}	
			
		/* Mil 111.111,11 */ 
		if(valor.length == 7){
			obj.value = valor.substring(0,3) +'.'+valor.substring(3,6)+','+valor.substring(6,8);
			posicaoMilhar = 3;
		}			
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
	
	
	
	
	
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		/* Milhao 111.111.111,11 */ 
		if(valor.length == 10 && posicaoMilhar == 5){
			obj.value = valor.substring(0,3) +'.'+valor.substring(3,6) +'.'+valor.substring(6,9)+','+valor.substring(9,11);
		}
		
		/* Milhao 11.111.111,11 */ 
		if(valor.length == 9 && posicaoMilhar == 4){
			obj.value = valor.substring(0,2) +'.'+valor.substring(2,5)+'.'+valor.substring(5,8)+','+valor.substring(8,11);
			posicaoMilhar = 5;
		}
		
		/* Milhao 1.111.111,11 */ 
		if(valor.length == 8 && posicaoMilhar == 3){
			obj.value = valor.substring(0,1) +'.'+valor.substring(1,4) +'.'+valor.substring(4,7)+','+valor.substring(7,9);
			posicaoMilhar = 4;
		}
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		
		
		
		
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		/* Bilhao 1.111.111.111,11 */ 
		if(valor.length == 11){
			obj.value = valor.substring(0,1)+'.'+valor.substring(1,4)+'.'+valor.substring(4,7)+'.'+valor.substring(7,10)+','+valor.substring(10,13);
		}
	
		/* Bilhao 11.111.111.111,11 */ 
		if(valor.length == 12){
			obj.value = valor.substring(0,2)+'.'+valor.substring(2,5)+'.'+valor.substring(5,8)+'.'+valor.substring(8,11)+','+valor.substring(11,12);
		}
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
	
	
	
		
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		/* Não da suporte a trilhão */
		if(valor.length > 12){
			obj.value = valor.substring(0,2)+'.'+valor.substring(2,5)+'.'+valor.substring(5,8)+'.'+valor.substring(8,11)+','+valor.substring(11,12);
		}
		/*#############################################################################################################################################*/
		/*#############################################################################################################################################*/
		
		return true;
				
	}

falews
vou testar

esqueci de mencionar o evento…

onkeypress(“return mascaraMoeda(this,event);”)