//CREATED BY CHIQUITTO <GASPARCHIQUITTO@YAHOO.COM.BR>

var Idioma_noCampoVazio = "O campo <x> não pode estar vazio.";
var Idioma_onlyNumber = "O campo <x> tem que ser somente números.";
var Idioma_notNumber = "O campo <x> não pode conter números.";
var Idioma_mailIsValid = "O campo <x> tem que ser um email valido.";
var Idioma_numberBetween = "O campo <x> tem que ser somente números entre <nb1> e <nb2>.";
var Idioma_isCorrect = "Preencha o campo <x> corretamente.";
var Idioma_isEqual = "O valor do campo <x1> tem que ser igual ao do campo <x2>.";
var Idioma_isDiferent = "O valor do campo <x1> tem que ser diferente ao do campo <x2>.";

//#######################################################################################################################################
//############################################COMEÇA FUNCOES DE VALIDACAO DE FORMULARIO##################################################
//#######################################################################################################################################
function valida_form(){
	var argPorCampo=7;//altere somente se for alterar o script abaixo
		//primeiro argumento:
			//é o nome do campo
			//ele tem que ser o nome de um campo do formulario
			//obs.: nao pode ser vazio, se for vazio retornará uma mensagem de erro, parando a execuçao do script
		//segundo argumento
			//é o nome do campo que aparecerá para o usuario na mensagem de erro gerada
			//obs.: nao pode ser vazio, se for vazio retornará uma mensagem de erro, parando a execuçao do script
		//terceiro argumento:
			//ve se o campo pode ser vazio
			//ele pode ser: true (se o campo pode ser vazio), false (se o campo não pode ser vazio)
			//obs.: se ele for vazio, altomaticamnete o valor dele será true
		//quarto argumento:
			//ve se o formato do valor do campo é valido
			//ele pode ser: isNan (somente numeros), isStr (não pode conter números), str (qualquer coisa), isMail (se é email), ninNanX:Y(somente numeros entre X e Y), isFunctionFUNCTION (chama a funcao FUNCTION, não use () no final da funcao, e a funcao tem que retornar true se estiver correta)
			//obs.: se ele for vazio, altomaticamnete o valor dele será str
		//quinto argumento:
			//fala se o valor do campo do argumento 1 tem que ser igual ou diferente do campo que esta contido no proximo argumento
			//ele pode ser: true (tem que ser igual), false (tem que ser diferente), default (pode ser igual ou diferente)
			//obs.: se ele for vazio, altomaticamnete o valor dele será default
		//sexto argumento:
			//é o nome do campo que vai ser validado em relaçao ao argumento 1 (leia mais sobre o argumento anterior)
			//ele tem que ser o nome de um campo do formulario
			//obs.: se o valor do argumento anterior ser vazio ou default, este argumento poderá ser vazio, caso contrario ele deve ser preenchido
		//setimo argumento
			//é o nome do campo do quinto argumento que aparecerá para o usuario na mensagem de erro gerada
			//obs.: nao pode ser vazio, se for vazio retornará uma mensagem de erro, parando a execuçao do script
			
	var msg="";
	var args=valida_form.arguments;
	var maximoFor=((args.length-1)/argPorCampo);
	var form=args[0];
	
	if(maximoFor != parseInt(maximoFor)){//verifica se existe algum erro com os argumentos passados para a funcao
			alert("PARA O ADMINISTRADOR: Erro com os argumentos passados para a função de validação do formulário");
			return false;
	}
	else{
		for(r=0; r<maximoFor; r++){
			tc=parseInt((r*argPorCampo)+1);
			if(args[tc]=="" || args[tc+1]==""){//verifica de outra forma se esta tudo certo com os argumentos passados
				alert("PARA O ADMINISTRADOR: Erro com os argumentos passados para a função de validação do formulário");
				return false;
			}
			validado=new validaArgumentsForValida_form(args[0], args[tc], args[tc+1], args[tc+2], args[tc+3], args[tc+4], args[tc+5], args[tc+6]);
			if(validado.msg!=""){
				alert(validado.msg);
				return false;
			}
			campo=validado.campo;
			exi=validado.exi;
			psv=validado.psv;
			formato=validado.formato;
			igDi=validado.igDi;
			campo2=validado.campo2;
			exi2=validado.exi2;
			if(!campo2){
				msg+=valTipos(campo, exi, psv, formato, igDi, "", "");
			}
			else if(campo2){
				msg+=valTipos(campo, exi, psv, formato, igDi, pegaValor(campo2), exi2);
			}
		}
	}
	if(msg!=""){
		alert(msg);
	}
	return (msg=="");
}

