//=====================================================================================================================
//Abre uma nova janela. (PopUp)
//------------------------------------------------------------------------------------------
function MM_openBrWindow(theURL,winName,features)
{ 	
	var win = window.open(theURL,winName,features);
	win.focus();
}

//Valida um campo text ou textarea, verificando se ele está vazio, informando o usuário
//com um alert contendo o texto desejado, e movendo o foco para o campo em questão.
//Sempre dá um trim() no campo.
//Retorna verdadeiro ou falso, se o campo tiver ou não valor após chamar trim() na string
//------------------------------------------------------------------------------------------
function validaCampo(campo, texto)
{
	var valor = "";
	
	if (campo != null)
	{
		valor = trim(campo.value);
		campo.value = valor;
	
		if (valor == "" || valor == null)
		{
			if (texto == null || trim(texto) == "")
			{
				texto = "Favor digitar um valor para o campo!";
			}
			
			alert(texto);
			campo.focus();
			return false;
		}
		
		return true;
	}
	else
	{
		return false;
	}
}

//Valida uma lista de campos text ou textarea, verificando se eles estão vazios, informando o usuário
//com um alert contendo o texto desejado, e movendo o foco para o primeiro campo em questão.
//Sempre dá um trim() nos campos.
//Retorna verdadeiro ou falso, se os campos tiverem ou não valores após chamar trim() na string
//------------------------------------------------------------------------------------------
function validaListaCampo(listCampos)
{
	retorno = true;
	
	var texto = "Os seguintes itens devem ser corrigidos antes de efetuar esta operação:\n\n";
	var i=0;
	
	for (i=0; i<listCampos.length; i++) {
		var valor = "";
		
		if (listCampos[i][0] != null){
			valor = trim(listCampos[i][0].value);
			listCampos[i][0].value = valor;
			
			if (valor == "" || valor == null){
				
				texto = texto + "-> " + listCampos[i][1] + "\n";
				retorno = false;
			}	
		}
		else
		{
			texto = texto + "-> Parâmetro inconsistente enviado na posição: ["+i+"][0]\n>";
			retorno = false;
		}
	}
	if (!retorno) {
		alert(texto);
		if (listCampos[0][0] != null) listCampos[0][0].focus();
	}
	
	return retorno;
}

//Valida uma lista de campos select, verificando se eles estão iguais aos parametros informados.
//Avisa o usuario com um alert contendo o texto desejado, e movendo o foco para o primeiro campo em questão.
//Retorna verdadeiro ou falso, se os campos tiverem ou não iguais aos valores passados por parametros.
//------------------------------------------------------------------------------------------
function validaListaCampoSelect(listCampos)
{
	retorno = true;
	
	var texto = "Os seguintes itens devem ser corrigidos antes de efetuar esta operação:\n\n";
	var i=0;
	
	for (i=0; i<listCampos.length; i++) {
		var valor = "";
		
		if (listCampos[i][0] != null){
						
			if (listCampos[i][0].options[listCampos[i][0].selectedIndex].value == listCampos[i][1]){
				
				texto = texto + "-> " + listCampos[i][2] + "\n";
				retorno = false;
			}	
		}
		else
		{
			texto = texto + "-> Parâmetro inconsistente enviado na posição: ["+i+"][0]\n>";
			retorno = false;
		}
	}
	if (!retorno) {
		alert(texto);
		if (listCampos[0][0] != null) listCampos[0][0].focus();
	}
	
	return retorno;
}

//Valida um campo text ou textarea, verificando se ele contem um número válido, 
//após dar trim() no valor, informando o usuário com um alert contendo o texto desejado, 
//e movendo o foco para o campo em questão.
//Retorna verdadeiro ou falso.
//------------------------------------------------------------------------------------------
function validaCampoNumero(campo, texto)
{
	var valor = "";
		
	if (campo != null)
	{
		valor = trim(campo.value);

		if (isNaN(valor))
		{
			if (texto == null || trim(texto) == "")
			{
				texto = "Favor digitar um número válido para o campo!";
			}

			alert(texto);
			campo.focus();
			return false;

		}

		return true;
	}
	else
	{
		return false;
	}
}

