

// Objetivo : Adiciona unidades de data conforme parametros passados
// Premissas : DateToStr
// Entradas : strType ("d"-dia ; "m"-mês ; "y"-ano)
//			  intQuant - valor a ser somado
//			  objDate - data a ter o valor somado ou subtraído
//			  strOperacao - indica de deve somar (+) ou subtrair (-)
// Saídas : data somada
function CalculaData (strType, intQuant, objDate, strOperacao) 
{
	var strOut = '';
	var intDia;
	var intMes;
	var intAno;
	
	switch (strType) 
	{
		case 'd':
			intDia = objDate.getDate();
			if (strOperacao == '+')
			{
				intDia += Number(intQuant);
			}
			else
			{
				intDia -= Number(intQuant);
			}
			objDate.setDate (intDia);
			break;
				
		case 'm':
			intMes = objDate.getMonth();
			if (strOperacao == '+')
			{
				intMes += Number(intQuant);
			}
			else
			{
				intMes -= Number(intQuant);
			}
			objDate.setMonth (intMes);
			break;
			
		case 'y':
			intAno = objDate.getFullYear();
			if (strOperacao == '+')
			{
				intAno += Number(intQuant);
			}
			else
			{
				intAno -= Number(intQuant);
			}
			objDate.setFullYear (intAno);
			break;
				
	}
		
	strOut = DateToStr(objDate);
		
	return (strOut);
}



// Objetivo : Função usada pelo DateAdd
// Premissas : 
// Entradas : Data como string
// Saídas : data convertida
function ConverteData (strDate) 
{
	var strDia = strDate.substr (0, 2);
	var strMes = strDate.substr (3, 2);
	var strAno = strDate.substr (6, 4);
	
	var dtmValor = new Date (strAno, Number(strMes) - 1, strDia);

	return (dtmValor);
}


// Objetivo : Converter data em string
// Premissas : 
// Entradas : Data a ser convertida
// Saídas : Data convertida em string
function DateToStr (dtmIn) 
{
	var strDia = dtmIn.getDate().toString();
	var strMonth = (dtmIn.getMonth() + 1).toString();
	var strYear = dtmIn.getFullYear().toString();

	if (strDia.length < 2) 
	{ 
		strDia = '0' + strDia; 
	}
	if (strMonth.length < 2) 
	{ 
		strMonth = '0' + strMonth; 
	}

	return (strDia + "/" + strMonth + "/" + strYear);
}




// Objetivo : Formata a hora na ocorrencia do evento on blur
// Premissas : 
// Entradas : valor do text e nome do text
// Saídas : hora formatada
function FormataHora(objCampo) 
{
	var strValor = objCampo.value;
	if (strValor.length >= 2) 
	{
		if (strValor.indexOf(":") == -1) 
		{
			var strHora = strValor.substr (0, 2);
			var strMinuto = strValor.substr (2, 2);
			
			strValor = strHora + ":" + strMinuto;
		}
	}
	objCampo.value = strValor;
	return;
}


// Objetivo : Formata a data conforme o usuário digita os valores no text
// Premissas : 
// Entradas : valor do text (this)
// Saídas : alert indicando o erro da data
function ValidaData() 
{
	strData = event.srcElement.value;	
	if (strData.length>0)
	{
		var dtmPat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/; 
		var arrMatch = strData.match(dtmPat); 
		if (arrMatch == null) 
		{
			alert("Formato de data invalido.")
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}
		else	
		{
			intDia = arrMatch[1]; 
			if (intDia.length==1)
				intDia = '0' + intDia;						
			intMes = arrMatch[3];
			if (intMes.length==1)
				intMes = '0' + intMes;
			intAno = arrMatch[4];
			if (intDia < 1 || intDia > 31) 
			{
				alert("Dia incorreto.");
				event.srcElement.focus();
				event.srcElement.select();
				return;
			}
			if (intMes < 1 || intMes > 12) 
			{ 
				alert("Mês incorreto.");
				event.srcElement.focus();
				event.srcElement.select();
				return;
			}
			if ((intMes==4 || intMes==6 || intMes==9 || intMes==11) && intDia==31) 
			{
				alert("Mês "+intMes+" não tem 31 dias!")
				event.srcElement.focus();
				event.srcElement.select();
				return;
			}
			if (intMes == 2) 
			{ 
				var blnIsLean = (intAno % 4 == 0 && (intAno % 100 != 0 || intAno % 400 == 0));
				if (intDia>29 || (intDia==29 && !blnIsLean)) 
				{
					alert("Fevereiro " + intAno + " não tem " + intDia + " dias!");
					event.srcElement.focus();
					event.srcElement.select();
					return;
				}
			}
		}		
		event.srcElement.value = intDia + '/' + intMes + '/' + intAno; 	
		return true;
	}	
}

