/** Validacao de formularios.
Requer a expressao onSubmit="validaForm('nomeCampo','tituloCampo','requerido','tipo','limites','nomeform'); return document.OK;" na tag form e necessariamente algum nome.
nomeCampo - nome colocado na tag input
tituloCampo - nome exibido para o usuario
requerido - R para requerido ou N para nao requerido
tipo - T/E/D/N/C/J/P - onde
					T - Texto
					E - Email valido
					D - Data valida
					N - Numero valido
					C - CPF valido
					J - CNPJ valido
					P - CPF ou CNPJ validos
limites - limite valido entre "numero ou data 1:numero ou data 2"
nomeform - nome do formulário (somente uma vez no final dos arqgumentos)
Obs: DATA SEMPRE NO FORMATO DD/MM/AAAA */
function validaForm () {
	var j = 0;
	var erro = '';
	document.OK = false;
	args = validaForm.arguments;
	formname = args[args.length-1];
	//cada campo a ser validado tem 5 parametros
	for (i=0; i<(args.length-1); i+=5) {
		campo = args[i+1];
		campoform = eval('document.' + formname + '[' + j + ']');
		valor = campoform.value;
		tipoCampo = campoform.type;
		//verifica se o nome do campo e igual ao nome que veio como parametro
		if (campoform.name == args[i]) {
			//se for radio oui checkbox vai para a funcao que verifica se tem algum selecionado
			if ((tipoCampo == 'radio') || (tipoCampo == 'checkbox')) {
				if (!verificarRC(campoform,formname)) {
					if (args[i+2] == 'R') { //campo radio ou check requerido
						erro = erro + campo + ' é requerido\n';
					}
				}
			} else if (args[i+2] == 'R') { //campo qualquer requerido
				if (valor == '') {
					erro = erro + '"' + campo + '"' + ' é requerido\n';
				}
			}
			if (args[i+3] == 'N') { //numero
				if (valor != '') {
					if (!testeNumero(valor)) {
						erro = erro + '"' + campo + '"' + ' requer um número\n';
					} else {
						if (args[i+4] != '') { //se tem variacao
							range = args[i+4];
							separador = range.indexOf(':');
							min = range.substring(0,separador);
							max = range.substring(separador+1);
							if (num < min || max < num) erro = erro + '"' + campo + '"' + ' requer um número entre ' + min + ' e ' + max + '\n';
						}
					}
				}
			} else if (args[i+3] == 'D') { //data
				if (valor != '') {
					//separa dia, mes e ano
					separador = valor.indexOf('/');
					dia = valor.substring(0,separador);
					mesano = valor.substring(separador+1);
					separador = mesano.indexOf('/');
					mes = mesano.substring(0,separador);
					ano = mesano.substring(separador+1);

					//testa se sao numeros e datas validas
					if (!testeNumero(dia)) {
						erro = erro + '"' + campo + '"' + ' requer uma data válida\n';
					} else if (!testeNumero(mes)) {
						erro = erro + '"' + campo + '"' + ' requer uma data válida\n';
					} else if (!testeNumero(ano)) {
						erro = erro + '"' + campo + '"' + ' requer uma data válida\n';
					} else if (dia < 1 || dia > 31) {
						erro = erro + '"' + campo + '"' + ' requer uma data válida\n';
					} else if (((mes == 4 || mes == 6 || mes == 9 || mes == 11) && dia > 30) || (mes < 1 || mes > 12)) {
						erro = erro + '"' + campo + '"' + '" requer uma data válida\n';
					} else if (mes == 2) {
						if ((ano % 4) == 0) {
							if (dia > 29) {
								erro = erro + '"' + campo + '"' + ' requer uma data válida\n';
							}
						} else if (dia > 28) {
							erro = erro + '"' + campo + '"' + ' requer uma data válida\n';
						}
					} 
					if (args[i+4] != '') { //variacao da data (um saco)
						range = args[i+4];
						separador = range.indexOf(':');
						datamin = range.substring(0,separador);
						datamax = range.substring(separador+1);

						separador = datamin.indexOf('/');
						diamin = datamin.substring(0,separador);
						mesano = datamin.substring(separador+1);
						separador = mesano.indexOf('/');
						mesmin = mesano.substring(0,separador);
						anomin = mesano.substring(separador+1);

						separador = datamax.indexOf('/');
						diamax = datamax.substring(0,separador);
						mesano = datamax.substring(separador+1);
						separador = mesano.indexOf('/');
						mesmax = mesano.substring(0,separador);
						anomax = mesano.substring(separador+1);

						//ver se data esta no intervalo
						if (ano < anomin || anomax < ano) {
							erro = erro + '"' + campo + '"' + ' requer uma data entre ' + diamin + '/' + mesmin + '/' + anomin + ' e ' + diamax + '/' + mesmax + '/' + anomax + '\n';
						} else if ((mes < mesmin && ano == anomin) || (mes > mesmax && ano == anomax)) {
							erro = erro + '"' + campo + '"' + ' requer uma data entre ' + diamin + '/' + mesmin + '/' + anomin + ' e ' + diamax + '/' + mesmax + '/' + anomax + '\n';
						} else if ((dia < diamin && (mes == mesmin || mes < mesmin) && (ano == anomin || ano < anomin)) || (dia > diamax && (mes == mesmax || mes > mesmax) && (ano == anomax || ano > anomax))) {
							erro = erro + '"' + campo + '"' + ' requer uma data entre ' + diamin + '/' + mesmin + '/' + anomin + ' e ' + diamax + '/' + mesmax + '/' + anomax + '\n';
						}

					}
				}
			} else if (args[i+3] == 'E') { //email
				if (valor != '') {
					caracteres = 'á|é|í|ó|ú|à|è|ì|ò|ù|â|ê|î|ô|û|ä|ë|ï|ö|ü|ã|õ|ç|ñ| |;|/|?';
					valorLCase = valor.toLowerCase();
					tex = '';
					for (x=0;x<caracteres.split('|').length;x++) {
						if (valorLCase.indexOf(caracteres.split('|')[x]) >= 0) {
							tex = 'tem';
						}
					}
					arroba = valor.indexOf('@');
					if (tex != '') {
						erro = erro + '"' + campo + '"' + ' requer um email válido\n';
					} else if ((arroba == -1) || (arroba == 0)) {
						erro = erro + '"' + campo + '"' + ' requer um email válido\n';
					} else {
						provedor = valor.substring(arroba+1);
						if (provedor.indexOf('@') > -1) {
							erro = erro + '"' + campo + '"' + ' requer um email válido\n';
						}
						ponto = provedor.indexOf('.');
						if ((ponto == -1) || (ponto == 0)) {
							erro = erro + '"' + campo + '"' + ' requer um email válido\n';
						} else {
							com = provedor.substring(ponto+1);
							if (com == '') {
								erro = erro + '"' + campo + '"' + ' requer um email válido\n';
							}
						}
					}
				}
			} else if (args[i+3] == 'C') { //CPF
				if (valor != '') {
					if (!verificarCPF(valor)) {
						erro = erro + '"' + campo + '"' + ' requer um número de CPF válido\n';
					}
				}
			} else if (args[i+3] == 'J') { //CNPJ
				if (valor != '') {
					if (!verificarCGC(valor)) {
						erro = erro + '"' + campo + '"' + ' requer um número de CNPJ válido\n';
					}
				}
			} else if (args[i+3] == 'P') { //CPF OU CNPJ
				if (valor != '') {
					if ((!verificarCGC(valor)) &&  (!verificarCPF(valor))) {
						erro = erro + '"' + campo + '"' + ' requer um número de CPF ou CNPJ válido\n';
					}
				}
			}
		} else {
			//isso significa que o campo do formulario nao tem parametros para validacao
			i = i - 5;
		}
		j++;
	}
	if (erro != '') {
		//se tem erro
		alert(erro);
	} else {
		document.OK = true;
	}
}