//Valida uma lista de campos text ou textarea, verificando se eles contém números válidos, 
//informando o usuário com um alert contendo o texto desejado, e movendo o foco para o 
//primeiro campo em questão. Sempre dá um trim() nos campos.
//Retorna verdadeiro ou falso, se os campos tiverem ou não valores após chamar trim() na string
//------------------------------------------------------------------------------------------
function validaListaCampoNumero(listCampos)
{
	retorno = true;
	
	var texto = "Os seguintes itens devem ser corrigidos antes de efetuar esta operação:\n\n";
	var i=0;
	
	for (i=0; i<listCampos.length; i++) {
		var valor = "";
		
		if (listCampos[i][0] != null){
			valor = trim(listCampos[i][0].value);
			listCampos[i][0].value = valor;
			
			if (isNaN(valor)){
				
				texto = texto + "-> " + listCampos[i][1] + "\n";
				retorno = false;
			}	
		}
		else
		{
			texto = texto + "-> Parâmetro inconsistente enviado na posição: ["+i+"][0]\n>";
			retorno = false;
		}
	}
	if (!retorno) {
		alert(texto);
		if (listCampos[0][0] != null) listCampos[0][0].focus();
	}
	
	return retorno;
}


//Remove espaços de iniciais e finais de uma string.
//------------------------------------------------------------------------------------------
function trim(texto)
{
	if (texto == null) return null;
	
	//Remove do início:
	while (texto.length > 0 && texto.charAt(0) == " ")
		texto = texto.substring(1, texto.length);
	//Remove do fim:
	while (texto.length > 0 && texto.charAt(texto.length - 1) == " ")
		texto = texto.substring(0, texto.length - 1);
	
	return texto;
}

//Força o valor de um campo para ser um número INTEIRO válido,
//removendo qualquer caracter que não seja número. Ao final,
//se não houver nenhum número válido, atribui "0" ao campo.
//Bom para ser usado com eventos onKeyUp e onBlur:
//------------------------------------------------------------------------------------------
function forceNumber(campo)
{	
	//Verifica se a tecla apertada NÃO foi a seta para a esquerda ou para a direita,
	//nem as teclas DELETE ou BACKSPACE:
	if ( window.event && 
	     window.event.keyCode != 37 && //"<-"
	     window.event.keyCode != 39 && //"->"
	     window.event.keyCode != 8 &&  //BACKSPACE
	     window.event.keyCode != 46 && //DELETE
	     campo != null && campo.value != null )
	{
		var valor = campo.value;
		var resp = "";
		var recoloca = false;
		
		for (var i = 0; i < valor.length; i++)
		{
			var c = new String(valor.charAt(i));

			if ( isNaN(c) || c == ' ' || 
			     c == 'e' || c == 'E' || c == '.' )
			{ 
				recoloca = true;
			}
			else
			{
				resp += c;
			}
		}

		if (recoloca || valor == "")
		{
			if (resp == "") resp = "0";
			campo.value = resp;
		}
	}
}

//Força o valor de um campo para ser um número INTEIRO válido,
//removendo qualquer caracter que não seja número.
// A diferença desta função para a forceNumber() é que esta não seta 0 no final.

//------------------------------------------------------------------------------------------
function forceNumber2(campo)
{
	//Verifica se a tecla apertada NÃO foi a seta para a esquerda ou para a direita,
	//nem as teclas DELETE ou BACKSPACE:
	if ( window.event &&
	     window.event.keyCode != 37 && //"<-"
	     window.event.keyCode != 39 && //"->"
	     window.event.keyCode != 8 &&  //BACKSPACE
	     window.event.keyCode != 46 && //DELETE
	     campo != null && campo.value != null )
	{
		var valor = campo.value;
		var resp = "";
		var recoloca = false;

		for (var i = 0; i < valor.length; i++)
		{
			var c = new String(valor.charAt(i));

			if ( isNaN(c) || c == ' ' ||
			     c == 'e' || c == 'E' || c == '.' )
			{
				recoloca = true;
			}
			else
			{
				resp += c;
			}
		}

		if (recoloca || valor == "")
		{
			if (resp == "") resp = "";
			campo.value = resp;
		}
	}
}

