String.prototype.matchRegExp = function( oRegExp ) {
	var vTemp = this.match(oRegExp);
		
	if( vTemp )
		return (vTemp[0] == this);
	
	return false;
}

function somenteNumeros(oCampo, tamMaximo, event) {
	var tecla = recuperaTecla(event);
	var bSomenteNumeros = false;
	var sTemp = oCampo.value;
	var NUMEROS = "0123456789";
	var BACKSPACE = 8;
	var DELETE = 46;
	var i = 0;
	
	while(i<sTemp.length) {
		if(NUMEROS.indexOf(sTemp.charAt(i)) < 0)
			sTemp = sTemp.substr(0, i) + sTemp.substr(i+1, sTemp.length);
		else
			i++;
	}
	
	sTemp = removeZerosAEsquerda(sTemp);
	
	if(!tecla) {
		bSomenteNumeros = true;
	} else if(sTemp.length == tamMaximo && !teclasPadrao(tecla)) {
		bSomenteNumeros = false;
	} else if(teclasPadrao(tecla) || teclasNumericas(tecla)) {
		bSomenteNumeros = true;
	}
		
	return bSomenteNumeros;
}

function teclasPadrao(tecla) {
	var bPadrao = false;
	
	if (       (tecla == 8) // [BACKSPACE]
	      	|| (tecla == 9) // [TAB]
	      	|| (tecla == 16) // [SHIFT]
	      	|| (tecla == 46) // [DELETE]
	     	|| (tecla == 35) // [END]
	      	|| (tecla == 36) // [HOME]
	      	|| (tecla >= 37 && tecla <= 40) // [SETAS]
	) {
		bPadrao = true;
	}	
	
	return bPadrao;
}

function teclasNumericas(tecla) {
	var bNumerica = false;
	
	// [0] até [9]
	if( (tecla >= 48) && (tecla <= 57) )
		bNumerica = true;
	
	return bNumerica;
}

function recuperaTecla(event) {
	var tecla = null;
	
	// Internet Explorer
	if( document.all ) {
		if(event.keyCode)
			tecla = event.keyCode;
	}
	// Firefox
	else {
		if(event.which || event.keyCode) {
			if( parseInt( event.which, 10 ) != 0 )
				tecla = parseInt( event.which, 10 );
			else
				tecla = parseInt( event.keyCode, 10 );
		}
	}
	
	return tecla;
}

function zeros(iQuantidade) {
	var sTemp = '';
	
	while(sTemp.length < iQuantidade)
		sTemp += '0';
		
	return sTemp;
}

function removeZerosAEsquerda(sTemp) {
	while(sTemp.indexOf('0') == 0)
		sTemp = sTemp.substr(1, sTemp.length);

	return sTemp;
}

function validaNumero(oCampo) {
	var sTexto = oCampo.value;
	var oRE = new RegExp("[0-9]+");
	var bOk = (sTexto.length == 0) || sTexto.matchRegExp( oRE );
	
	return valida(oCampo, bOk);
}

function mascaraDiaMesAno(oCampo, evt) {
	var tamMaximo = 8;
	var posPriBarra = 2;
	var posSegBarra = 4;
  
	// Internet Explorer
	if(!evt)
		evt = window.event;
		
	var tecla = recuperaTecla(evt);
	
	if(teclasPadrao(tecla))
		return true;
	
	var sTemp = oCampo.value.replace('/','');
	
	while( sTemp.indexOf('/') != -1 )
		sTemp = sTemp.replace('/','');
	
	if( sTemp.length >= posSegBarra ) {
		sTemp = sTemp.substr(0, posPriBarra) + '/' + 
			sTemp.substr(posPriBarra, posSegBarra - posPriBarra) + '/' + 
			sTemp.substr(posSegBarra, sTemp.length - posSegBarra);
	} else if( sTemp.length >= posPriBarra ) {
		sTemp = sTemp.substr(0, posPriBarra) + '/' + 
			sTemp.substr(posPriBarra, sTemp.length - posPriBarra);
	}

	oCampo.value = sTemp;
	
	return true;
}

function validaDiaMesAno(oCampo) {
	var tamMaximo = 10;
	var posPriBarra = 2;
	var posSegBarra = 4;

	var sTexto = oCampo.value;
	
	var sRegExp = "[0-9]{" + (posPriBarra) + "}\/[0-9]{" + (posSegBarra - posPriBarra) + "}\/[0-9]{" + ((tamMaximo - 2) - posSegBarra) + "}";
	var oRE = new RegExp(sRegExp);
	
	if( sTexto.length == 0 )
		return true;
		
	if( sTexto.length < 10 ){
		return valida(oCampo, false);
	}
		
	
	if(!sTexto.matchRegExp( oRE ))
		return false;
		
	var vTemp = sTexto.split('/');
	var j=0;
	
	var oDate = new Date(vTemp[0] + '/' + vTemp[1] + '/' + vTemp[2]);
	
	var bOk = ( (parseInt(oDate.getDate(),10) == parseInt(vTemp[1],10) ) &&
	    ((parseInt(oDate.getMonth(),10)+1) == parseInt(vTemp[0],10) ) &&
	    (parseInt(oDate.getFullYear(),10) == parseInt(vTemp[2],10) ) );
	    
	return valida(oCampo, bOk);
}