//testa se e numero
function testeNumero (val) {
	document.enumero = false;
	if (val != '') {
		num = parseFloat(val);
		if (val == num) {
			document.enumero = true;
		}
	}
	return document.enumero;
}

//verifica se tem alguma coisa selecionada
function verificarRC (campo,formname) {
	nome = campo.name;
	check = (eval('document.' + formname + '.' + nome));
	tamanho = (check.length);
    for (k=0; k < tamanho; k++) {
		if (check[k].checked) {
			return true;
		} 
	}
	return false;
}

function verificarCPF (valor) {
	if ((valor.length != 11) || (valor == '11111111111') || (valor == '22222222222') || (valor == '33333333333') || (valor == '44444444444') || (valor == '55555555555') || (valor == '66666666666') || (valor == '77777777777') || (valor == '88888888888') || (valor == '99999999999') || (valor == '00000000000')) {
		return false;
	} else {
		WDIGI = 0;
		WPESO = 10;
		for (casa = 0; casa < 9; casa++) {
			WDIGI = WDIGI + eval(parseInt(valor.substring(casa,casa+1))) * WPESO;
			WPESO = WPESO - 1;
			if (WPESO == 1) {
				WPESO = 9;
			}
		}
		WDIGI = WDIGI % 11;
		if (WDIGI < 2) {
			WDIGI = 11;
		}
		WDIGI = 11 - WDIGI;
		if (parseInt(valor.substring(9,10)) != WDIGI) {
			return false;
		}
		WDIGI = 0;
		WPESO = 11;
		for (casa = 0; casa < 10; casa++) {
			WDIGI = WDIGI + eval(parseInt(valor.substring(casa,casa+1))) * WPESO;
			WPESO = WPESO - 1;
			if (WPESO == 1) {
				WPESO = 9;
			}
		}
		WDIGI = WDIGI % 11;
		if (WDIGI < 2) {
			WDIGI = 11;
		}
		WDIGI = 11 - WDIGI;
		if (parseInt(valor.substring(10,11)) != WDIGI) {
			return false;
		}
	}
	return true;
}

function verificarCGC (valor) {
	WDIGI = 0;
	WPESO = 5;
	for (casa = 0; casa < 12; casa++) {
		WDIGI = WDIGI + eval(parseInt(valor.substring(casa,casa+1))) * WPESO;
		WPESO = WPESO - 1;
		if (WPESO == 1) {
			WPESO = 9;
		}
	}
	WDIGI = WDIGI % 11;
	if (WDIGI < 2) {
		WDIGI = 11;
	}
	WDIGI = 11 - WDIGI;
	if (parseInt(valor.substring(12,13)) != WDIGI) {
		return false;
	}
	WDIGI = 0;
	WPESO = 6;
	for (casa = 0; casa < 13; casa++) {
		WDIGI = WDIGI + eval(parseInt(valor.substring(casa,casa+1))) * WPESO;
		WPESO = WPESO - 1;
		if (WPESO == 1) {
		    WPESO = 9;
		}
	}
	WDIGI = WDIGI % 11;
	if (WDIGI < 2) {
		WDIGI = 11;
	}
	WDIGI =11 - WDIGI;
	if (parseInt(valor.substring(13,14)) != WDIGI) {
		return false;
	}
return true;
}
/* Final Validacao de formularios.*/