//Força o valor de um campo para ser um número FLUTUANTE válido,
//removendo qualquer caracter que não seja número. Ao final,
//se não houver nenhum número válido, atribui "0" ao campo.
//Bom para ser usado com eventos onKeyUp e onBlur:
//------------------------------------------------------------------------------------------
function forceDecimal(campo)
{	
	//Verifica se a tecla apertada NÃO foi a seta para a esquerda ou para a direita,
	//nem as teclas DELETE ou BACKSPACE:
	if ( window.event && 
	     window.event.keyCode != 37 && //"<-"
	     window.event.keyCode != 39 && //"->"
	     window.event.keyCode != 8 &&  //BACKSPACE
	     window.event.keyCode != 46 && //DELETE
	     campo != null && campo.value != null )
	{
		var valor = campo.value;
		var resp = "";
		var recoloca = false;
		
		for (var i = 0; i < valor.length; i++)
		{
			var c = new String(valor.charAt(i));

			if ( (c == '.' && (resp.indexOf('.') == -1)) || 
			     (!isNaN(c) && c != ' ' && c != 'e' && c != 'E') )
			{ 
				resp += c;
			}
			else
			{
				recoloca = true;
			}
		}

		if (recoloca || valor == "")
		{
			if (resp == "") resp = "0.00";
			campo.value = resp;
		}
	}
}

//Formata um campo para um número com duas casas decimais, onde o sepadaro é um ".":
//------------------------------------------------------------------------------------------
function FormataValor(campo,tammax)
{
	var tecla = window.event.keyCode;
	vr = campo.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;
	
	//Remove os "0s" acrescentados:
	for (var i = 0; i < vr.length; i++)
	{
		if (vr.length > 0 && vr.substr(0,1) == '0')
		{
			vr = vr.substr(1);
		}
		else
		{
			break;
		}
	}

	if (tam < tammax && 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 == 0 )
		{
			campo.value = '0.00'; 
		}
		else if ( tam == 1 )
		{
			campo.value = '0.0' + vr; 
		}
		else if ( tam == 2 )
		{ 
	 		campo.value = '0.' + vr; 
	 	}
	 	else
	 	{
			if ( (tam > 2) && (tam <= 5) ){
				campo.value = vr.substr( 0, tam - 2 ) + '.' + vr.substr( tam - 2, tam ); }
			if ( (tam >= 6) && (tam <= 8) ){
				campo.value = vr.substr( 0, tam - 5 ) + vr.substr( tam - 5, 3 ) + '.' + 
				vr.substr( tam - 2, tam ) ; 
			}
			if ( (tam >= 9) && (tam <= 11) ){
				campo.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) ){
				campo.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) ){
				campo.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 ) ;
			}
		}
	}
	
	forceDecimal(campo);
}

//Contador de caracteres de um campo. Mostra em ordem decrescente,
//do tamanho máximo permitido até chegar a zero.
//Deve-se passar no argumento 'countfield' o campo que será usado como contador,
//geralmente um <text>.
//------------------------------------------------------------------------------------------
function textCounter(field, countfield, maxlimit)
{
	if (field.value.length > maxlimit) // if too long...trim it!
		field.value = field.value.substring(0, maxlimit);
	// otherwise, update 'characters left' counter
	else 
		countfield.value = maxlimit - field.value.length;
}

//Limita o tamanho máximo de um campo. Útil para usar em <textarea>.
//------------------------------------------------------------------------------------------
function limitaTexto(field, maxlimit)
{
	if (field.value.length > maxlimit) // if too long...trim it!
		field.value = field.value.substring(0, maxlimit);
}


//=====================================================================================================================

