// Contém funções de validação de campos de formulário

// Declaração dos tipos de valores que s pode assumir
var TYPEINTEGER = 1;
var TYPEDATE = 2;
var TYPESTRING = 3;
var TYPEMAIL = 4;

// Verifica se a string s está vazia.
function isEmpty(s)
{
	return ((s == null) || (s.length == 0));
}

// Retira espaços em branco do início e do final da string s
function trim(s)
{
	// Caso em que s está vazio
	if (isEmpty(s)) return s;

	var whiteSpace = " \t\n\r"; 	// Espaços em branco
	var pos = whiteSpace.indexOf(s.charAt(0));

	// retira os espaços em branco do início da string
	while ((pos > -1) && (! isEmpty(s)))
	{
		s = s.substring(1, s.length);
		pos = whiteSpace.indexOf(s.charAt(0));
	}


	pos = whiteSpace.indexOf(s.charAt(s.length - 1));

	// retira os espaços em branco do final da string
	while ((pos > -1) && (! isEmpty(s)))
	{
		s = s.substring(0, s.length - 1);
		pos = whiteSpace.indexOf(s.charAt(s.length - 1));
	}

	return s;
}

// Verifica se s contém o comprimento mínimo esperado
// min é um inteiro que contém o comprimento mínimo exigido
function checkMinLength(s, min)
{
	if (s.length < parseInt(min)) return false;
	else return true;
}

// Retorna verdadeiro se o caracter c é um dígito
// (0 .. 9)
function isDigit(c)
{
	return ((c >= "0") && (c <= "9"))
}

// Verifica se s é um inteiro
function isInteger(s)
{   
	// Procura pelos caracteres da string um por um
	// até encontrar um caracter não numérico
	// Quando encontrar, retornar false
	// Se não encontrar, retornar true

	for (var i = 0; i < s.length; i++)
	{   
		// Verifica se o caracter corrente é um número
		var c = s.charAt(i);

		if (!isDigit(c)) return false;
	}

	// Todos os caracteres são numéricos.
	return true;
}

// Verifica se s contém um email válido
function isMail(s)
{
	var at;	// posição da arroba em s

	at = s.indexOf('@');

	if ((at < 1) || (at == (s.length - 1))) return false;

	return true;
}

// Retorna o número de dias do mês de fevereiro
function daysInFebruary(year)
{
	// Fevereiro tem 29 dias em qualquer ano divisível por 4
	// exceto para anos centenários que não são divisíveis por 400
	return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

// isDate retorna true se os argumentos year, month e day formam um data válida
function isDate(day, month, year)
{
	var day = parseFloat(day);
	var month = parseFloat(month);
	var year = parseFloat(year);

	switch (month)
	{
		case 4  :
		case 6  : 
		case 9  :
		case 11 :
			// verifica se day é maior do que 30
			if (day > 30) return false;
		
		case 2  :
			// verifica o mês de fevereiro
			if (day > daysInFebruary(year)) return false;
	}

	return true;
}

// Instancia uma data
function createDate(date)
{
	var day = parseFloat(date.substr(0, 2));
	var month = parseFloat(date.substr(2, 2));
	var year = parseFloat(date.substr(4, 4));

	return (new Date(year, month - 1, day));
}

// Valida o valor passado como parâmetro
function validate(s, required, min, typeS)
{
	// Verifica se a string passada como parâmetro está vazia
	if (isEmpty(trim(s)))
		if (required) return false;
		else return true;

	// Verifica o comprimento mínimo de s
	if (! checkMinLength(s, min)) return false;

	// Verifica o tipo de s e chama a função correspondente para validá-lo
	switch (typeS)
	{
		case TYPEINTEGER :
			if (! isInteger(s)) return false;
			break;
		case TYPEDATE :
			var day = s.substr(0, 2);
			var month = s.substr(2, 2);
			var year = s.substr(4, 4);

			if (! isDate(day, month, year)) return false;
			break;
		case TYPESTRING : 
			return true;
		case TYPEMAIL :
			if (! isMail(s)) return false;
	}

	return true;	// s foi validado como correto
}

// Esta função toma as devidas providências quando um campo de formulário não está correto
function action(field, message) 
{
	window.alert(message);
	field.value = "";
	field.focus();
}

// Esta Funcao muda o tab por enter e nao vai direto ao botao enviar                
function handleEnter (field, event) 
{
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		if (keyCode == 13) {
			var i;
			for (i = 0; i < field.form.elements.length; i++)
				if (field == field.form.elements[i])
					break;
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		} 
		else
		return true;
}      

//FORMATAR DATA
	function formatar(src, mask) {
		var i = src.value.length;
		var saida = mask.substring(i,i+1);
		var ascii = event.keyCode;
		if (saida == "A") {
			if ((ascii >=97) && (ascii <= 122)) { event.keyCode -= 32; }
			else { event.keyCode = 0; }
		} else if (saida == "0") {
			if ((ascii >= 48) && (ascii <= 57)) { return }
			else { event.keyCode = 0 }
		} else if (saida == "#") {
			return;
		} else {
			src.value += saida;
			i += 1
			saida = mask.substring(i,i+1);
			if (saida == "A") {
				if ((ascii >=97) && (ascii <= 122)) { event.keyCode -= 32; }
				else { event.keyCode = 0; }
			} else if (saida == "0") {
				if ((ascii >= 48) && (ascii <= 57)) { return }
				else { event.keyCode = 0 }
			} else { return; }
		}
	}
	
function check_date(field){
var checkstr = "0123456789";
var DateField = field;
var Datevalue = "";
var DateTemp = "";
var seperator = "/";
var day;
var month;
var year;
var leap = 0;
var err = 0;
var i;
   err = 0;
   DateValue = DateField.value;
   /* Deleta todos os caracteres exceto de 0 a 9. */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   
   if (DateValue.length == 6) {
      DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   
   day = DateValue.substr(0,2);
   if (day < 1) {
     err = 22;
   }
  
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }
   
   if ((day == 0) && (month == 0) && (year == 00)) {
      err = 0; day = ""; month = ""; year = ""; seperator = "";
   }

   if (err == 0) {
      DateField.value = day + seperator + month + seperator + year;
   }
   
   else {
      alert("Data digitada inválida ...");
      DateField.value = ""
   }
}

