// JavaScript Document
/*
-recebe como parâmetros uma mensagem a ser alertada e o campo a ser focado.
*/
function alerta_e_foca(mensagem,campo){
	alert(mensagem);
	campo.focus();
}
//recebe o valor do campo atual e o tamanho, caso o tamanho seje igual ao tamanho do valor, ele foca o próximo campo.
function focar_campo(campoAtual,tamanho,proxCampo){
	if(campoAtual.value.length==tamanho)
	proxCampo.focus();
}
//Recebe um campo como parâmetro para verificar se neste campo há algum caracter branco.
function verifica_caracteres_brancos(campo){
	for(cont=0;cont<campo.length;cont++){
		if(campo.charAt(cont)!=" ")
			return true;
	}
	return false;
}
//recebe um campo como parâmetro e verifica se este campo está vazio
function verifica_se_vazio(campo){
	if(campo.length!=0 && verifica_caracteres_brancos(campo))
		return false;
	else 
		return true;
}
//Recebe um campo como parâmetro e verifica se neste campo comtém apenas caracteres númericos.
function contem_apenas_numeros(campo){
	for(cont=0;cont<campo.length;cont++){
		if(campo.charAt(cont)<"0" || campo.charAt(cont)>"9")
			return false;
	}
	return true;
}
//recebe um campo, chama a função contem_apenas_numeros() e alerta uma mensagem caso o retorno da função seja false.
function verifica_numeros(campo){
	if(contem_apenas_numeros(campo)==false){
		alerta_e_foca("Este campo deve conter apenas caracteres numéricos!",campo);
	}
	return true;
}

//cria um array;
function cria_array(x){
	this.length=x;
	for(i=0;i<=x;i++){
	this[i]=""
	}
}
//Recebe campoNome e mensagem como parâmetro e verifica se o campoNome se encontra vazio, caso esteja vazio a mensagem será alertada retornando false.
function verifica_campo_geral(campoNome,mensagem){
	if(verifica_se_vazio(campoNome.value)){
		alerta_e_foca(mensagem,campoNome);
		return false;
	}	
	return true;
}