function validaArgumentsForValida_form(form, _tc, _tc1, _tc2, _tc3, _tc4, _tc5, _tc6){
	this.msg="";
	this.campo=eval("form."+_tc);
	//if(!this.campo){//guambiarra aqui
	//	this.msg="PARA O ADMINISTRADOR: Erro com os argumentos passados para a função de validação do formulário.\nCampo "+_tc+" indefinido";
	//}
	this.exi=String(_tc1).toUpperCase();
	if(this.exi==""){
		this.exi=String(_tc).toUpperCase();
	}
	this.psv=String(_tc2);
	this.formato=String(_tc3);
	if(this.formato!="isNan" && this.formato!="isStr" && this.formato!="isMail" && this.formato.substring(0, 6)!="ninNan" && this.formato.substr(0,10)!="isFunction"){
		this.formato="str";
	}
	this.igDi=String(_tc4);
	if(this.igDi!="true" && this.igDi!="false"){
		this.idDi="default";
	}
	this.strCampo=String(_tc5);
	if((this.igDi=="true" || this.igDi=="false") && this.strCampo==""){
		this.msg="PARA O ADMINISTRADOR: Erro com os argumentos passados para a função de validação do formulário.\nArgumento '"+String(_tc5)+"' incorreto";
	}
	if(this.strCampo!=""){
		this.campo2=eval("form."+this.strCampo);
		if(!this.campo2){
			this.msg="PARA O ADMINISTRADOR: Erro com os argumentos passados para a função de validação do formulário.\nArgumento '"+String(_tc5)+"' incorreto";
		}
	}
	this.exi2=String(_tc6).toUpperCase();
	if(this.exi2==""){
		this.exi2=String(_tc5).toUpperCase();
	}
}
function pegaValor(campo){//retornará um array
	if(String(campo).substring(0,7)!="[object"){
		return false;
	}
	x=0;
	array = new Array();
	
	if(campo.type){
		switch(campo.type){
			case "select-one"://se ele entrar aqui, ele caira no case de baixo porque não tem break
			case "select-multiple":
				for(w=0; w<campo.length; w++){
					if(campo[w].selected){
						array[x++]=campo[w].value;
					}
				}
				break;
			case "checkbox":
				if(campo.checked==true){
					array[0] = campo.value;
				}
				break;
			case "textarea"://se ele entrar aqui, ele caira no case de baixo porque não tem break
			case "text"://se ele entrar aqui, ele caira no case de baixo porque não tem break
			case "password"://se ele entrar aqui, ele caira no case de baixo porque não tem break
			case "file"://se ele entrar aqui, ele caira no case de baixo porque não tem break
			case "hidden":
				array[0] = campo.value;
				break;
			case "radio":
				if (campo.checked) array[0] = campo.value;
				break;
		}
	}
	
	if(campo.length){
		for(q=0; q<campo.length; q++){
			if(campo[q].checked){
				array[0]=campo[q].value;
			}
		}
	}
	
	if(array.length==0){
		array[0]="";
	}
	return array;
}
function valTipos(campo, exi, psv, formato, igDi, valor2, campo2Name){
	msg = "";
	valorArray = pegaValor(campo);
	for(e=0; e<valorArray.length; e++){
		valor = valorArray[e];
		if(psv=="false" && valor==""){
			msg += Idioma_noCampoVazio.replace("<x>", exi) + "\n";
		}
		else{
			if(formato=="isNan" && isNaN(valor)){
				msg += Idioma_onlyNumber.replace("<x>", exi) + "\n";
			}
			if(formato=="isStr" && !isNaN(valor)){
				msg += Idioma_notNumber.replace("<x>", exi) + "\n";
			}
			if(formato=="isMail"){
				if(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)==false){
					msg += Idioma_mailIsValid.replace("<x>", exi) + "\n";
				}
			}
			if(formato.substr(0, 6)=="ninNan"){
				number=formato.substr(6);
				num=number.split(":");
				if(isNaN(valor)){
					msg += Idioma_numberBetween.replace("<x>", exi).replace("<nb1>", num[0]).replace("<nb2>", num[1]) + "\n";
				}
				else if(valor < parseInt(num[0]) || valor > parseInt(num[1])){
					msg += Idioma_numberBetween.replace("<x>", exi).replace("<nb1>", num[0]).replace("<nb2>", num[1]) + "\n";
				}
			}
			if(formato.substr(0,10)=="isFunction"){
				if(eval(formato.substr(10)+"('"+ valor +"')")!=true){
					msg += Idioma_isCorrect.replace("<x>", exi) + "\n";
				}
			}
			if(igDi=="true" || igDi=="false"){
				if(igDi=="true" && valor!=valor2){
					msg += Idioma_isEqual.replace("<x1>", exi).replace("<x2>", campo2Name.toUpperCase()) + "\n";
				}
				else if(igDi=="false" && valor==valor2){
					msg += Idioma_isDiferent.replace("<x1>", exi).replace("<x2>", campo2Name.toUpperCase()) + "\n";
				}
			}
		}
		if(msg!=""){
			//changeColor(campo, 2);
			return msg;
		}
	}
	//if(msg=="") changeColor(campo, 1);
	return msg;
}
function changeColor(input, type){
	if(input.disabled==false)
		if(type==1)
			with(input.style){
				backgroundColor = "#FFFFFF";
				border = "1px solid #A5ACB2";
				fontSize = "11px";
				height = "15px";
			}
		else
			with(input.style){
				backgroundColor = "#9FFFCF";
				border = "1px solid #A5ACB2";
				fontSize = "11px";
				height = "20px";
			}
}
//#######################################################################################################################################
//############################################TERMINA FUNCOES DE VALIDACAO DE FORMULARIO#################################################
//#######################################################################################################################################
