javascript:window.history.forward(1);
/*
evento chamado onerror que é muito útil para 
descobrir se houve erros na execução de um código JavaScript

função chamada tratamentoDeErrorDeExecucao como gerenciador de eventos para o evento onerror. 
Assim, sempre que um erro ocorrer na página, esta função será chamada. 

*/
window.onerror = tratamentoDeErrorDeExecucao;


// função responsável pela apresentação do erro de javascripts na execução sem tratamento de erro
//
function tratamentoDeErrorDeExecucao(msg, url, line) {
	var erro = "Houve um erro de execu\xe7\xe3o. \n" + "Mensagem de erro: " + msg + "\n" + "URL da p\xe1gina: " + url + "\n" + "Linha de c\xf3digo: " + line;
	window.alert(erro);
}

// função responsável pela apresentação do erro de javascripts na tela para usuário
//
function tratamentoDeError(err, nomeDaFuncao) {
	var strMsg = nomeDaFuncao + "\n" + "\n";
	for (key in err) {
		if (key == "message") {
			strMsg = strMsg + key + " : " + err[key] + "\n";
		}
	}
	alert(" ------ ERRO DE JAVASCRIPTS ------ \n" + strMsg);
}


//1


//critica h
function valor(campo, texto) {
	try{
	
		if ((campo.value != "") && (campo != null)) {
		    if (campo.value <=0) {
				if (texto!=null)
					alert(texto);
				campo.focus();
				return false; 
			}
		}
		return true;
	}catch (err) {
		tratamentoDeError(err, "tamanho(campo, comprimento, texto)");
	}	
}



//critica 
function tamanho(campo, comprimento,texto) {
	try{
	//alert("teste");
	if ((campo.value != "") && (campo != null)) {
			//alert(campo.value);
			  if (campo.value.length > 0 && campo.value.length < comprimento) {
				 if (texto!=null)
					 alert(texto);
			     campo.focus();
			    	
			        return false;
			     
			  }else{
			 	if (parseInt(campo.value) <=0 || parseInt(campo.value) < 1960 ) {
					if (texto!=null)
						alert("Informe ano v\xe1lido!");
					campo.focus();
					return false; 
				}
			}
			return true;
		}
	}catch (err) {
		tratamentoDeError(err, "funcao tamanho(campo, comprimento,texto)");
	}	
}

//3


function somenteNumero(obj,event) {
	try{
	
		var str = obj.value;
	    var Tecla = event.which;
	 //   alert(str);
	    if(Tecla == null)
	        Tecla = event.keyCode;
		
	    //se nao for número 
	    //alert(Tecla);
	    if ( Tecla == 8  || Tecla == 13 || (Tecla > 47 && Tecla < 58)) {
	        event.returnValue = true;
	    }
		else {
			event.returnValue = false;
			//alert("Só devem ser digitados números!")
			//obj.value = '';
	      	return false;
		}
	}catch (err) {
		tratamentoDeError(err, "funcao somenteNumero(obj,event)");
	}	
    return true;
}

// ******************************** FormataDataNova()  **************
//
// função utilizada parar formatar um campo como "99/99/9999"
// Campo : nome do tag HTML
//   *(parâmetro retirado)  tamanho : tamanho da mascara. Ex: 99/99/9999	--> tamanho 7
// teclapres : variavel (event)
// Wanderley 

function FormataData(obj, event) {
	var str = obj.value;
	var Tecla = event.which;
	hoje = new Date;
	if (Tecla == null) {
		Tecla = event.keyCode;
	}
	
    //se nao for número nem parentesis ou espaçoss
	//alert(Tecla);
	if (Tecla == 8 || Tecla == 46 || (Tecla > 47 && Tecla < 58)) {
		event.returnValue = true;
	} else {
		event.returnValue = false;
		//alert("Só devem ser digitados números!")
		return false;
	}
	str = str.replace("/", "");
	str = str.replace("/", "");
	tam = str.length + 1;
	
	//Formata Data e Valida(dia)
	if (tam > 2 && tam < 4) {
		obj.value = str.substr(0, 2) + "/" + str.substr(2, tam);
	}
	//Formata Data e Valida(mês)	
	if (tam >= 5 && tam <= 6) {
		obj.value = str.substr(0, 2) + "/" + str.substr(2, 2) + "/" + str.substr(4, tam);
	}
	//Formata Data e Valida(Ano)	
	if (tam == 8) {
		//alert(Number(str.substr(4, 3) + String.fromCharCode(Tecla)));
		obj.value = str.substr(0, 2) + "/" + str.substr(2, 2) + "/" + str.substr(4, tam);
	//	alert(obj.value);
	}
	return true;
}