//Desabilita um botao de submit logo apos o form ser enviado, 
//o que faz o usuario só poder submeter o form uma vez. 
//Só funciona quando o <INPUT> é do tipo 'submit':
//------------------------------------------------------------------------------------------
function submitonce(theform)
{
	if (document.all || document.getElementById)
	{		
		for (i = 0; i < theform.length; i++)
		{
			var obj = theform.elements[i];
			if (obj.type.toLowerCase() == "button" || obj.type.toLowerCase() == "submit" ||
		            obj.type.toLowerCase() == "reset")
				obj.disabled = true;
		}
	}
}
//Desabilita todos os botões SUBMIT de um form, para o usuário não poder realizar outra ação
//após submeter um form. Funciona apenas quando a página tem um único form:
//------------------------------------------------------------------------------------------
function disableButtons()
{
	var f = document.forms[0];
	for (i = 0; i < f.length; i++)
	{
		var obj = f.elements[i];
		if (obj.type.toLowerCase() == "button" || obj.type.toLowerCase() == "submit" ||
		    obj.type.toLowerCase() == "reset")
			obj.disabled = true;
	}
	
}
//------------------------------------------------------------------------------------------
function preparaPagina()
{
	//Desabilita o botão "ATUALIZAR" do cabeçalho, 
	//nas páginas que fazem atualizações em bancos de dados:
	var f = document.forms[0];
	if (f != null && document.all.atualizar != null)
		document.all.atualizar.disabled = (f.pagetype != null && f.pagetype.value == 'UPDATABLE');
}
//------------------------------------------------------------------------------------------
function refresh()
{
	var f = document.forms[0];
	if (f == null || f.pagetype == null || f.pagetype.value != 'UPDATABLE')
	{
		//Verifica se o JSP tem um hidden que marca 
		//que o mesmo usa método próprio para atualização.
		//Se existir, chama o método "atualiza()", que a página deve ter implementado.
		//Se não existir, dá um "reload" comum.
		if (f.markrefresh != null)
			atualiza();
		else
			document.location.reload();
	}
}
//------------------------------------------------------------------------------------------
function getKey()
{
	if (window.event && window.event.keyCode == 116)
	{
	    window.event.keyCode = 8; refresh(); return false;
	}
	if (window.event && window.event.ctrlKey)
	{
		if(window.event.keyCode == 82)
		{
			refresh(); return false;
		}
	}
}
//------------------------------------------------------------------------------------------
//document.onkeydown = getKey;

//=====================================================================================================================

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

//=====================================================================================================================
<!-- Original:  Richard Gorremans (RichardG@spiritwolfx.com) -->
<!-- Web Site:  http://www.spiritwolfx.com -->
<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->

// Check browser version
var isNav4 = false, isNav5 = false, isIE4 = false
var strSeperator = "/"; 
// If you are using any Java validation on the back side you will want to use the / because 
// Java date validations do not recognize the dash as a valid date separator.
var vDateType = 3; // Global value for type of date format
//                1 = mm/dd/yyyy
//                2 = yyyy/dd/mm  (Unable to do date check at this time)
//                3 = dd/mm/yyyy
var vYearType = 4; //Set to 2 or 4 for number of digits in the year for Netscape
var vYearLength = 2; // Set to 4 if you want to force the user to enter 4 digits for the year before validating.
var err = 0; // Set the error code to a default of zero
if(navigator.appName == "Netscape") {
	if (navigator.appVersion < "5") {
		isNav4 = true;
		isNav5 = false;
	}
	else if (navigator.appVersion > "4") {
		isNav4 = false;
		isNav5 = true;
	}
}
else {
	isIE4 = true;
}