// Objetivo : Formata a data conforme o usuário digita os valores no text
// Premissas : 
// Entradas : valor do text em questao (this)
// Saídas : nenhuma
function FormataData(Campo) 
{
	var intTecla = event.keyCode;
	vntValor = Campo.value;
	vntValor = vntValor.replace( ".", "" );
	vntValor = vntValor.replace( "/", "" );
	vntValor = vntValor.replace( "/", "" );
	lngTamanho = vntValor.length + 1;

	if ( intTecla != 9 && intTecla != 8 )
	{
		if ( lngTamanho > 2 && lngTamanho < 5 )
			Campo.value = vntValor.substr( 0, lngTamanho - 2  ) + '/' + vntValor.substr( lngTamanho - 2, lngTamanho );
		if ( lngTamanho >= 5 && lngTamanho <= 10 )
			Campo.value = vntValor.substr( 0, 2 ) + '/' + vntValor.substr( 2, 2 ) + '/' + vntValor.substr( 4, 4 ); 
	}
}





// Objetivo : Verifica se a hora é válida
// Premissas :
// Entradas : valor do campo com uma string de hora
// Saídas : alert indicando o erro, caso ocorra
function ValidaHora (objCampo) 
{
	var strHora;
	var strMinuto;
	var strSep;
	var strTime = objCampo.value;

	if (strTime.length != 0)
	{
		if (strTime.length != 5) 
		{
			alert ("Hora inválida, formato deve ser 'HH:MM'.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}

		strHora = strTime.substr (0, 2);
		strSep =  strTime.substr (2, 1);
		strMinuto = strTime.substr (3, 2);
		if (isNaN(strHora)) 
		{
			alert ("Hora inválida.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}
		if (strSep != ":") 
		{
			alert ("Hora inválida, formato deve ser 'HH:MM'.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}

		if (isNaN(strMinuto)) 
		{
			alert ("Minuto inválido.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}

		if (Number(strHora) < 0) 
		{
			alert ("Hora deve ser maior ou igual a zero.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}

		if (Number(strHora) > 23) 
		{
			alert ("Hora deve ser menor ou igual a 23.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}

		if (Number(strMinuto) < 0) 
		{
			alert ("Minutos devem ser maiores ou iguais a zero.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}

		if (Number(strMinuto) > 59) 
		{
			alert ("Minutos não podem ser maiores que 59.");
			event.srcElement.focus();
			event.srcElement.select();
			return;
		}
	}
}

function isValidDataDigit(pchar) {
    return ("0123456789".indexOf(pchar)>=0);
}

function EventValidaKeyData() {
	var pKey	= String.fromCharCode(event.keyCode);
	var blnRet	= isValidDataDigit(pKey);
	event.returnValue = blnRet;
}

function EventValidaKeyHora() {
	var pKey	= String.fromCharCode(event.keyCode);
	var blnRet	= isValidDataDigit(pKey);
	event.returnValue = blnRet;
}

// Verifica se a data inicial é maior do que a final
function isCompareDates(dtInicial,dtFinal)
{
		var sDate=new DateObj(dtInicial);
		var fDate=new DateObj(dtFinal);
		if(sDate.isValid && fDate.isValid)
		{
			if(fDate.lesserThan(sDate))
			{
				return false;
			}
			return true;
		}
}

/*Objeto que contém métodos úteis para validação de datas*/ 
function DateObj(dt)
{
	if(typeof(dt)=='string' && dt.length==10)
	{
		this.isValid=true;
		this.day=dt.substring(0,2);
		this.month=dt.substring(3,5);
		this.year=dt.substring(6,10);
		this.daysTo=_DaysTo;
		this.lesserThan=_LesserThan;
	}
	else
	{
		this.isValid=false;
	}	
}

function _LesserThan(dt)
{
	var start=Number(this.year+this.month+this.day);
	var finish=Number(dt.year+dt.month+dt.day);
	if(start < finish) return true;
	else return false;
}

function _DaysTo(dt)
{
	var msDay=24*60*60*1000; //Milisegundo existentes em um dia
	var start=new Date(this.month+"/"+this.day+"/"+this.year);
	var finish=new Date(dt.month+"/"+dt.day+"/"+dt.year);
	var time=(finish.getTime()-start.getTime());
	return(Math.floor(time/msDay));
}

function fncIdade(vpDataAtual, vpDataNascimento, vpCampo)
{
	var DataAtual = new DateObj(vpDataAtual);
	var DataNascimento = new DateObj(vpDataNascimento);
	var Idade;
	if (DataAtual == 'undefined' || DataNascimento == 'undefined')
	{
		return 0;
	}
	if ( DataAtual.isValid && DataNascimento.isValid )
	{
		Idade = DataAtual.year - DataNascimento.year;
		if ( Idade > 0 )
		{
			if ( DataNascimento.month > DataAtual.month )
			{
				Idade = Idade - 1;
			}
			else 
			{
				if ( DataNascimento.month == DataAtual.month )
				{
					if ( DataNascimento.day > DataAtual.day )
					{
						Idade = Idade - 1;
					}
				}
			}
		}
	}
	else
	{
		Idade = -1;
	}
	
		if ( Idade < 18 )
		{
			alert('Idade insuficiente!');	
			document.all[vpCampo].focus();
			document.all[vpCampo].select();
			return;
		}
		else
		{
			return Idade;
		}
}