/* Função Adiciona por Denis Villegas
-------fnVerificaData ----Verifica o tipo de validação de Data e processa as rotinas
Parametros de entrada
Importante, antes de mandar a data do formulario tratar a formatação;
stTipo - 1,2,3 
	Se 1 Valida Data
	Se 2 Valida Data e compara dtDefaul não pode ser maior que dtAuxiliar
	Se 3 Valida Data e compara dtDefaul não pode ser maior que a Data Corrente
	Se 4 Valida Data e compara dtDefaul não pode ser Maior que dtAuxiliar e Data Corrente
dtDefaul - Data do campo corrente(DD/MM/YYYY)
dtAuxiliar - Data auxiliar para comparação (DD/MM/YYYY)
OBS: Utiliza como Funções dependentes validaDiffData() e validaData()
*/
function fnVerificaData(stTipo, dtDefault, dtAuxiliar, dtPeriodo) {
	if (dtDefault.value != "") {
		if (stTipo < 1 && stTipo > 4) {
			stMsg = "Se 1 Valida Data\n";
			stMsg += "Se 2 Valida Data e compara dtDefaul n\xe3o pode ser maior que dtAuxiliar\n";
			stMsg += "Se 3 Valida Data e compara dtDefaul n\xe3o pode ser maior que a Data Corrente\n";
			stMsg += "Se 4 Valida Data e compara dtDefaul n\xe3o pode ser Maior que dtAuxiliar e Data Corrente\n";
			stMsg += "Se 5 Valida Data e compara dtDefaul n\xe3o pode ser Maior que dtAuxiliar e Data Corrente e n\xe3o pode passar de x dias\n";
			alert(stMsg);
			return false;
		}
		if (stTipo == 1) {
			bolData = validaData(dtDefault.value);
			if (bolData == false) {
				alert("Data inv\xe1lida");
				dtDefault.value = "";
				dtDefault.focus();
				return false;
			}
		} else {
			if (stTipo == 2) {
				bolData = validaData(dtDefault.value);
				if (bolData == false) {
					alert("Data inv\xe1lida");
					dtDefault.value = "";
					dtDefault.focus();
					return false;
				} else {
					strDateDefault = dtDefault.value.substr(3, 2) + "/" + dtDefault.value.substr(0, 2) + "/" + dtDefault.value.substr(6, 4);
					strDateAuxiliar = dtAuxiliar.value.substr(3, 2) + "/" + dtAuxiliar.value.substr(0, 2) + "/" + dtAuxiliar.value.substr(6, 4);
					if (validaDiffData(strDateAuxiliar, strDateDefault, "d", false) < 0) {
						alert("A Data Final n\xe3o deve ser menor que a Data Inicial.");
						dtDefault.value = "";
						dtDefault.focus();
						return false;
					}
				}
			} else {
				if (stTipo == 3) {
					bolData = validaData(dtDefault.value);
					if (bolData == false) {
						alert("Data inv\xe1lida");
						dtDefault.value = "";
						dtDefault.focus();
						return false;
					} else {
						dtAgora = new Date;
						strDateNow = (dtAgora.getMonth() + 1) + "/" + dtAgora.getDate() + "/" + dtAgora.getFullYear();
						strDateDefault = dtDefault.value.substr(3, 2) + "/" + dtDefault.value.substr(0, 2) + "/" + dtDefault.value.substr(6, 4);
				//alert(strDateNow);
						if (validaDiffData(strDateDefault, strDateNow, "d", false) < 0) {
							alert("A Data n\xe3o pode ser maior que data corrente");
							dtDefault.value = "";
							dtDefault.focus();
							return false;
						}
					}
				} else {
					if (stTipo == 4) {
						bolData = validaData(dtDefault.value);
						if (bolData == false) {
							alert("Data inv\xe1lida");
							dtDefault.value = "";
							dtDefault.focus();
							return false;
						} else {
							dtAgora = new Date;
							strDateNow = (dtAgora.getMonth() + 1) + "/" + dtAgora.getDate() + "/" + dtAgora.getFullYear();
							strDateDefault = dtDefault.value.substr(3, 2) + "/" + dtDefault.value.substr(0, 2) + "/" + dtDefault.value.substr(6, 4);
							strDateAuxiliar = dtAuxiliar.value.substr(3, 2) + "/" + dtAuxiliar.value.substr(0, 2) + "/" + dtAuxiliar.value.substr(6, 4);
				//alert(strDateNow);
				//alert(validaDiffData(strDateDefault,strDateNow,'d',false));
							if (validaDiffData(strDateDefault, strDateNow, "d", false) < 0) {
								alert("A Data n\xe3o pode ser maior que a data corrente");
								dtDefault.value = "";
								dtDefault.focus();
								return false;
							}
							if (validaDiffData(strDateAuxiliar, strDateDefault, "d", false) < 0) {
								alert("A Data Final n\xe3o deve ser menor que a Data Inicial.");
								dtDefault.value = "";
								dtDefault.focus();
								return false;
							}
						}
					} else {
						if (stTipo == 5) {
							bolData = validaData(dtDefault.value);
							if (bolData == false) {
								alert("Data inv\xe1lida");
								dtDefault.value = "";
								dtDefault.focus();
								return false;
							} else {
								if (dtPeriodo == "") {
									alert("O Per\xedodo entre a Data de Inicio e Data de Fim n\xe3o foi definido.");
									dtDefault.value = "";
									dtDefault.focus();
									return false;
								}
								dtAgora = new Date;
								strDateNow = (dtAgora.getMonth() + 1) + "/" + dtAgora.getDate() + "/" + dtAgora.getFullYear();
								strDateDefault = dtDefault.value.substr(3, 2) + "/" + dtDefault.value.substr(0, 2) + "/" + dtDefault.value.substr(6, 4);
								strDateAuxiliar = dtAuxiliar.value.substr(3, 2) + "/" + dtAuxiliar.value.substr(0, 2) + "/" + dtAuxiliar.value.substr(6, 4);
				//alert(validaDiffData(strDateAuxiliar,strDateDefault,'d',false));
				//alert(strDateNow);
								if (validaDiffData(strDateDefault, strDateNow, "d", false) < 0) {
									alert("A Data n\xe3o pode ser maior que a data corrente");
									dtDefault.value = "";
									dtDefault.focus();
									return false;
								}
				//alert(validaDiffData(strDateAuxiliar,strDateDefault,'d',false));
								if (validaDiffData(strDateAuxiliar, strDateDefault, "d", false) < 0) {
									alert("A Data Final n\xe3o deve ser menor que a Data Inicial.");
									dtDefault.value = "";
									dtDefault.focus();
									return false;
								}
								if (validaDiffData(strDateAuxiliar, strDateDefault, "d", false) + 1 > dtPeriodo) {
									alert("A diferen\xe7a entre a Data Inicial e Final n\xe3o pode passar de " + dtPeriodo + " dias.");
									dtDefault.value = "";
									dtDefault.focus();
									return false;
								}
							}
						}
					}
				}
			}
		}
	}
	return true;
}