//------------------------------------------------------------------------------------------
function DateFormat(vDateName, vDateValue, e, dateCheck, dateType) {
vDateType = dateType;
// vDateName = object name
// vDateValue = value in the field being checked
// e = event
// dateCheck 
// True  = Verify that the vDateValue is a valid date
// False = Format values being entered into vDateValue only
// vDateType
// 1 = mm/dd/yyyy
// 2 = yyyy/mm/dd
// 3 = dd/mm/yyyy
//Enter a tilde sign for the first number and you can check the variable information.
if (vDateValue == "~") {
	alert("AppVersion = "+navigator.appVersion+" \nNav. 4 Version = "+isNav4+" \nNav. 5 Version = "+isNav5+" \nIE Version = "+isIE4+" \nYear Type = "+vYearType+" \nDate Type = "+vDateType+" \nSeparator = "+strSeperator);
	vDateName.value = "";
	vDateName.focus();
	return true;
}
var whichCode = (window.Event) ? e.which : e.keyCode;
// Check to see if a seperator is already present.
// bypass the date if a seperator is present and the length greater than 8
if (vDateValue.length > 8 && isNav4) {
	if ((vDateValue.indexOf("-") >= 1) || (vDateValue.indexOf("/") >= 1))
		return true;
}
//Eliminate all the ASCII codes that are not valid
var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-";
if (alphaCheck.indexOf(vDateValue) >= 1) {
	if (isNav4) {
		vDateName.value = "";
		vDateName.focus();
		vDateName.select();
		return false;
}
else {
	vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
	return false;
   }
}
if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
	return false;
else {
	//Create numeric string values for 0123456789/
	//The codes provided include both keyboard and keypad values
	var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
	if (strCheck.indexOf(whichCode) != -1) {
	if (isNav4) {
	if (((vDateValue.length < 6 && dateCheck) || (vDateValue.length == 7 && dateCheck)) && (vDateValue.length >=1)) {
	alert("Data Inválida\nPor favor, digite novamente!");
	vDateName.value = "";
	vDateName.focus();
	vDateName.select();
	return false;
}
if (vDateValue.length == 6 && dateCheck) {
	var mDay = vDateName.value.substr(2,2);
	var mMonth = vDateName.value.substr(0,2);
	var mYear = vDateName.value.substr(4,4)
	//Turn a two digit year into a 4 digit year
	if (mYear.length == 2 && vYearType == 4) {
		var mToday = new Date();
		//If the year is greater than 30 years from now use 19, otherwise use 20
		var checkYear = mToday.getFullYear() + 30; 
		var mCheckYear = '20' + mYear;
		if (mCheckYear >= checkYear)
		mYear = '19' + mYear;
		else
		mYear = '20' + mYear;
	}
	var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
	if (!dateValid(vDateValueCheck)) {
		alert("Data Inválida\nPor favor, digite novamente!");
		vDateName.value = "";
		vDateName.focus();
		vDateName.select();
		return false;
	}
	return true;
}
else {
	// Reformat the date for validation and set date type to a 1
	if (vDateValue.length >= 8  && dateCheck) {
	if (vDateType == 1) // mmddyyyy
	{
		var mDay = vDateName.value.substr(2,2);
		var mMonth = vDateName.value.substr(0,2);
		var mYear = vDateName.value.substr(4,4)
		vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
	}
	if (vDateType == 2) // yyyymmdd
	{
		var mYear = vDateName.value.substr(0,4)
		var mMonth = vDateName.value.substr(4,2);
		var mDay = vDateName.value.substr(6,2);
		vDateName.value = mYear+strSeperator+mMonth+strSeperator+mDay;
	}
	if (vDateType == 3) // ddmmyyyy
	{
		var mMonth = vDateName.value.substr(2,2);
		var mDay = vDateName.value.substr(0,2);
		var mYear = vDateName.value.substr(4,4)
		vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
	}
	//Create a temporary variable for storing the DateType and change
	//the DateType to a 1 for validation.
	var vDateTypeTemp = vDateType;
	vDateType = 1;
	var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
	if (!dateValid(vDateValueCheck)) {
		alert("Data Inválida\nPor favor, digite novamente!");
		vDateType = vDateTypeTemp;
		vDateName.value = "";
		vDateName.focus();
		vDateName.select();
		return false;
	}
	vDateType = vDateTypeTemp;
	return true;
}
else {
	if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) {
		alert("Data Inválida\nPor favor, digite novamente!");
		vDateName.value = "";
		vDateName.focus();
		vDateName.select();
		return false;
         }
      }
   }
}
else {
	// Non isNav Check
	if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) {
		alert("Data Inválida\nPor favor, digite novamente!");
		vDateName.value = "";
		vDateName.focus();
		return true;
	}
	// Reformat date to format that can be validated. mm/dd/yyyy
	if (vDateValue.length >= 8 && dateCheck) {
		// Additional date formats can be entered here and parsed out to
		// a valid date format that the validation routine will recognize.
		if (vDateType == 1) // mm/dd/yyyy
		{
			var mMonth = vDateName.value.substr(0,2);
			var mDay = vDateName.value.substr(3,2);
			var mYear = vDateName.value.substr(6,4)
		}
		if (vDateType == 2) // yyyy/mm/dd
		{
			var mYear = vDateName.value.substr(0,4)
			var mMonth = vDateName.value.substr(5,2);
			var mDay = vDateName.value.substr(8,2);
		}
		if (vDateType == 3) // dd/mm/yyyy
		{
			var mDay = vDateName.value.substr(0,2);
			var mMonth = vDateName.value.substr(3,2);
			var mYear = vDateName.value.substr(6,4)
		}
		if (vYearLength == 4) {
			if (mYear.length < 4) {
				alert("Data Inválida\nPor favor, digite novamente!");
				vDateName.value = "";
				vDateName.focus();
				return true;
   			}
		}
		// Create temp. variable for storing the current vDateType
		var vDateTypeTemp = vDateType;
		// Change vDateType to a 1 for standard date format for validation
		// Type will be changed back when validation is completed.
		vDateType = 1;
		// Store reformatted date to new variable for validation.
		var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
		if (mYear.length == 2 && vYearType == 4 && dateCheck) {
			//Turn a two digit year into a 4 digit year
			var mToday = new Date();
			//If the year is greater than 30 years from now use 19, otherwise use 20
			var checkYear = mToday.getFullYear() + 30; 
			var mCheckYear = '20' + mYear;
			if (mCheckYear >= checkYear)
			mYear = '19' + mYear;
			else
			mYear = '20' + mYear;
			vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
			// Store the new value back to the field.  This function will
			// not work with date type of 2 since the year is entered first.
			if (vDateTypeTemp == 1) // mm/dd/yyyy
				vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
			if (vDateTypeTemp == 3) // dd/mm/yyyy
				vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
		} 
		if (!dateValid(vDateValueCheck)) {
			alert("Data Inválida\nPor favor, digite novamente!");
			vDateType = vDateTypeTemp;
			vDateName.value = "";
			vDateName.focus();
			return true;
		}
		vDateType = vDateTypeTemp;
		return true;
	}
	else {
		if (vDateType == 1) {
			if (vDateValue.length == 2) {
				vDateName.value = vDateValue+strSeperator;
			}
			if (vDateValue.length == 5) {
				vDateName.value = vDateValue+strSeperator;
	   		}
		}
		if (vDateType == 2) {
			if (vDateValue.length == 4) {
				vDateName.value = vDateValue+strSeperator;
			}
			if (vDateValue.length == 7) {
				vDateName.value = vDateValue+strSeperator;
   			}
		} 
		if (vDateType == 3) {
			if (vDateValue.length == 2) {
				vDateName.value = vDateValue+strSeperator;
			}
			if (vDateValue.length == 5) {
				vDateName.value = vDateValue+strSeperator;
   			}
		}
		return true;
   	}
}
if (vDateValue.length == 10&& dateCheck) {
	if (!dateValid(vDateName)) {
		// Un-comment the next line of code for debugging the dateValid() function error messages
		//alert(err);  
		alert("Data Inválida\nPor favor, digite novamente!");
		vDateName.focus();
		vDateName.select();
	}
}
return false;
}
else {
	// If the value is not in the string return the string minus the last
	// key entered.
	if (isNav4) {
		vDateName.value = "";
		vDateName.focus();
		vDateName.select();
		return false;
	}
	else
	{
		vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
		return false;
        }
      }
   }
}

