//CREATED BY CHIQUITTO <GASPARCHIQUITTO@YAHOO.COM.BR>

//#######################################################################################################################################
//############################################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.toString().substr(0,7)!="[object"){
				msg+=valTipos(campo, exi, psv, formato, igDi, "", "");
			}
			else if(campo2.toString().substr(0,7)=="[object"){
				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.toString().substr(0,7)!="[object"){
		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";
	}
	this.campo2 = new Object();
	if(this.strCampo!=""){
		this.campo2=eval("form."+this.strCampo);
		if(this.campo2.toString().substr(0,7)!="[object"){
			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(campo.toString().substr(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;
		}
	}
	else 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+="O campo "+exi+" não pode estar vazio.\n";
		}
		else if(psv=="false"|| valor!=""){
			if(formato=="isNan" && isNaN(valor)){//somente numeros
				msg+="O campo "+exi+" tem que ser somente números.\n";
			}
			if(formato=="isStr"){//nao pode ter numeros
				for(xFor=0; xFor<valor.length; xFor++){
					if(!isNaN(valor.substr(xFor,1))){
						msg+="O campo "+exi+" não pode conter números.\n";
						break;
					}
				}
			}
			if(formato=="isMail"){
				if(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)==false){
					msg+="O campo "+exi+" tem que ser um email valido.\n";
				}
			}
			if(formato.substr(0, 6)=="ninNan"){
				number=formato.substr(6);
				num=number.split(":");
				if(isNaN(valor)){
					msg+="O campo "+exi+" tem que ser somente números entre "+ num[0] +" e "+ num[1] +".\n";
				}
				else if(valor < parseInt(num[0]) || valor > parseInt(num[1])){
					msg+="O campo "+exi+" tem que ser somente números entre "+ num[0] +" e "+ num[1] +".\n";
				}
			}
			if(formato.substr(0,10)=="isFunction"){
				if(eval(formato.substr(10)+"('"+ valor +"')")!=true){
					msg+="Preencha o campo "+exi+" corretamente.\n";
				}
			}
			if(igDi=="true" || igDi=="false"){
				if(igDi=="true" && valor!=valor2){
					msg+="O valor do campo "+ exi +" tem que ser igual ao do campo "+ campo2Name.toUpperCase() +".\n";
				}
				else if(igDi=="false" && valor==valor2){
					msg+="O valor do campo "+ exi +" tem que ser diferente ao do campo "+ 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 = "15px";
			}
}
//#######################################################################################################################################
//############################################TERMINA FUNCOES DE VALIDACAO DE FORMULARIO#################################################
//#######################################################################################################################################