//Obs.: Em alguns objetos (select), o atributo "alt" não está sendo encontrado em firefox, neste caso usar o atributo "lang"
//TXT - Campo texto obrigatório (tanto para text como para textarea como para password)
//TX1 - Campo texto NÃO obrigatório, mas caso preenchido obriga preenchimento de outros campos text e textarea determinados, o número depois da identificação da validação(TX1) é a quantidade de campos a ser obrigatório o preenchimento, seguido dos respecticos nome dos campos separados por ponto e virgula (;).
//exemplo: alt="TX12;txt_nome;txt_endereco"
//TX2 - Campo texto NÃO obrigatório
//NU1 - Campo numérico obrigatório e válido
//NU2 - Campo numérico não obrigatório e válido
//CG1 - Campo CGC/CPF obrigatório e válido
//CG2 - Campo CGC/CPF não obrigatório e válido
//E@1 - Campo Email obrigatório e válido
//E@2 - Campo Email não obrigatório e válido
//DT1 - Campo Data obrigatório e válido     **** formado dd/mm/YYYY ****
//DT2 - Campo Data não obrigatório e válido **** formado dd/mm/YYYY ****
//SEL - Campo Select obrigatório
//LN1 = Campo link obrigatório e válido
//LN2 = Campo link não obrigatório e válido
//CP1 = Campo CEP obrigatório e válido		*** formato 00000-000 ***
//CP2 = Campo CEP não obrigatório e válido	*** formato 00000-000 ***
//OPT = Campo Radio obrigatório, o número depois do T descreve quantos options devem ser validados
//OPD = Campo Radio obrigatório, o número depois do D descreve quantos options devem ser validados, seguido do valor do campo option que deve obrigar o preenchimento dos campos text desejados, o nome dos campos text que devem ser preenchidos separados por ponto e vírgula (;) e por último a mensagem de alert.
//exemplo: alt="OPD2;S;txt_nome_pos;txt_instituicao_pos;txt_duracao_pos;txt_ano_pos;Indique se possue Pós-graduação."
function verifica(form){
	var envia = true;
	for (var i = 0;  i <= form.elements.length - 1; i++){
		if ((form.elements[i].alt != "" && form.elements[i].alt != undefined) || (form.elements[i].lang != "" && form.elements[i].lang != undefined)){
			alt = (form.elements[i].alt?form.elements[i].alt:form.elements[i].lang);
			tipo = alt.slice(0,3);
			msg = alt.slice(3,alt.length);
			//alert(form.elements[i].type);
			switch(form.elements[i].type){
				case "text":
					if (tipo == "TXT"){
						if (form.elements[i].value == ""){
							alert(msg)
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "TX1"){
						valor = msg.split(";");
						if (form.elements[i].value != ""){
							for (j=1; j <= valor[0]; j++){
								if(form[valor[j]].value == ""){
									alert(form[valor[j]].alt.substr(3));
									form[valor[j]].focus();
									return false;
								} 
							}
						}
					}
					if (tipo == "NU1"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
						else if (isNaN(form.elements[i].value)){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "NU2"){
						if (isNaN(form.elements[i].value)){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "CG1"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
						if (form.elements[i].value.length == 14){
							if (!verifica_cgc(form.elements[i].value)){
								alert(msg);
								form.elements[i].focus();
								return false;
							}
						}
						else {
							if (!verifica_cpf(form.elements[i].value)){
								alert(msg);
								form.elements[i].focus();
								return false;
							}
						}
					}
					if (tipo == "CG2"){
						if (form.elements[i].value != ""){
							if (form.elements[i].value.length == 14){
								if (!verifica_cgc(form.elements[i].value)){
									alert(msg);
									form.elements[i].focus();
									return false;
								}
							}
							else {
								if (!verifica_cpf(form.elements[i].value)){
									alert(msg);
									form.elements[i].focus();
									return false;
								}
							}
						}
					}
					if (tipo == "E@1"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
						if (!verifica_email(form.elements[i].value)){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "E@2"){
						if (form.elements[i].value != ""){
							if (!verifica_email(form.elements[i].value)){
								alert(msg);
								form.elements[i].focus();
								return false;
							}
						}
					}
					if (tipo == "DT1"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
						if (!verifica_data(form.elements[i].value)){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "DT2"){
						if (form.elements[i].value != ""){
							if (!verifica_data(form.elements[i].value)){
								alert(msg);
								form.elements[i].focus();
								return false;
							}
						}
					}
					if (tipo == "LN1"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
						var Exp1 = new RegExp("^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*$");
						if (!Exp1.test(form.Link.value)){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "LN2"){
						if (!form.elements[i].value == ""){
							var Exp1 = new RegExp("^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*$");
							if (! Exp1.test(form.elements[i].value)){
								alert(msg);
								form.elements[i].focus();
								return false;
							}
						}
					}
					if (tipo == "CP1"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
						if (!verifica_cep(form.elements[i].value)){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "CP2"){
						if (!form.elements[i].value == ""){
							if (!verifica_cep(form.elements[i].value)){
								alert(msg);
								form.elements[i].focus();
								return false;
							}
						}
					}
					break;
				case "textarea":
					if (tipo == "TXT"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					break;
				case "hidden":
					if (tipo == "TXT"){
						if (form.elements[i].value == ""){
							alert(msg);
							//form.elements[i].focus();
							return false;
						}
					}
					break;
				case "password":
					if (tipo == "TXT"){
						if (form.elements[i].value == ""){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					break;
				case "select-one":
					if (tipo == "SEL"){
						if (form.elements[i].selectedIndex == 0){
							alert(msg);
							form.elements[i].focus();
							return false;
						}
					}
					break;
				case "radio":
					if (tipo == "OPT"){
						qtd = msg.slice(0,1);
						controle = 0;
						for (j=0;j<qtd;j++){
							if (form.elements[i+j].checked == true){
								controle = 1;
							}
						}
						if (controle == 0){
							alert(msg.substring(1,msg.length));
							form.elements[i].focus();
							return false;
						}
					}
					if (tipo == "OPD"){
						valor = msg.split(";");
						controle = 0;
						for (j=0; j < valor[0]; j++){
							if (form.elements[i+j].checked == true){
								if(form.elements[i+j].value == valor[1]){
									for(x=2; x < valor.length - 1; x++){
										if(form[valor[x]].value == ""){
											alert(form[valor[x]].alt.substr(3));
											form[valor[x]].focus();
											return false;
										} 
									}
								}else{
									for(x=2; x < valor.length - 1; x++){
										form[valor[x]].value = "";
									}
								}
								controle = 1;
							}
						}
						if (controle == 0){
							alert(valor[valor.length-1]);
							form.elements[i].focus();
							return false;
						}
					}
					break;
				case "file":
					if (tipo == "TXT"){
						if (form.elements[i].value == ""){
							alert(msg)
							form.elements[i].focus();
							return false;
						}
					}
					break;
			}
		}
	}
	return true;
}










function verifica_cpf(str_cpf){
	x = 0;
	soma = 0;
	dig1 = 0;
	dig2 = 0;
	texto = "";
	str_cpf1 = "";
	len = str_cpf.length;
	x = len-1;
	for (var i=0;i<=len-3;i++) {
		y = str_cpf.substring(i,i+1);
		soma += y * x;
		x--;
		texto += y;
	}
	dig1 = 11 - (soma%11);
	if (dig1==10 || dig1==11){
		dig1=0;
	}
	str_cpf1 = str_cpf.substring(0,len-2) + dig1;
	x = 11;
	soma = 0;
	for (var i=0;i<=len-2;i++){
		soma += str_cpf1.substring(i,i+1) * x;
		x = x - 1;
	}
	dig2 = 11 - (soma%11);
	if (dig2==10 || dig2==11){
		dig2=0;
	}
	
	algUnico = true;
	for (i=1; i<11; i++){
		algUnico = algUnico && (str_cpf.charAt(i-1) == str_cpf.charAt(i));
	}
	if(algUnico){
		return false;
	}
	
	if ((dig1 + "" + dig2) == str_cpf.substring(len-2,len)){
		return true;
	}
	return false;
}

function verifica_cgc(x){
	str_num = "";
	if (x==""){
		return (false);
	}
	l = x.length;
	for (i=0;i<l;i++){
		caracter = x.substring(i,i+1);
		if ((caracter>='0') && (caracter<='9')){
			str_num = str_num + caracter;
		}
	}
	str_mul = "6543298765432";
	i_valido = 1;
	if (str_num.length != 14){
		return(false);
	}
	i_soma = 0;
	str_num_base = str_num.substring(0,12); 
	i_len_num_base = str_num_base.length - 1;
	iLenMul = str_mul.length - 1;
	for (i=0;i<12;i++){
		i_soma = i_soma + parseInt(str_num_base.substring((i_len_num_base-i),(i_len_num_base-i)+1),10) * parseInt(str_mul.substring((iLenMul-i),(iLenMul-i)+1),10);
	}
	i_soma = 11 - (i_soma - Math.floor(i_soma/11) * 11);
	if (i_soma == 11 || i_soma == 10){
		i_soma = 0;
	}
	str_num_base = str_num_base + i_soma;
	i_soma = 0;
	i_len_num_base = str_num_base.length - 1;
	for (i=0;i<13;i++){
		i_soma = i_soma + parseInt(str_num_base.substring((i_len_num_base-i),(i_len_num_base-i)+1),10) * parseInt(str_mul.substring((iLenMul-i),(iLenMul-i)+1),10);
	}

	i_soma = 11 - (i_soma - Math.floor(i_soma/11) * 11);
	if (i_soma == 11 || i_soma == 10){
		i_soma = 0;
	}
	str_num_base = str_num_base + i_soma;
	if (str_num != str_num_base){
		return(false);
	}
	return(true);
}

function verifica_email(e){
	//TESTE EMAIL
	var email = e;
	var suportado = 0;
	//Testa se o browser suporta expressões regulares
	if (window.RegExp){
		var tempReg = /a/;
		if (tempReg.test("a")){
			suportado = 1;
		}
	}
	//Se o browser não suporta expressões regulares,
	//verifica apenas a posição do ponto e da arroba
	if (!suportado){
		if (((email.indexOf(".") <= 0) || (email.indexOf("@") <= 0)) || ((email.lastIndexOf(".") == (email.length - 1)) || (email.lastIndexOf("@") == (email.length -1)))){
			return false;
	    }
	//Se o browser suporta expressões regulares,
	//faz a verificação completa
	}
	else {
		var tmp1 = /(@.*@)|(\.\.)|(@\.)|(^\.)/;
		var tmp2 = /^.+@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
		if (tmp1.test(email) || !tmp2.test(email)){
			return false;
		}
	}
	return true;
}

function verifica_cep(e){
	//TESTE CEP
	var cep = e;
	var suportado = 0;
	//Testa se o browser suporta expressões regulares
	if (window.RegExp){
		var tempReg = /a/;
		if (tempReg.test("a")){
			suportado = 1;
		}
	}
	//Se o browser não suporta expressões regulares,
	//verifica apenas a posição do -
	if (!suportado){
		if ((cep.indexOf("-") != 5) || (cep.length != 9)){
			return false;
	    }
	//Se o browser suporta expressões regulares,
	//faz a verificação completa
	}
	else {
		var tmp = /^[0-9]{5}\-[0-9]{3}$/
		if (!tmp.test(cep)){
			return false;
		}
	}
	return true;
}


function verifica_data(dt){
	var dia  = dt.substr(0,2);
	var mes  = dt.substr(3,2);
	var ano  = dt.substr(6,4);
	var arr_mes = new Array(12);
	arr_mes[0]=0; //
	arr_mes[1]=31; //Janeiro
	arr_mes[2]=28; //Fevereiro
	arr_mes[3]=31; //Marco
	arr_mes[4]=30; //Abril
	arr_mes[5]=31; //Maio
	arr_mes[6]=30; //Junho
	arr_mes[7]=31; //Julho
	arr_mes[8]=31; //Agosto
	arr_mes[9]=30; //Setembro
	arr_mes[10]=31; //Outrubro
	arr_mes[11]=30; //Novembro
	arr_mes[12]=31; //Dezembro
	mes = parseFloat(mes);
	//verifica se o ano é bissesto
	if (ano%4==0){
		if (!ano%100==0 || ano%400==0){
			arr_mes[2]=29;
		}
	}
	//verifica se a data esta Ok
    if (isNaN(dia) || dia==0 || dia=='' || dia > arr_mes[mes] || dia >31){
		return false;
	}
    else {
		// verifica se o mes esta Ok
		if (isNaN(mes) || mes==0 || mes=='' || mes > 12){
			return false;
		}
		else {
			//verifica se o ano esta Ok
			if (isNaN(ano) || ano==0 || ano=='' || ano.length < 4 || ano < 1900){
				return false;
			}
		}
	}
	return true;
}
function limita_numeros (e, campo, letra) {
	if (e.keyCode) {
		tecla = e.keyCode;
	}
	else if (e.which) {
		tecla = e.which;
	}
	if (letra != "") {
		for (i=0;i<letra.length;i++){ // letras liberadas
			if (tecla == letra.charCodeAt(i)){
				return true;
			}
		}
	}
	if (tecla > 47 && tecla < 58) { // numeros de 0 a 9 e letra escolhida
		return true;
	}
	else {
		if (tecla != 8) { // backspace
			if (e.keyCode) {
				e.keyCode = 0;
			}
			else if (e.which) {
   				return false;
			}
		}
		else {
			return true;
		}
	}
}
function mascara_data(e, campo){
	if (!limita_numeros(e, campo,'/')){
		return false;
	}
	if (e.keyCode) {
		tecla = e.keyCode;
	}
	else if (e.which) {
		tecla = e.which;
	}
	if ((campo.value.length==2 || campo.value.length==5) && tecla!=47 && tecla!=8){
		campo.value += '/';
	}
}
function mascara_hora(e, campo){
	if (!limita_numeros(e, campo,':')){
		return false;
	}
	if (e.keyCode) {
		tecla = e.keyCode;
	}
	else if (e.which) {
		tecla = e.which;
	}
	if (campo.value.length==2 && tecla!=47 && tecla!=8){
		campo.value += ':';
	}
}
function mascara_cep(e, campo){
	if (!limita_numeros(e, campo,'/')){
		return false;
	}
	if (e.keyCode) {
		tecla = e.keyCode;
	}
	else if (e.which) {
		tecla = e.which;
	}
	if (campo.value.length==5 && tecla!=45 && tecla!=8){
		campo.value += '-';
	}
}
function mascara_tel(e, campo){
	if (!limita_numeros(e, campo,'-')){
		return false;
	}
	if (e.keyCode) {
		tecla = e.keyCode;
	}
	else if (e.which) {
		tecla = e.which;
	}
	if (campo.value.length==4 && tecla!=45 && tecla!=8){
		campo.value += '-';
	}
}
function limita_textarea(campo, campo_tam, limite){
	if (campo.value.length > limite){
		campo.value = campo.value.substring(0, limite);
	}
	else {
		campo_tam.value = limite - campo.value.length;
	}
}
function frm_preenche(frm, arr_campo, arr_valor){
	for (var i=0;i<arr_campo.length;i++){
		cmp = arr_campo[i];
		val = arr_valor[i];
		if (frm.elements[cmp]){
			if (frm.elements[cmp].type=="text" || frm.elements[cmp].type=="textarea" || frm.elements[cmp].type=="hidden" || frm.elements[cmp].type=="submit"){
				frm.elements[cmp].value = val;
			}
			else if (frm.elements[cmp].type=="select-one"){
				for (var j=0;j<frm.elements[cmp].length;j++){
					if (frm.elements[cmp].options[j].value==val){
						frm.elements[cmp].selectedIndex=j;
						break;
					}
				}
			}
			else if (cmp.slice(0,3)=="opt"){
				if (frm.elements[cmp][0].type=="radio"){
					for (var j=0;j<frm.elements[cmp].length;j++){
						if (frm.elements[cmp][j].value==val){
							frm.elements[cmp][j].checked=true;
							break;
						}
					}
				}
			}
		}
	}
}
function frm_campos(frm){
	for (var i = 0;  i <= frm.elements.length - 1; i++){
		if (frm.elements[i].type=="text" || frm.elements[i].type=="textarea" || frm.elements[i].type=="password"){
			if (frm.elements[i].lang!="pt"){
				frm.elements[i].onblur = frm_volta;
				frm.elements[i].onfocus = frm_cor;
			}
		}
	}
}
cor_normal = '#FFFFFF';
cor_foco = '#EEEEEE';
function frm_cor(evt){
	evt = (evt) ? evt : (window.event) ? window.event : "";
	if (evt.srcElement){
		evt.srcElement.style.backgroundColor=cor_foco;
	}
	else {
		evt.target.style.backgroundColor=cor_foco;
	}
}
function frm_volta(evt){
	evt = (evt) ? evt : (window.event) ? window.event : "";
	if (evt.srcElement){
		evt.srcElement.style.backgroundColor=cor_normal;
	}
	else {
		evt.target.style.backgroundColor=cor_normal;
	}
}

/**
* Limpa os campos da tela em um determinado intervalo
* {@source }
* @f string nome do formulário que deseja lismpar geralmente this.form
* @inicio integer indece do ínicio do intervalo. O índece começa com 0
* @fim integer indece do fim do intervalo
* @date 02/01/2006
* @author Renato de Queiroz Ferreira Mello
*/
function limpaform(f,inicio,fim){
	for(i=inicio;i<=fim;i++){
		var tipo = (f.elements[i].type)
		if ((tipo == "text") || (tipo == "textarea") || (tipo == "password") || (tipo == "select-one")){
			f[i].value='';
		}
		else if (tipo =="checkbox"){
			f[i].checked=false;
		}
	}
	
}