//------------------------------------------------------------------------------------------
function dateValid(objName)
{
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	// var err = 0;
	var strMonthArray = new Array(12);
	strMonthArray[0] = "Jan";
	strMonthArray[1] = "Feb";
	strMonthArray[2] = "Mar";
	strMonthArray[3] = "Apr";
	strMonthArray[4] = "May";
	strMonthArray[5] = "Jun";
	strMonthArray[6] = "Jul";
	strMonthArray[7] = "Aug";
	strMonthArray[8] = "Sep";
	strMonthArray[9] = "Oct";
	strMonthArray[10] = "Nov";
	strMonthArray[11] = "Dec";
	//strDate = datefield.value;
	strDate = objName;
	if (strDate.length < 1) {
		return true;
	}
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) {
				err = 1;
				return false;
			}
			else {
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}
	if (booFound == false) {
		if (strDate.length>5) {
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		}
	}
	//Adjustment for short years entered
	if (strYear.length == 2) {
		strYear = '20' + strYear;
	}
	strTemp = strDay;
	strDay = strMonth;
	strMonth = strTemp;
	intday = parseInt(strDay, 10);
	if (isNaN(intday)) {
		err = 2;
		return false;
	}
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) {
		for (i = 0;i<12;i++) {
			if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
				intMonth = i+1;
				strMonth = strMonthArray[i];
				i = 12;
			}
		}
		if (isNaN(intMonth)) {
			err = 3;
			return false;
		}
	}
	intYear = parseInt(strYear, 10);
	if (isNaN(intYear)) {
		err = 4;
		return false;
	}
	if (intMonth>12 || intMonth<1) {
		err = 5;
		return false;
	}
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
		err = 6;
		return false;
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
		err = 7;
		return false;
	}
	if (intMonth == 2) {
		if (intday < 1) {
			err = 8;
			return false;
		}
		if (LeapYear(intYear) == true) {
			if (intday > 29) {
				err = 9;
				return false;
			}
		}
		else {
			if (intday > 28) {
				err = 10;
				return false;
			}
		}
	}
	return true;
}

