  function validaData(field) {
  	alert('entrou');
  		if (field.value.length >= 9) {
			dia = parseInt(field.value.substring(0, 2));
			mes = parseInt(field.value.substring(3, 5));
			ano = parseInt(field.value.substring(6, 10));
			if ( dia > 31 || dia < 1 || mes > 12 || mes < 1 || ano < 190 || ano > 210){
				alert ("Data inválida");
			}
		}	
  }


function format(field, type, keypress) {

	this.perm = new Array();
	this._event = keypress.which ? keypress.which: keypress.keyCode;

	/*
	###########################################################################

	Detecta se o browser é Firefox para prevenir que teclas como Delete, Esc e
	Backspace sejam canceladas ao finalizar o evento "onkeypress"

	###########################################################################
	*/
	this.detectBrowser = function() {
		this.perm = new Array(
			27, /* Esc */
			35, /* End/Home */
			36,
			94,
			46, /* Del/Backspace */
			41,
			37, 38, 39, 40 /* Direções */
		);
		if (!keypress.preventDefault) {
			return true;
		} else {
			reg = new RegExp(" "+this._event+" ");
			if ((this._event >=0 && this._event <=30)  || reg.test(this.perm.join(" "))) {
				return false;
			} else {
				return true;
			}
		}
	}
	/*
	###########################################################################

	Formatação de CPF

	###########################################################################
	*/

	this.f_cpf = function (field) {

		var pattern = /([0-9\.\-])/
		var maxsize = 14

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				if (field.value.length == 3 ) {
					field.value = field.value;
					field.value = field.value + '.';
				}
				if (field.value.length == 7 ) {
					field.value = field.value;
					field.value = field.value + '.';
				}
				if (field.value.length == 11 ) {
					field.value = field.value;
					field.value = field.value + '-';
				}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
	    	}
		}

	}


	/*
	###########################################################################

	Formatação de CNPJ

	###########################################################################
	*/

	this.f_cnpj = function (field) {

		var pattern = /([0-9\.\-])/
		var maxsize = 18

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}
		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				    if (field.value.length == 2 ) {
						field.value = field.value;
						field.value = field.value + '.';
					}
					if (field.value.length == 6 ) {
						field.value = field.value;
						field.value = field.value + '.';
					}
					if (field.value.length == 10 ) {
						field.value = field.value;
						field.value = field.value + '/';
					}
					if (field.value.length == 15 ) {
						field.value = field.value;
						field.value = field.value + '-';
					}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
	    	}
		}

	}

	/*
	###########################################################################

	Formatação de números

	###########################################################################
	*/

	this.f_number = function (field) {

		var pattern = /([0-9])/
		var maxsize = null

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
			   //nenhuma formatação
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}

	}

	/*
	###########################################################################

	Formatação de CEP

	###########################################################################
	*/

	this.f_cep = function (field) {

		var pattern = /([0-9\-])/
		var maxsize = 9

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				if (field.value.length == 5 ) {
	   				field.value = field.value;
				    field.value = field.value + '-';
				}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}

	}

	/*
	###########################################################################

	Formatação de telefone

	###########################################################################
	*/

	this.f_fone = function (field) {

		var pattern = /([0-9])/
		var maxsize = 14

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				tecla = this._event
				vr = field.value;
				vr = vr.replace( "(", "" );
				vr = vr.replace( ")", "" );
				vr = vr.replace( " ", "" );
				vr = vr.replace( "-", "" );
				tam = vr.length;
				if (tam < maxsize && tecla != 8) {
					tam = vr.length + 1 ;
				}
				if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ) {
					if ( tam <= 4 ) {
				 		field.value = vr ;
					}
				 	if ( (tam > 4) && (tam <= 8) ) {
				 		field.value = vr.substr(0,tam-4) + '-' + vr.substr( tam - 4, tam ) ;
					}
				 	if ( (tam >= 9) && (tam <= 10) ) {
						field.value = '(' + vr.substr(0,2) + ') ' + vr.substr(2,tam-6) + '-' + vr.substr(tam-4,tam) ;
					}
				}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}

	}

	/*
	###########################################################################

	Formatação de datas

	###########################################################################
	*/

	this.f_data = function (field) {
		
		if(field.value.length == field.maxLength) {
			return false;
		}
		var pattern = /([0-9\/])/
		var maxsize = 10

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				if (field.value.length == 2 && this._event != 47) {
			 		field.value = field.value;
			 		field.value = field.value + '-';
				}
				if (field.value.length == 5 && this._event != 47 ) {
			 		field.value = field.value;
			 		field.value = field.value + '-';
				}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}
	}
	
	this.f_data2 = function (field) {
		
		if(field.value.length == field.maxLength) {
			return false;
		}
		var pattern = /([0-9\/])/
		var maxsize = 10

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				if (field.value.length == 2 && this._event != 47) {
			 		field.value = field.value;
			 		field.value = field.value + '/';
				}
				if (field.value.length == 5 && this._event != 47 ) {
			 		field.value = field.value;
			 		field.value = field.value + '/';
				}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}
	}


	/*
	###########################################################################

	Formatação de hora

	###########################################################################
	*/

	this.f_hora = function (field) {
		
		if(field.value.length == field.maxLength) {
			return false;
		}
		var pattern = /([0-9])/
		var maxsize = 8

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				if (field.value.length == 2 && this._event != 47) {
			 		field.value = field.value;
			 		field.value = field.value + ':';
				}
				if (field.value.length == 5 && this._event != 47 ) {
			 		field.value = field.value;
			 		field.value = field.value + ':';
				}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}
		
		if (field.value.length >= 7 && this._event != 47 ) {
			hora = parseInt(field.value.substring(0, 2));
			minuto = parseInt(field.value.substring(3, 5));
			segundo = parseInt(field.value.substring(6, 8));
			if ( hora > 23 || hora < 0 || minuto > 59 || minuto < 0 || segundo < 0 || segundo > 59){
				alert ("Hora inválida");
			}
		}

	}

	/*
	###########################################################################

	Formatação de hora2

	###########################################################################
	*/

	this.f_hora2 = function (field) {
		
		if(field.value.length == field.maxLength) {
			return false;
		}
		var pattern = /([0-9])/
		var maxsize = 8

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				if (field.value.length == 2 && this._event != 47) {
			 		field.value = field.value;
			 		field.value = field.value + ':';
				}
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}
		
		if (field.value.length >= 4 && this._event != 47 ) {
			hora = parseInt(field.value.substring(0, 2));
			minuto = parseInt(field.value.substring(3, 5));
			
			if ( hora > 23 || hora < 0 || minuto > 59 || minuto < 0){
				alert ("Hora inválida");
			}
		}

	}


	
	/*
	###########################################################################

	Formatação de valores monetários

	###########################################################################
	*/

	this.f_valor_monetario = function (field) {
		if(field.value.length == field.maxLength) {
			return false;
		}

		var pattern = /([0-9])/
		var maxsize = 18

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				 tecla = this._event
				 vr = field.value
				 vr = vr.replace("/", "");
				 vr = vr.replace("/", "");
				 vr = vr.replace(",", "");
				 vr = vr.replace(".", "");
				 vr = vr.replace(".", "");
				 vr = vr.replace(".", "");
				 vr = vr.replace(".", "");
				 tam = vr.length;
				 
				 if (tam < maxsize && tecla != 8)
				  tam = vr.length + 1;
				  
				 if (tecla == 8)
				  tam = tam - 1;
				   
				 if (tecla == 8 || tecla >=48 && tecla <= 57 || tecla >=96 && tecla <=105)
				 {
				  if (tam <= 2)
				   field.value = vr;
				   
				  if ((tam > 2) && (tam <= 5))
				   field.value = vr.substr(0, tam - 2) + ',' + vr.substr(tam - 2, tam); 
				   
				  if ((tam >= 6) && (tam <= 8))
				   field.value = vr.substr(0, tam - 5) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam); 
				   
				  if ((tam >= 9) && (tam <= 11))
				   field.value = vr.substr(0, tam - 8) + '.' + vr.substr(tam - 8, 3) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam); 
				  
				  if ((tam >= 12) && (tam <= 14))
				   field.value = vr.substr(0, tam - 11) + '.' + vr.substr(tam - 11, 3) + '.' + vr.substr(tam - 8, 3) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam); 
				   
				  if ((tam >= 15) && (tam <= 17))
				   field.value = vr.substr(0, tam - 14) + '.' + vr.substr(tam - 14, 3) + '.' + vr.substr(tam - 11, 3) + '.' + vr.substr(tam - 8, 3) + '.' + vr.substr(tam - 5, 3) + ',' + vr.substr(tam - 2, tam); 
				 }  
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}

	}

	/*
	###########################################################################

	Formatação de valores monetários 2

	###########################################################################
	*/

	this.f_valor_monetario2 = function (field) {
		
		if(field.value.length == field.maxLength) {
			return false;
		}
		
		var pattern = /([0-9])/
		var maxsize = 18

		str = String.fromCharCode(this._event)

		if (maxsize != null && !isNaN(maxsize) && this.detectBrowser()) {
			if (field.value.length >= maxsize){
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
			}
		}

		if (this.detectBrowser()) {
			if (pattern.test(str)) {
				 tecla = this._event
				 vr = field.value
				 vr = vr.replace("/", "");
				 vr = vr.replace("/", "");
				 vr = vr.replace(",", "");
				 vr = vr.replace(".", "");
				 vr = vr.replace(".", "");
				 vr = vr.replace(".", "");
				 vr = vr.replace(".", "");
				 tam = vr.length;
				 
				 if (tam < maxsize && tecla != 8)
				  tam = vr.length + 1;
				  
				 if (tecla == 8)
				  tam = tam - 1;
				   
				 if (tecla == 8 || tecla >=48 && tecla <= 57 || tecla >=96 && tecla <=105)
				 {
				  if (tam <= 2)
				   field.value = vr;
				   
				  if ((tam > 2) && (tam <= 5))
				   field.value = vr.substr(0, tam - 2) + '.' + vr.substr(tam - 2, tam); 
				   
				  if ((tam >= 6) && (tam <= 8))
				   field.value = vr.substr(0, tam - 5) + vr.substr(tam - 5, 3) + '.' + vr.substr(tam - 2, tam); 
				   
				  if ((tam >= 9) && (tam <= 11))
				   field.value = vr.substr(0, tam - 8) + vr.substr(tam - 8, 3) + vr.substr(tam - 5, 3) + '.' + vr.substr(tam - 2, tam); 
				  
				  if ((tam >= 12) && (tam <= 14))
				   field.value = vr.substr(0, tam - 11) + vr.substr(tam - 11, 3) + vr.substr(tam - 8, 3) + vr.substr(tam - 5, 3) + '.' + vr.substr(tam - 2, tam); 
				   
				  if ((tam >= 15) && (tam <= 17))
				   field.value = vr.substr(0, tam - 14) + vr.substr(tam - 14, 3) + vr.substr(tam - 11, 3) + vr.substr(tam - 8, 3) + vr.substr(tam - 5, 3) + '.' + vr.substr(tam - 2, tam); 
				 }  
			} else {
				keypress.preventDefault? keypress.preventDefault() : keypress.returnValue = false;
    		}
		}

	}


	switch (type) {
		case "cpf":
			this.f_cpf(field);
		break;

		case "cnpj":
			this.f_cnpj(field);
		break;

		case "number":
		case "numero":
			this.f_number(field);
		break;

		case "cep":
			this.f_cep(field);
		break;

		case "fone":
		case "telefone":
		case "tel":
			this.f_fone(field);
		break;

		case "data":
		case "date":
			this.f_data(field);
		break;
		
		case "data2":
		case "date2":
			this.f_data2(field);
		break;

		case "hour":
		case "hora":
		case "time":
			this.f_hora(field);
		break;
		
		case "hour2":
		case "hora2":
		case "time2":
			this.f_hora2(field);
		break;

		case "valor":
		case "dinheiro":
		case "moeda":
			this.f_valor_monetario(field);
		break;
		
		case "valor2":
		case "dinheiro2":
		case "moeda2":
			this.f_valor_monetario2(field);
		break;
		
		default:
			alert("Formatação de tipo '" + type +"' não existe!");
		break;
	}
}
