// Variável utilizado para armazenar as mensagens de erros da validação
var strErro;


//Função que exibe a String de Erro
function showMessage(){
    strErro = "ˆÈ‰º‚ÌƒGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½B \n\n" + strErro;
	alert(strErro);
}


//Valida o formulário, se ok o submete
function validaForm(theForm){
    var strCommand;

	strErro = "";

	for (i=0;i<theForm.length;i++) {

 		if (theForm[i].name.substring(0,11) == "validation_"){
			strCommand = theForm[i].value;
 			eval(strCommand);
		}

	}

	// se não houve erros
	if (strErro == "") {
		theForm.submit();
	}
	else{
		// dispara a exibição da mensagem de erro
		showMessage();
    }
}


//Valida o formulário, se não houver erros retorna true, caso contrário retorna false
function validaFormSubmit(theForm){
	var strCommand;

	strErro = "";

    for (i=0;i<theForm.length;i++) {

    	if (theForm[i].name.substring(0,11) == "validation_"){
			strCommand = theForm[i].value;
 			eval(strCommand);
		}

    }

	// se não houve erros
	if (strErro == "") {
		return true;
	}
	else{
		showMessage();
		return false;
	}
}

/*
Valida um input do formulário verificando se a string está vazia ou é obrigatória
obrigatorio   -> Boolean
              -> True se o preenchimento do campo é obrigatório.
              -> False se o preenchimento do campo não é obrigatório.
mensagem -> String com mensagem de erro caso o campo não seja válido.
*/
function stringIsValid(formInput, obrigatorio, mensagem){
	var valor 	= formInput.value;
	var resp 	= true;

	// verifica se a string não está vazia
	if (obrigatorio && valor.length < 1) resp = false;

	if (!resp) strErro += mensagem + "\n";
}


/*
Valida um input do formulário verificando se a string é um email.
formInput -> Objeto input com e-mail.
		    -> Possui formato "xxxx@xxxx.xxxx"
obrigatorio -> Boolean
			  -> True se o preenchimento do campo é obrigatório.
			  -> False se o preenchimento do campo não é obrigatório.
mensagem -> String com mensagem de erro
*/
function emailIsValid(formInput,obrigatorio,mensagem){

	var resp = true;
	var emailPatern = /^[a-zA-Z0-9._-]+\@\w+\.\w+/
	var formatOk = formInput.value.match(emailPatern);

	// se for obrigatório e não estiver preenchido
	if (obrigatorio && formInput.value.length < 1)					resp = false;

	// se formato não estiver correto
    if ((resp && formInput.value.length > 0) && formatOk == null)	resp = false;

	if (!resp) strErro += mensagem + "\n";

}

/*
Valida um input do formulário tipo password, verificando seu tamanho mínimo e máximo.
formInput -> Objeto do formulário.
tamMin -> Tamanho mínimo do objeto do formulário.
tamMax -> Tamanho máximo do objeto do formulário.
mensagem -> String com mensagem de erro.
*/
function passwordIsValid(formInput,tamMin,tamMax,mensagem) {

    var resp = true;
    var tam = formInput.value.length;

    if (tam < tamMin) {
        resp = false;
    }
    if (tam > tamMax) {
        resp = false;
    }

    if (!resp) strErro += mensagem + "\n";
}

/*
Valida dois inputs do fomulário, senha e confirma senha, verificando a consistência entre os dois
formInputA -> Objeto input com password.
formInputB -> Objeto input com password.
caseSensitive -> Boolean
			  -> True se há diferenciação entre letras maiúsculas e minúsculas.
			  -> False se não há diferenciação entre letras maiúsculas e minúsculas.
mensagem -> String com mensagem de erro.
*/
function confirmPasswordIsValid(formInputA,formInputB,caseSensitive,mensagem){

	var resp = true;

	// se for Case Sensitive e o password estiver diferente
	if (caseSensitive && formInputA.value.toUpperCase() != formInputB.value.toUpperCase()) 	resp = false;

	// se não for Case Sensitive e o password estiver diferente
	else if (formInputA.value != formInputB.value)											resp = false;

	if (!resp) strErro += mensagem + "\n";
}