function mascaraMesAno(oCampo, evt) {
	var tamMaximo = 6;
	var posPriBarra = 4;
  
	// Internet Explorer
	if(!evt)
		evt = window.event;
		
	var tecla = recuperaTecla(evt);
	
	if(teclasPadrao(tecla))
		return true;
	
	var sTemp = oCampo.value.replace('/','');
	
	while( sTemp.indexOf('/') != -1 )
		sTemp = sTemp.replace('/','');
	
	if( sTemp.length >= posPriBarra ) {
		sTemp = sTemp.substr(0, posPriBarra) + '/' + 
			sTemp.substr(posPriBarra, sTemp.length - posPriBarra);
	}

	oCampo.value = sTemp;
	
	return true;
}

function mascaraMesAno(oCampo, evt) {
	var tamMaximo = 6;
	var posPriBarra = 4;
  
	// Internet Explorer
	if(!evt)
		evt = window.event;
		
	var tecla = recuperaTecla(evt);
	
	if(teclasPadrao(tecla))
		return true;
	
	var sTemp = oCampo.value.replace('/','');
	
	while( sTemp.indexOf('/') != -1 )
		sTemp = sTemp.replace('/','');
	
	if( sTemp.length >= posPriBarra ) {
		sTemp = sTemp.substr(0, posPriBarra) + '/' + 
			sTemp.substr(posPriBarra, sTemp.length - posPriBarra);
	}

	oCampo.value = sTemp;
	
	return true;
}


function validaMesAno(oCampo) {
	var tamMaximo = 7;
	var posPriBarra = 4;
	var sTexto = oCampo.value;
	
	var sRegExp = "[0-9]{" + (posPriBarra) + "}\/[0-9]{" + ((tamMaximo - 1) - posPriBarra) + "}";
	var oRE = new RegExp(sRegExp);
	if( sTexto.length == 0 )
		return true;
	if( sTexto.length != 7 )
		return valida(oCampo, false);
	
	if(!sTexto.matchRegExp( oRE ))
		return false;

	var vTemp = sTexto.split('/');
	var j=0;
	
	var oDate = new Date(vTemp[1] + '/01/' + vTemp[0]);
	//alert('oDate == ' + oDate);
	var bOk = ( ((parseInt(oDate.getMonth(),10)+1) == parseInt(vTemp[1],10) ) &&
	    (parseInt(oDate.getFullYear(),10) == parseInt(vTemp[0],10) ) );
	    
	return valida(oCampo, bOk);
}

function mascaraDecimal(oCampo, event) {
	var tamMinimo = 3;
	var tamMinimoMilhar = 4;
	
	var NUMEROS = "0123456789";
	
	var i = 0;
	var sTemp = oCampo.value;
	var sTempFinal = '';
	
	// Internet Explorer
	if(!event)
		event = window.event;
		
	var tecla = recuperaTecla(event);
	
	if(teclasPadrao(tecla))
		return true;
				
	i=0;
	while(i<sTemp.length) {
		if(NUMEROS.indexOf(sTemp.charAt(i)) < 0)
			sTemp = sTemp.substr(0, i) + sTemp.substr(i+1, sTemp.length);
		else
			i++;
	}
	
	sTemp = removeZerosAEsquerda(sTemp);
	
	if( sTemp.length < tamMinimo )
		sTemp = zeros(tamMinimo - sTemp.length) + sTemp;

	if( sTemp.length >= tamMinimo ) {
		sTempFinal = ',' + sTemp.substr(sTemp.length - 2, sTemp.length) + sTempFinal;
		sTemp = sTemp.substr(0, sTemp.length - 2);
	}
	
	while( sTemp.length >= tamMinimoMilhar ) {
		sTempFinal = '.' + sTemp.substr(sTemp.length - 3, sTemp.length) + sTempFinal;
		sTemp = sTemp.substr(0, sTemp.length - 3);
	}

	oCampo.value = sTemp + sTempFinal;
	
	return true;
}

function mascaraDecimalSemVirgula(oCampo, event) {
	var tamMinimo = 3;
	var tamMinimoMilhar = 4;
	
	var NUMEROS = "0123456789";
	
	var i = 0;
	var sTemp = oCampo.value;
	var sTempFinal = '';
	
	// Internet Explorer
	if(!event)
		event = window.event;
		
	var tecla = recuperaTecla(event);
	
	if(teclasPadrao(tecla))
		return true;
				
	i=0;
	while(i<sTemp.length) {
		if(NUMEROS.indexOf(sTemp.charAt(i)) < 0)
			sTemp = sTemp.substr(0, i) + sTemp.substr(i+1, sTemp.length);
		else
			i++;
	}
	
	sTemp = removeZerosAEsquerda(sTemp);
	
	if( sTemp.length < tamMinimo )
		sTemp = zeros(tamMinimo - sTemp.length) + sTemp;

	if( sTemp.length >= tamMinimo ) {
		sTempFinal = '.' + sTemp.substr(sTemp.length - 2, sTemp.length) + sTempFinal;
		sTemp = sTemp.substr(0, sTemp.length - 2);
	}

	oCampo.value = sTemp + sTempFinal;
	
	return true;
}