/* Função Adiciona por Denis Villegas -----wanderley 
-------validaData ----Valida se a data existe, inclusive Ano Bisesto
Parametros de entrada
Importante, antes de mandar a data do formulario tratar a formatação;
Data - Data (DD/MM/YYYY)
*/
function validaData(Data) {
	var dma = -1;
	var data = Array(3);
	var ch = Data.charAt(0);
	for (i = 0; i < Data.length && ((ch >= "0" && ch <= "9") || (ch == "/" && i != 0)); ) {
		data[++dma] = "";
		if (ch != "/" && i != 0) {
			return false;
		}
		if (i != 0) {
			ch = Data.charAt(++i);
		}
		if (ch == "0") {
			ch = Data.charAt(++i);
		}
		while (ch >= "0" && ch <= "9") {
			data[dma] += ch;
			ch = Data.charAt(++i);
		}
	}
	if (ch != "") {
		return false;
	}
	if (data[0] == "" || isNaN(data[0]) || parseInt(data[0]) < 1) {
		return false;
	}
	if (data[1] == "" || isNaN(data[1]) || parseInt(data[1]) < 1 || parseInt(data[1]) > 12) {
		return false;
	}
	if (data[2] == "" || isNaN(data[2]) || ((parseInt(data[2]) < 0 || parseInt(data[2]) > 99) && (parseInt(data[2]) < 1900 || parseInt(data[2]) > 9999))) {
		return false;
	}
	var ano;
	ano = data[2];
//	if (ano.length < 4) {
//		alert("O ano tem que ter 4 d\xedgitos.");
//		return false;
//	}
	if (data[2] < 50) {
		data[2] = parseInt(data[2]) + 2000;
	} else {
		if (data[2] < 100) {
			data[2] = parseInt(data[2]) + 1900;
		}
	}
	switch (parseInt(data[1])) {
	  case 2:
		if (((parseInt(data[2]) % 4 != 0 || (parseInt(data[2]) % 100 == 0 && parseInt(data[2]) % 400 != 0)) && parseInt(data[0]) > 28) || parseInt(data[0]) > 29) {
			return false;
		}
		break;
	  case 4:
	  case 6:
	  case 9:
	  case 11:
		if (parseInt(data[0]) > 30) {
			return false;
		}
		break;
	  default:
		if (parseInt(data[0]) > 31) {
			return false;
		}
	}
	return true;
}
/* Função Adiciona por Denis Villegas -----wanderley 
-------validaDiffData ----Informa a diferença das datas em dias,horas,minutos,segundos
Parametrso de entrada
Importante, antes de mandar a data do formulario tratar a formatação;
start - Data Inicio (MM/DD/YYYY)
end - Data Final (MM/DD/YYYY)
interval - Tipo de calculo (d,h,m,s)
rounding - Arendodamento(true,false)

*/
function validaDiffData(start, end, interval, rounding) {
	var iOut = 0;
    
    // Create 2 error messages, 1 for each argument. 
	var startMsg = "Verifique se a Data inicial e a Data Final\n";
	startMsg += "s\xe3o valida no formato de data.\n\n";
	startMsg += "Tente novamente.";
	var intervalMsg = "Sorry the dateAdd function only accepts\n";
	intervalMsg += "d, h, m OR s intervals.\n\n";
	intervalMsg += "Please try again.";
	var bufferA = Date.parse(start);
	var bufferB = Date.parse(end);
    //alert(bufferA);
	//alert(bufferB);
    // check that the start parameter is a valid Date. 
	if (isNaN(bufferA) || isNaN(bufferB)) {
		alert(startMsg);
		return null;
	}
	
    // check that an interval parameter was not numeric. 
	if (interval.charAt == "undefined") {
        // the user specified an incorrect interval, handle the error. 
		alert(intervalMsg);
		return null;
	}
	var number = bufferB - bufferA;
    
    // what kind of add to do? 
	switch (interval.charAt(0)) {
	  case "d":
	  case "D":
		iOut = parseInt(number / 86400000);
		if (rounding) {
			iOut += parseInt((number % 86400000) / 43200001);
		}
		break;
	  case "h":
	  case "H":
		iOut = parseInt(number / 3600000);
		if (rounding) {
			iOut += parseInt((number % 3600000) / 1800001);
		}
		break;
	  case "m":
	  case "M":
		iOut = parseInt(number / 60000);
		if (rounding) {
			iOut += parseInt((number % 60000) / 30001);
		}
		break;
	  case "s":
	  case "S":
		iOut = parseInt(number / 1000);
		if (rounding) {
			iOut += parseInt((number % 1000) / 501);
		}
		break;
	  default:
        // If we get to here then the interval parameter
        // didn't meet the d,h,m,s criteria.  Handle
        // the error. 		
		alert(intervalMsg);
		return null;
	}
	return iOut;
}