/*
Valida as seleções feitas em um formulário.

formInput -> Objeto input do formulário.
qtdOpcoesMinimo -> Inteiro que indica a quantidade mínima de seleções que devem ser feitas.
qtdOpcoesMaximo -> Inteiro que indica a quantidade máxima de seleções que podem ser feitas.
OpcaoInvalida -> Boolean
              -> True se a opção é inválida.
			  -> False se a opção é válida.
mensagem -> String com mensagem de erro a ser utilizada caso o número de seleções nao obedeça
			a faixa determinada e a seleção nao seja uma opção inválida.
*/

function selectIsValid(formInput,qtdOpcoesMinimo,qtdOpcoesMaximo,opcaoInvalida,mensagem){
	// contador de opções selecionadas
	var selecionadas = 0;
    var resp = true;
    var qtdOpcoes = formInput.length;

    for (j=0;j<qtdOpcoes;j++) {
        //se está selecionado
	    if (formInput[j].selected){
	         //se não é uma opção inválida incrementa o contador
	        if (formInput[j].value != opcaoInvalida) {
	            selecionadas++;
	        }
	        //senão sai do loop
	        else {
	            resp = false;
	            j = qtdOpcoes + 1;
	        }
	    }
	}
    // verifica se as seleções estão dentro da quantidade exigida e se a opcao escolhida é válida

	if ((selecionadas < qtdOpcoesMinimo || selecionadas > qtdOpcoesMaximo) || !resp) {
	    strErro += mensagem + "\n";
	}
}

/*
Verifica se o objeto é um número válido.

formInput -> Objeto input do formulário.
obrigatorio -> -> Boolean
              -> True se é campo obrigatório.
			  -> False se não é campo obrigatório.
faixaInicial -> Inteiro que indica o menor número aceito.
faixaFinal -> Inteiro que indica o maior número aceito.
aceitaDecimal -> Boolean
              -> True se o número é aceita Decimal.
			  -> False se o número não aceita Decimal.
mensagem -> String com mensagem de erro a ser utilizada caso o número esteja invalido.
*/
function numberIsValid(formInput, obrigatorio, faixaInicial, faixaFinal, aceitaDecimal, mensagem){

    var valor 		= formInput.value;
	var resp		= true;
	var intPatern 	= /^(\d{1,10})$/;
	var floatPatern	= /^(\d{1,8})(\.\d{1,4})?$/;
	var formatOk;

	// se for obrigatório e não estiver preenchido
	if (obrigatorio && valor.length < 1) resp = false;

	if (resp && valor.length > 0){

	    // se o número tem formato decimal
	    if (aceitaDecimal){
		    formatOk = formInput.value.match(floatPatern);
	    }
	    else{
	        formatOk = formInput.value.match(intPatern);
	    }

	    // se formato não está correto
	    if (formatOk == null){
	        resp = false;
	    }
        else{
	        // se está entre a faixa determinada
	        if ((faixaInicial != faixaFinal) && (valor < faixaInicial || valor > faixaFinal)) {
	            resp = false;
		    }
	    }
	}
	if (!resp){
	    strErro += mensagem + "\n";
    }
}

/*
Verifica se o objeto radio esta checado.

formInput -> Objeto input do formulário.
mensagem -> String com mensagem de erro a ser utilizada caso o radio button não esteja checado.
*/

function radioIsValid (theForm, mensagem) {
    var resp = false;
    var qtd = theForm.length

    for (j=0;j<qtd;j++) {
        if (theForm[j].checked) {
            resp = true;
            break;
        }
    }
    if (!resp) {
        strErro += mensagem + "\n";
    }
}                    