// Constantes p/ os tipos de dado
var TIPO_STRING = "STRING";
var TIPO_INTEIRO = "INTEIRO";
var TIPO_FLOAT = "FLOAT";
var TIPO_DATE = "DATE";

/********** 	Funcoes auxiliares  	************/

// Validar a obrigatoriedade de um campo
function verificaObrigatoriedade(campo) {

    var valorStr = trim(campo.value);

    // verificacao de campo obrigatorio
    if ( (valorStr == "") && (campo.obrigatorio)) {
		alert("Não foi informado nenhum valor para " + campo.label);
		campo.focus();
		return false;
    }

    return true;
}

// Funcao auxiliar para campos numericos
// -> validar valor maximo e minimo
function validaMaximoMinimo(campo) {

	var valor = trim(campo.value);

    // verificar valor minimio e valor maximo
    if (valor < campo.valorMinimo) {
        alert("O valor para " + campo.label + " não pode ser menor do que " + campo.valorMinimo);
        campo.focus();
        return false;
    }

	if (valor > campo.valorMaximo) {
        alert("O valor para " + campo.label + " não pode ser maior do que " + campo.valorMaximo);
        campo.focus();
        return false;
	}

	return true;
}


// Validar um campo STRING
function validaString() {

    var valorStr = trim(this.value);
	var campoValido = true;

	// verificar Obrigatoriedade do campo
	campoValido = verificaObrigatoriedade(this);

	if (! campoValido) {
		return false;
	}

	if (valorStr != "") {
	    // verificacao de tamanho
    	if (valorStr.length > this.tamanhoMaximo) {
        	alert("Informação do campo " + this.label + " maior do que o suportado!");
	        this.focus();
    	    return false;
	    }
	}

    return true;
}


// Validar um campo INTEIRO
function validaInteiro() {

    var valorStr = trim(this.value);
	var campoValido = true;

	// verificar Obrigatoriedade do campo
	campoValido = verificaObrigatoriedade(this);

	if (! campoValido) {
		return false;
	}

	if (valorStr != "") {

	    // verificar se a string e' um inteiro valido
    	if (! isInteger(valorStr) ) {
        	alert("O valor informado para " + this.label + " não é um número inteiro!");
	        this.focus();
    	    return false;
	    }

		campoValido = validaMaximoMinimo(this);
	}

    return campoValido;
}

// Validar um campo FLOAT
function validaFloat() {

    var valorStr = trim(this.value);
	var campoValido = true;

	// verificar Obrigatoriedade do campo
	campoValido = verificaObrigatoriedade(this);

	if (! campoValido) {
		return false;
	}

	if (valorStr != "") {

	    // verificar se a string e' um float valido
    	if (! isFloat(valorStr) ) {
        	alert("O valor informado para " + this.label + " não é um número!");
	        this.focus();
    	    return false;
	    }

		campoValido = validaMaximoMinimo(this);
	}

    return campoValido;
}

// Validação de um campo de data hora.
// O campo formato deve formecer o formato da data.
// Ver DateTimeValidation.js para maiores informações sobre o formato.
function validaDateTime() {
  var valorStr = trim(this.value);
  var campoValido = true;

  // verificar Obrigatoriedade do campo
  campoValido = verificaObrigatoriedade(this);
  if (! campoValido) {
    return false;
  }

  var myObj = buildDate(valorStr,this.formato);
  if (typeof myObj == "object") {
    //Temos um objeto do tipo data, logo data é válida
    return true;
  }
  else {
    // Temos um erro.
    alert("O valor informado para " + this.label + " não é uma data válida! \n" + myObj);
    this.focus();
    return false;
  }
}

// Validar um campo DATE
// mascara: DD/MM/YYYY
function validaDate() {

    var valorStr = trim(this.value);
    var mensagemErro;
	var campoValido = true;

	// verificar Obrigatoriedade do campo
	campoValido = verificaObrigatoriedade(this);

	if (! campoValido) {
		return false;
	}

	if (valorStr != "") {

	    // verificar se a string e' uma data valida
		mensagemErro = isValidDate(valorStr);

	    if (mensagemErro != null) {
    	    alert("O valor informado para " + this.label + " não é uma data válida! \n" + mensagemErro);
        	this.focus();
	        return false;
	    }
	}

    return true;
}

/**
 * Validar os campos de um formulario
 * Parametro campos: array de campos (input) a serem validados
 * -> Caso algum campo tenha um valor invalido, uma mensagem e'
 * apresentada para o usuario e o campo recebe o foco
 * -> Deve-se acrescentar em cada campo os atributos tipo, label e obrigatorio
 * -> Para campos String deve-se adicionar mais o campo tamanhoMaximo
 * -> Para campos Inteiro e Float deve-se adicionar mais os campos valorMaximo e valorMinimo
*/
function validaCampos(campos) {

	var campoValido = true;
	var i = 0;

	while ( (i < campos.length) && (campoValido) ) {
		campoValido = campos[i].valida();
		i++;
	}
	return campoValido;
}