//------------------------------------------------------------------------------------------
function ComparaData(dataIni, dataFim)
{
	//dataIniName=Nome da variavel data de inicio
	//dataIni = Campo String no formato dd/mm/yyyy
	//dataFim = Campo String no formato dd/mm/yyyy

	//Trecho que valida se a data de término é maior ou igual a data de abertura.
	var strSeperator = "/";

	var sDay = dataIni.value.substr(0,2);
	var sMonth = dataIni.value.substr(3,2);
	var sYear = dataIni.value.substr(6,4)

	var sDateValueCheck = sMonth+strSeperator+sDay+strSeperator+sYear;
	var dtini = new Date(sDateValueCheck);
	var eDay = dataFim.value.substr(0,2);
	var eMonth = dataFim.value.substr(3,2);
	var eYear = dataFim.value.substr(6,4)

	var eDateValueCheck = eMonth+strSeperator+eDay+strSeperator+eYear;
	var dtfim = new Date(eDateValueCheck);
	
	if (dtini.getTime() > dtfim.getTime())
	{
		alert("Data Início maior que a Data Fim. Favor ajustar.");
		return false;
	}
	else
	{
		return true;
	}
}

//------------------------------------------------------------------------------------------
function LeapYear(intYear)
{
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) { return true; }
	}
	else {
		if ((intYear % 4) == 0) { return true; }
	}
	return false;
}

//----------------------------------------------------------
// Previne que caracteres não numericos sejam inseridos nos campos de formulario

function preventChar(code) {
	var validos = "0123456789";
	var char = String.fromCharCode(code);
	return validos.indexOf(char) != -1;
}

//---------------------------------------------------------------------------
// Habilita todos os campos do formulário
function enableAll(form) {
	for (var i=0;i<form.elements.length;i++) {
		form.elements[i].disabled=false;
	}
}

//---------------------------------------------------------------------------
// Seleciona a opção no "combo" cujo valor é "valor"
function seleciona(combo,valor) {
	for (i=0;i<combo.options.length;i++) {
		if (combo.options[i].value == valor) {
			combo.selectedIndex = i;
			break;
		}
	}
}
<!--
function goToURL() { //v3.0
	muda = document.forms.url.url.value;
	location.href= muda;
}
// -->

//---------------------------------------------------------------------------
// Máscara para campos do tipo telefone (ddd)xxxx-xxxx
function mascaraTelefone(objeto){ 
	// Números de 0 a 9
	//if ( ((keyCode > 47) && (keyCode < 58)) || (keyCode == 8) ) { 
		if(objeto.value.length == 0)
			objeto.value = '(' + objeto.value;
		if(objeto.value.length == 3)
			objeto.value = objeto.value + ')';
		if(objeto.value.length == 8)
			objeto.value = objeto.value + '-';
	/*} else {
		return false;
	}*/
}