//Máscara para campo somente de caracteres
function mascaraCaracter(campo){
	campo = campo.replace(/[^a-z\sÀ-úü']/ig,"");  //Remove o que não for letra nem vogal acentuada nem espaço
	
	return campo;
}										

function fnFim(campo){
	var aaa = campo.value;
	campo.value = "";
	campo.value = aaa;
}

function validaDecimal(oCampo) {
	var tamMaximo = 7;
	var posPriBarra = 2;

	var sTexto = oCampo.value;
	
	var sRegExp = "[0-9]{" + (posPriBarra) + "}\/[0-9]{" + ((tamMaximo - 1) - posPriBarra) + "}";
	var oRE = new RegExp(sRegExp);
	
	if(sTexto.length == 0)
		return true;
	
	if(!sTexto.matchRegExp( oRE ))
		return false;
		
	var vTemp = sTexto.split('/');
	var j=0;
	
	var oDate = new Date(vTemp[0] + '/01/' + vTemp[1]);
	
	var bOk = ( ((parseInt(oDate.getMonth(),10)+1) == parseInt(vTemp[0],10) ) &&
	    (parseInt(oDate.getFullYear(),10) == parseInt(vTemp[1],10) ) );
	    
	return valida(oCampo, bOk);
}

function valida(oCampo, bOk) {			
	if(!bOk) {
		alert('Invalid format.');
		oCampo.value = '';
		if(oCampo.focus)
			oCampo.focus();
		if(oCampo.select)
			oCampo.select();
	}
		
	return bOk;
}

function limiteCampo(oCampo, iLimite, event) {
	var bControle = true;
	var tecla = recuperaTecla(event);
	if(teclasPadrao(tecla))
		return true;
	
	if(oCampo.value.length >= iLimite) {
		oCampo.value = oCampo.value.substring(0, iLimite);
		bControle = false;
	}
	
	return bControle;
}


function validaIMO(oCampo) {
	var tamMaximo = 7;
	var sTexto = oCampo.value;
	
	var sRegExp = "[0-9]{7}";
	var oRE = new RegExp(sRegExp);
	if( sTexto.length == 0 )
		return true;
	if( sTexto.length != 7 )
		return valida(oCampo, false);
	
	if(!sTexto.matchRegExp( oRE ))
		return false;
		
	if(sTexto == "0000000")
		return false;	

	var bOk = true;
	return valida(oCampo, bOk);
}


function mascara(campoDesejado, funcaoMascara){
  		campo = campoDesejado;
  		funcao = funcaoMascara;
  		setTimeout("execmascara()",1);
}

function execmascara(){
  		campo.value = funcao(campo.value);
}

//Máscara para compo CNPJ
function mascaraCNPJ(campo){
	campo = campo.replace(/\D/gi,"");                           //Remove tudo o que não é dígito
	campo = campo.replace(/^(\d{2})(\d)/,"$1.$2");             //Coloca ponto entre o segundo e o terceiro dígitos
	campo = campo.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3"); //Coloca ponto entre o quinto e o sexto dígitos
	campo = campo.replace(/\.(\d{3})(\d)/,".$1/$2");           //Coloca uma barra entre o oitavo e o nono dígitos
	campo = campo.replace(/(\d{4})(\d)/,"$1-$2");              //Coloca um hífen depois do bloco de quatro dígitos

	return campo;
}	

//Máscara para campo CEP
function mascaraCEP(campo){
	campo = campo.replace(/\D/gi,"");                //Remove tudo o que não é dígito
	campo = campo.replace(/^(\d{5})(\d)/,"$1-$2"); 	//Esse é tão fácil que não merece explicações

	return campo;
}

//Máscara para campo telefone		
function mascaraTelefone(campo){
	campo = campo.replace(/\D/g,"");                 	//Remove tudo o que não é dígito
	campo = campo.replace(/^(\d\d)(\d)/g,"($1) $2"); 	//Coloca parênteses em volta dos dois primeiros dígitos
	campo = campo.replace(/(\d{4})(\d)/,"$1-$2");    	//Coloca hífen entre o quarto e o quinto dígitos
	
	return campo;
}		

//Máscara para campo somente decimal
function mascaraDecimal(campo){
	campo = campo.replace(/\D/g,"");                 	//Remove tudo o que não é dígito
	campo = campo.replace(/(\d)(\d{2})$/,"$1.$2");             //Coloca ponto entre o segundo e o terceiro dígitos		
	return campo;
}	