/*
-recebe o ddd, o prefixo e o número como parâmetros;
-verifica se cada um desses campo está vazio(verifica_se_vazio) ou se eles contêm apenas números(contem_apenas_numeros);
-verifica se o ddd possui menos de dois dígitos, se o prefixo possui menos de 3 dígitos e se o número contém menos de 4 dígitos 
retornando false se alguma das condições forem verificadas.
*/
function verifica_campo_telefone(ddd,prefixo,numero){
    if(verifica_se_vazio(ddd.value)){
		alerta_e_foca("O DDD do telefone é obrigatório e encontra-se vazio!",ddd);
		return false;
	}

	if(!contem_apenas_numeros(ddd.value)){
		alerta_e_foca("O DDD do telefone deve conter apenas digitos numéricos!",ddd);
		return false;
	}

	if(verifica_se_vazio(prefixo.value)){
		alerta_e_foca("O Prefixo do telefone é obrigatório e encontra-se vazio!",prefixo);
        return false;
	}	

	if(!contem_apenas_numeros(prefixo.value)){
		alerta_e_foca("O Prefixo do telefone deve conter apenas digitos numéricos!",prefixo);
		return false;
	}
		
	if(verifica_se_vazio(numero.value)){
		alerta_e_foca("O Numero do telefone é obrigatório e encontra-se vazio!",numero);
		return false;
	}
	
	if(!contem_apenas_numeros(numero.value)){
		alerta_e_foca("O Numero do telefone deve conter apenas digitos numéricos!",numero);
		return false;
	}
	if(ddd.value.length<2 || prefixo.value.length<3 || numero.value.length<4){
		alerta_e_foca("Um dos campos de entrada do numero do telefone encontra-se com a quantidade de caracteres abaixo do permitido.",ddd);
		return false;
	}
	return true;
}
//Verifica o campo email
/* Esta função verifica o email digitado com base nos padrão RFC2822:Internet Message Format
	-recebe o valor do email digitado;
	-verifica se o campo do email está vazio, estando vazio envia uma mensagem de alerta e retorna false;
	-verifica se os caracteres digitados para o email são compativos retornando verdadeiro em caso afirmativo e falso em caso negativo, enviando uma mensagem;
	-Retorna verdadeiro ao final caso não seje detectado caracteres inválidos ou o campo vazio;
*/
function verifica_campo_email(campoEmail){
	if(verifica_se_vazio(campoEmail.value)){
		alerta_e_foca("O campo \"Email\" é obrigatório e encontra-se vazio!",campoEmail);
		return false;
	}
	//Esse codigo verifica o CampoEmail  tb segundo o padrão Internet RFC2822:Internet Message Format
	if(!/^[\w!#$%&'*+/=?^`{|}~-]+(\.[\w!#$%&'*+/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/.test(campoEmail.value)){
		alerta_e_foca("Endereço de e-mail inválido!",campoEmail);
		return false;
	}
	return true;		
}
/*Verifica os campos dia, mes e ano da seguinte forma:
	-verificando se os três campos estão vazios(verifica_se_vazio) e caso estejam uma mensagem é alertada(alerta_e_foca) e é retornado false;
	-verifica se cada um dos campo contém apenas números através da função contem_apenas_numeros e alerta uma mensagem em caso de não ter apenas números(alerta_e_foca);
	-verifica se o mês digitado é maior que 12, retornando false em caso afirmativo e emitindo uma mensagem (alerta_e_foca);
	-verifica se o mês é de 30 dias e verificando se o dia é maior que 30, em caso afirmativo uma mensagem é alertada (alerta_e_foca) e retorna-se false;
	-verifica se o mês é de 31 dias e verificando se o dia é maior que 31, em caso afirmativo uma mensagem é alertada (alerta_e_foca) e retorna-se false;
	-verifica se o ano é bissexto (resto da divisão do ano por 4 é igual a 0), se o mês é fevereiro(02) e se o dia é maior que 29 retornando false em caso afirmativo e alertando uma mensagem (alerta_e_foca);
	-verifica se o ano não é bissexto (resto da divisão do ano por 4 é diferente de 0), se o mês é fevereiro(02) e se o dia é maior que 28 retornando false em caso afirmativo e alertando uma mensagem (alerta_e_foca);
	-retorna verdadeiro se tudo estiver ok.
*/
//Verifica o campo Data
function verifica_campo_data(campoDia,campoMes,campoAno){
	if(verifica_se_vazio(campoDia.value)){
		alerta_e_foca("É necessário preencher o dia !",campoDia);
		return false;
	}
	if(verifica_se_vazio(campoMes.value)){
		alerta_e_foca("É necessário preencher o mês!",campoMes);
		return false;
	}
	if(verifica_se_vazio(campoAno.value)){
		alerta_e_foca("É necessário preencher o ano!",campoAno);
		return false;
	}
	if(contem_apenas_numeros(campoDia.value)==false){
		alerta_e_foca("A data deve conter apenas dígitos numéricos!",campoDia);
		return false;
	}			
	if(contem_apenas_numeros(campoMes.value)==false){
		alerta_e_foca("A data deve conter apenas dígitos numéricos!",campoMes);
		return false;
	}	
	if(contem_apenas_numeros(campoAno.value)==false){
		alerta_e_foca("A data deve conter apenas dígitos numéricos!",campoAno);
		return false;
	}
	if(campoMes.value>12){
		alerta_e_foca("O mês digitado é inexistente!",campoMes);
		return false;
	}
	if(((campoMes.value==01) || (campoMes.value==03) || (campoMes.value==05) || (campoMes.value==07) || (campoMes.value==08) || (campoMes.value==10)|| (campoMes.value==12))&&(campoDia.value>31)){	
		alerta_e_foca("O dia digitado não pode ser maior que 31!",campoDia);
		return false;
	}
	if(((campoMes.value==04) || (campoMes.value==06) || (campoMes.value==09) ||(campoMes.value==11))&&(campoDia.value>30)){
		alerta_e_foca("O dia digitado não pode ser maior que 30!",campoDia);
		return false;
	}
	//Verifica o mês de fevereiro e o dia válido quando o ano é bissexto
	if((campoAno.value%4==0) && (campoMes.value==02) && (campoDia.value>29)){
		alerta_e_foca("O Dia não pode ser maior que 29!",campoDia);
		return false;
	}
	//Verifica o mês de fevereiro e o dia válido quando o ano não é bissexto
	if((campoAno.value%4!=0) && (campoMes.value==02) && (campoDia.value>28)){
		alerta_e_foca("O Dia não pode ser maior que 28!",campoDia);
		return false;
	}
	return true;	
}
//Valida o CPF de acordo com os dígitos verificadores
/*Verifica se o cpf digitado é válido da seguinte maneira:
-verifica se o campo está vazio, retornando false e alertando uma mensagem(alerta_e_foca);
-copia apenas o número do Cpf na variável número;
-coloca cada caracter da variável número em um array chamado dígito, verificando também se no campo encontram-se caracteres diferentes de números, ponto ou traço;
-coloca em dvinformado os dois últimos dígitos do número e atribui cada dígito do número no array dígito, com excessão dos dois últimos números;
-realiza o calculo dos dois últimos dígitos, multiplicando cada elemento do array dígito começando por 10(posição) e diminuindo 1 da posição a medida em que 
	se se muda o índice do array e somando os valores na variável soma.Na nona posição do array dígitos é atribuida a soma dividida por 11. Se esse valor for 
	menor que 2 será atribuído 0 se não será atribuído 11 menos o valor do digito[9].
-O mesmo processo anterior é aplicado para o calculo do décimo dígito, com a diferença que a posição começa por 11.
- Na variável dv é atribuído o valor dos dois diígitos para que possam ser comparados com os dois últimos dígitos informados no número. 

*/
function verifica_campo_cpf(campoCpf){
	//O campoCpfdv é o campo que vai  conter os 2 últimos dígitos q no CPF é separado por um -
	//Aqui começa a checagem do CPF	
	var posicao,y,soma,dv,dvinformado,numerocpf;		
	if(verifica_se_vazio(campoCpf.value)){
		alerta_e_foca("O campo \"CPF\" é obrigatório e encontra-se vazio!",campoCpf);
		return false;
	}	
	digito=new cria_array(10);
	numerocpf="";	
	//Desmembra o número do CPF no array dígito			
	for(y=0;y<campoCpf.value.length;y++){		
		if(campoCpf.value.charAt(y)>="0" && campoCpf.value.charAt(y)<="9"){
			numerocpf+=campoCpf.value.charAt(y);
		}
		else{
			if(campoCpf.value.charAt(y)!="." && campoCpf.value.charAt(y)!="-"){
				alerta_e_foca("O campo \"CPF\" só pode conter caracteres numéricos, \".\" ou \"-\"!" ,campoCpf);				
				y=campoCpf.value.length+1;
				return false;				
			}
		}									
	}	
	parseInt(numerocpf);
	dvinformado=numerocpf%100;	
	for(y=0;y<=10;y++){
		digito[y]=numerocpf.substr(y,1);
	}
	//Calcula o valor do décimo dígito da verificação	
	posicao=10;
	soma=0;
	for(y=0;y<=8;y++){			
		soma= soma + digito[y] * posicao;
		posicao= posicao - 1;				
	}	
	digito[9]= soma % 11;
	if(digito[9]<2){
		digito[9]=0;	
	}
	else{
		digito[9]=11-digito[9];
	}
	//Calcula o valor do décimo primeiro dígito da verificação
	posicao=11;
	soma=0;
	for(y=0;y<=9;y++){		
     	soma = soma + digito[y] * posicao;
		posicao=posicao-1;		
	}
	digito[10]=soma % 11;
	if(digito[10]<2){
		digito[10]=0;
	}
	else{
		digito[10]=11-digito[10];
	}
	dv=digito[9] * 10 + digito[10];
	//Verifica se os digitos verificadores(os 2 últimos) estão corretos
	if(dv!=dvinformado){
		alerta_e_foca("O número do CPF não está correto!",campoCpf);					
		return false;
	}
	return true;	
}
//Valida o campo RG
/*
-verifica se o campo está vazio(verifica_se_vazio), retornando false e alertando uma mensagem(alerta_e_foca);
-Desmembra o número em um array chamado número e cria um vetor com o tamanho de número;
-Verifica se no campo Rg contém apenas números(contem_apenas_numero) e caso não tenha retorna false e alerta uma mensagem(alerta_e_foca);
-Em vetor é colocado cada dígito do Rg multiplicado pelo índice do vetor + 2 e em total é somado os valores de vetor.
-Em resto coloca-se o valor de total dividido por 11.Caso o resto seja diferente de 0 é alertada uma mensagem de erro e  é retornado false.
*/
function verifica_campo_rg(campoRg){
//numero=campoRg.value.split("");
//O comando split desmembra o Rg em cada um dos seu dígitos guardando-os no vetor numero
/*tamanho=numero.length;
vetor=new cria_array(tamanho);
total=0;*/
algarismos="";	
	if(verifica_se_vazio(campoRg.value)){
		alerta_e_foca("O campo \"RG\" é obrigatório e encontra-se vazio!",campoRg);
		return false;
	}	
	for(y=0;y<=campoRg.value.length;y++){		
		if((campoRg.value.charAt(y)>"0" || campoRg.value.charAt(y)<"9") && (campoRg.value.charAt(y)!=" ")){
				algarismos+=campoRg.value.charAt(y);
		}
		else{
			if(campoRg.value.charAt(y)!=" "){
				alerta_e_foca("Este campo deve ser preenchido com o número do RG!",campoRg);
				return false;
			}
		}				
	}
	alert(algarismos);
	parseInt(algarismos);
	numero=algarismos.split("");
	//O comando split desmembra o Rg em cada um dos seu dígitos guardando-os no vetor numero
	tamanho=numero.length;
	vetor=new cria_array(tamanho);
	total=0;
	//Em vetor é colocado cada dígito do Rg multiplicado pelo índice do vetor + 2 e em total é somado os valores de vetor.
	for(i=0;i<=8;i++){
		if(tamanho>=i+1){
			vetor[i]=parseInt(numero[i])*(i+2);			
		}
		if(tamanho>=i+1){
			total+=vetor[i];	
		}
	}	
	resto=total%11;
	if(resto!=0){
		alerta_e_foca("O RG digitado parece não estar correto!",campoRg);
		return false;
	}	
	return true;
}
/*

Verifica se a segunda data é maior que a primeira através dos campos dia, mes e ano de cada uma retornando true,se a segunda for maior e false em caso contrário.
*/
function verifica_data_maior(campodia1,campomes1,campoano1,campodia2,campomes2,campoano2){
	if(verifica_campo_data(campodia1,campomes1,campoano1)==false){
		return false;
	}
	if(verifica_campo_data(campodia2,campomes2,campoano2)==false){
		return false;
	}	
	if(campoano2.value>campoano1.value){
		return true;		
	}
	else{
		if(campoano2.value==campoano1.value && campomes2.value>campomes1.value){
			return true;
		}
		else{
			if(campoano2.value==campoano1.value && campomes2.value==campomes1.value && campodia2.value>campodia1.value){
				return true;
			}
		}
	}
	if(campodia1.value==campodia2.value && campomes1.value==campomes2.value && campoano1.value==campoano2.value){
		alerta_e_foca("As datas digitadas são iguais!",campodia1);
		return false;
	}
	alerta_e_foca("A data inicial é maior que a data final!",campodia1);	
	return false;		
}
/*
-Verifica se o campo está vazio;
-Verifica se os digitos são números, ponto ou vírgula retornando false em caso contrário;
-Verifica se um número digitado possui mais do que 2 casas decimais;
*/
function verifica_double(campo){
	if(verifica_se_vazio(campo.value)){
		alerta_e_foca("Este campo é obrigatório e encontra-se vazio!",campo);
		return false;
	}	
	posiv=0;	
	ponto=0;
	virgula=0;
	for(y=0;y<=campo.value.length;y++){
		if((campo.value.charAt(y)=="," || campo.value.charAt(y)==".")&& (campo.value.charAt(y-1)<"0" || campo.value.charAt(y-1)>"9")){
			alerta_e_foca("A virgula ou ponto só pode ser usada após um número!",campo);
			return false;
		}
		if(campo.value.charAt(y)=="."){
			ponto+=1;
			posiv=y+1;
		}
		else{
			if(campo.value.charAt(y)==","){
				virgula+=1;
				posiv=y+1;							
			}
		}
	}
	if(ponto>1 || virgula>1){
		alerta_e_foca("O campo só pode conter um ponto ou uma vírgula!",campo);
		return false;
	}		
	if(posiv>0){
		for(y=0;y<posiv-1;y++){
			if(campo.value.charAt(y)<"0" || campo.value.charAt(y)>"9" ){
				alerta_e_foca("O campo só deve conter caracteres numéricos!",campo);
				return false;
			}
		}
		//alert(campo.value.charAt(posiv));
		if(campo.value.charAt(posiv)<"0" || campo.value.charAt(posiv)>"9"){
			alerta_e_foca("O campo só deve conter caracteres numéricos!",campo);
			return false;
		}
		if(campo.value.charAt(posiv+1)<"0" || campo.value.charAt(posiv+1)>"9"){
			alerta_e_foca("O campo só deve conter caracteres numéricos!",campo);
			return false;
		}		
		posiv=posiv+2;		
		for(y=posiv;y<=campo.value.length;y++){
			if(campo.value.charAt(y)!="" && campo.value.charAt(y)!=" "){
				alerta_e_foca("Só são permitidos dois dígitos após a , ou .!",campo);			
				return false;
			}		
		}		
	}
	else{
		for(y=0;y<=campo.value.length;y++){
			if((campo.value.charAt(y)<"0" || campo.value.charAt(y)>"9")){
				if(campo.value.charAt(y)!=""){
					alerta_e_foca("O campo só deve conter caracteres numéricos sem espaços!",campo);
					return false;
				}
			}
		}
	}
	return true;
}
function copiaSelecao(campo,campo2)
{
	var j,i,k,l,ch,flag;	
	flag=false;
	i=campo.selectedIndex;	
	for(j=0;j<campo.length;j++)
	{
		k=campo.options[j].selected;
		if(k&&true)
		{
			flag=true;
			break;
		}
	}
	if (flag==false)
	{
		alert("Selecione uma opção");
		return;
	}	
	ch=campo.options[i].text;		
	for(j=0;j<campo2.length;j++)
	{
		if(campo2.options[j].text==ch)
		{
			alert("A matéria selecionada já foi inserida!");
			return;
		}
	}	
	if (campo2.options[0].text=="")
	{
		campo2.options[0].text=campo2.options[1].text;
		campo2.length--;
	}
	l=campo2.length;		
	campo2.length++;
	campo2.options[l].text=ch;			
}
function retiraSelecao(campo){
	var j,flag,k,x,ch;	
	flag=false;
	for(j=1;j<campo.length;j++)
	{
		k=campo.options[j].selected;		
		if(k&&true)
		{
			flag=true;
			break;
			j=campo.selectedIndex;
		}
	}
	if (flag==false)
	{
		alert("Selecione uma opção válida!");
		return;
	}			
	for(;j<campo.length-1;j++){						
		campo.options[j].text=campo.options[j+1].text;						
		campo.options[j+1].text="";
	}
	campo.length--;
}

