// Objetivo : Adiciona unidades de data conforme parametros passados
// Premissas : ValidaData, ConverteData, DateToStr
// Entradas : strType ("d"-dia ; "m"-mês ; "y"-ano)
//			  intQuant - valor a ser somado
//			  strDate - data a ter o valor somado	
// Saídas : data somada
function SomaData (strType, intQuant, strDate) 
{
	var strOut = '';
	var dtmIn;
	var intDia;
	var intMes;
	var intAno;
	
	if (ValidaData (strDate)) 
	{
		dtmIn = ConverteData (strDate);
		
		switch (strType) 
		{
			case 'd':
				intDia = dtmIn.getDate();
				intDia += Number(intQuant);
				dtmIn.setDate (intDia);
				break;
				
			case 'm':
				intMes = dtmIn.getMonth();
				intMes += Number(intQuant);
				dtmIn.setMonth (intMes);
				break;
			
			case 'y':
				intAno = dtmIn.getFullYear();
				intAno += Number(intQuant);
				dtmIn.setFullYear (intAno);
				break;
				
		}
		
		strOut = DateToStr(dtmIn);
	}
	else 
	{
		strOut = 'Data inválida';
	}
		
	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 (objText, strValor) 
{
	if (strValor.length == 4) 
	{
		if (strValor.indexOf (":") == -1) 
		{
			var strHora = strValor.substr (0, 2);
			var strMinuto = strValor.substr (2, 2);
			
			strValor = strHora + ":" + strMinuto;
		}
	}
	objText.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 VerificaHora (strTime) 
{
	var blnIsOk;
	var strHora;
	var strMinuto;
	var strSep;

	blnIsOk = true;

	if (strTime.length != 0)
	{

		if (strTime.length != 5) 
		{
			alert ("Hora inválida, formato deve ser 'HH:MM'.");
			blnIsOk = false;
		}

		if (blnIsOk) 
		{
			strHora = strTime.substr (0, 2);
			strSep =  strTime.substr (2, 1);
			strMinuto = strTime.substr (3, 2);

			if (IsNaN (strHora)) 
			{
				alert ("Hora inválida.");
				blnIsOk = false;
			}

			if (strSep != ":") 
			{
				alert ("Hora inválida, formato deve ser 'HH:MM'.");
				blnIsOk = false;
			}

			if (blnIsOk && IsNaN (strMinuto)) 
			{
				alert ("Minuto inválido.");
				blnIsOk = false;
			}

			if (blnIsOk && Number (strHora) < 0) 
			{
				alert ("Hora deve ser maior ou igual a zero.");
				blnIsOk = false;
			}

			if (blnIsOk && Number (strHora) > 23) 
			{
				alert ("Hora deve ser menor ou igual a 23.");
				blnIsOk = false;
			}

			if (blnIsOk && Number (strMinuto) < 0) 
			{
				alert ("Minutos devem ser maiores ou iguais a zero.");
				blnIsOk = false;
			}

			if (blnIsOk && Number (strMinuto) > 59) 
			{
				alert ("Minutos não podem ser maiores que 59.");
				blnIsOk = false;
			}
		}
	}
	return blnIsOk;
}

function isValidDataDigit(pchar) {
    return ("0123456789".indexOf(pchar)>=0);
}

function EventValidaKeyData() {
	var pKey	= String.fromCharCode(event.keyCode);
	var blnRet	= isValidDataDigit(pKey);
	event.returnValue = blnRet;
}

