function isArray(obj) {
	return obj.constructor == Array;
}

$(document).ready(function () {

	$('#primeira_opcao_oferta').change(function(){
		carregaProvasEstrangeiras(null);
	});

	$("#fm-form").submit(function(){
		if ($('#fone_contato').val().length == 0)
		{
			$('#fone_contato').val($('#celular_contato').val());
		}
		else if($('#celular_contato').val().length == 0)
		{
			$('#celular_contato').val($('#fone_contato').val());
		}
	});

	$(':text, :checkbox, select').keypress(function(event){
		if ($(event).attr('keyCode') == 13)
		{
			next = parseInt($(this).attr('tabindex')) + 1;

			while(!Boolean($('[tabindex='+ next +']').is(':visible')) && next < 40)
			{
				next += 1;
			}

			$(this).blur();
			$('[tabindex='+ next +']').focus();

			return false;
		}
	});

	if (inscricao()) {
		$('#cpf').blur(procuraPorCPF);
		$('#cpf').keypress(function(e) {
			if(e.keyCode == 13) {
				procuraPorCPF();
				$("#nome").focus();
			}
		});
	}
	
	mostraDetalhesNecessidadesEspeciais();
	$('#necessidades_especiais').change(mostraDetalhesNecessidadesEspeciais);
	
	filtraClassificacoesNecessidadesEspeciais();
	$('#tipo_necessidades_especiais').change(filtraClassificacoesNecessidadesEspeciais);
	mask();
	maiusculo();

	validacao();

	$('#cpf').focus();

	//$('#fm-form').attr('action', 'confirmar_inscricao_vestibular.php');
});

function carregaProvasEstrangeiras(callBack)
{
	$.post('../php/supervisor_vestibulares_controle.php',
		{
			acao: 'provas_lingua_estrangeira',
			cod_curso: $('#primeira_opcao_oferta').val()
		},
		function(resposta){
			if(resposta.length)
			{
				$('#lingua_est').attr('disabled', false);
				$('[for=lingua_est], #lingua_est').show();

				$('#lingua_est').html('');

				for (i = 0; i < resposta.length; i++)
				{
					$('#lingua_est').append('<option value="' + resposta[i].codigo + '">' + resposta[i].nome + '</option>');
				}
				/*for ([index, value] in Iterator(resposta))
				{
					for ([id, nome] in Iterator(value))
					{
						$('#lingua_est').append('<option value="' + id + '">' + nome + '</option>');
					}
				}*/
			}
			else
			{
				$('[for=lingua_est], #lingua_est').hide();
				$('#lingua_est').attr('disabled', true);
			}
			if (callBack)
				callBack();
			//$.unblockUI();
		},
		'json'
	);
}

function inscricao() {
	return ($('#acao').val() == 'inscrever');
}

function toggle(id) {
	$('#' + id).slideToggle('fast');
	return false;
}

function maiusculo() {
	$('#orgao_rg').blur(function() {
		$('#' + this.id).val($('#' + this.id).val().toLocaleUpperCase());
	});
	
	$('#email_contato').blur(function() {
		$('#email_contato').val($('#email_contato').val().toLocaleLowerCase());
	});
	
}

function mostraDetalhesNecessidadesEspeciais() {
	if ($('#necessidades_especiais').val() ==1) {

		$('.necessidades_especiais_detalhes_cl').fadeIn('fast', function(){
			$('#tipo_necessidades_especiais').show();
			$('#classificacao_necessidades_especiais').show();
		});

		$('#tipo_necessidades_especiais').focus();
	} else {

		$('.necessidades_especiais_detalhes_cl').fadeOut('fast', function(){			
			$('#tipo_necessidades_especiais').hide();
			$('#classificacao_necessidades_especiais').hide();
		});

	}
	
}

function filtraClassificacoesNecessidadesEspeciais(classificacao) {
	if ($('#submit').val().indexOf('confirmar') !== -1) {
		return;
	}

	$.post('../php/supervisor_vestibulares_controle.php',
    {
      acao: 'classificacoes_necessidades_especiais',
			tipo: $('#tipo_necessidades_especiais').val()
    },
    function(resposta){
      classificacoes = eval(resposta);
			
			var options = '';
      for (var i = 0; i < classificacoes.length; i++) {
        options += '<option value="' + classificacoes[i].id + '" id="classificacao_necessidades_especiais' + '_' + classificacoes[i].id + '">' + classificacoes[i].nome + '</option>';
      }

      $("#classificacao_necessidades_especiais").html(options);
			
			if (classificacao != undefined) {
				$('#classificacao_necessidades_especiais' + '_' + classificacao).attr('selected', 'selected');
			}
    }
  );
}

function validaCPF(str) {

	var numero;
	var digito = new Array(10); // array para os dígitos do CPF.
	var aux = 0; // índice para a string num.
	var posicao
	var i
	var soma
	var dv
	var dvInformado;
	
	//numero = _extraiNumero(str);

	// Retira os dígitos formatadores de CPF '.' e '-', caso existam.
	if (str.length > 0)
	{
		while ((str.indexOf('.') != -1) || (str.indexOf('-') != -1))
		{
			if (str.indexOf('.') != -1)
			{
			aux = str.indexOf('.');
			str = str.substr(0, aux) + str.substr(aux+1, str.length-1);
			}
			if (str.indexOf('-') != -1)
			{
			aux = str.indexOf('-');
			str = str.substr(0, aux) + str.substr(aux+1, str.length-1);
			}
		} //while
	} //if

	//verifica CPFs manjados
	switch (str) {
		case '0':
		case '00':
		case '000':
		case '0000':
		case '00000':
		case '000000':
		case '0000000':
		case '00000000':
		case '000000000':
		case '0000000000':
		case '00000000000':
		case '11111111111':
		case '22222222222':
		case '33333333333':
		case '44444444444':
		case '55555555555':
		case '66666666666':
		case '77777777777':
		case '88888888888':
		case '99999999999':
			return false;
	}

	// Início da validação do CPF.
	/* Retira do número informado os dois últimos dígitos */
	dvInformado = str.substr(9,2);
	/* Desmembra o número do CPF no array digito */
	for (i=0; i<=8; i++)
	{
		digito[i] = str.substr(i,1);
	}
	/* Calcula o valor do 10o. digito de verificação */
	posicao = 10;
	soma = 0;
	for (i=0; i<=8; i++)
	{
		soma = soma + digito[i] * posicao;
		posicao--;
	}
	digito[9] = soma % 11;
	if (digito[9] < 2)
	{
		digito[9] = 0;
	}
	else
	{
		digito[9] = 11 - digito[9];
	}
	/* Calcula o valor do 11o. digito de verificação */
	posicao = 11;
	soma = 0;
	for (i=0; i<=9; i++)
	{
		soma = soma + digito[i] * posicao;
		posicao--;
	}
	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 o DV calculado é igual ao informado */
	if(dv != dvInformado)
	{
	// exibe mensagem ao usuário.
		return false;
	}
	else
	{
		return true;
	}
}

function showModelMensagemErros() {
	$('#erros-barra-inferior').click(function() { 
		$.unblockUI(); 
	});
	$.blockUI({ message: $('#erros-barra-inferior'), css: { width: '275px' } });
}

function validacao() {
	$.validator.addMethod("validaCPF", validaCPF, 'Digite um CPF válido!');

	var validator = $("#fm-form").bind("invalid-form.validate", function() {
			$(".erros-resumo").show();
			showModelMensagemErros();
			return false;
		}).validate({
			errorLabelContainer: $("#erros"),
			wrapper: 'li',
			rules: {
				cpf: {
					required: true,
					validaCPF: $('#cpf').val()
				},
				nome: "required",
				fone_contato: "required",
				email_contato: {
					required: true,
					email: true
				},
				naturalidade: "required",
				pais: "required",
				numero_rg: "required",
				orgao_rg: "required",
				uf_rg: "required",
				data_expedicao_rg: "required",
				nome_mae: "required",
				logradouro_endereco: "required",
				numero_endereco: "required",
				data_nascimento: "required",
				cep_endereco: "required",
				bairro_endereco: "required",
				cidade_endereco: "required",
				pais_endereco: "required",
				"conhecimento_atraves_de[]": "required",
				escola_origem: "required",
				ano_conclusao_medio: "required"
			},
			messages: {
				cpf: {
					required: 'Insira seu CPF'
				},
				nome: "Insira seu nome ",
				fone_contato: "Insira um telefone para contato",
				email_contato: "Insira um email válido",
				naturalidade: "Insira sua naturalidade",
				pais: "Insira o país onde você nasceu",
				numero_rg: "Insira o número de seu RG",
				orgao_rg: "Insira o Orgão de seu RG",
				uf_rg: "Insira a UF de seu RG",
				data_expedicao_rg: "Insira a data de expedição de seu RG",
				nome_mae: "Insira o nome da sua mãe",
				logradouro_endereco: "Insira o logradouro (Rua/Avenida) de seu endereço",
				numero_endereco: "Insira o número de seu endereço",
				data_nascimento: "Insira sua data de nascimento",
				cep_endereco: "Insira o CEP de seu endereço",
				bairro_endereco: "Insira o bairro de seu endereço",
				cidade_endereco: "Insira a cidade de seu endereço",
				pais_endereco: "Insira o país de seu endereço",
				"conhecimento_atraves_de[]": "Informe o meio através do qual você teve conhecimento do Vestibular desta Instituição",
				escola_origem: "Insira a escola em que você concluiu o Ensino Médio",
				ano_conclusao_medio: "Insira o ano em que você concluiu o Ensino Médio"
			}
		});

	$('#primeira_opcao_curso').blur(function() {
		if ($('#segunda_opcao_curso').val() == '') {
			$('#segunda_opcao_curso').val($('#primeira_opcao_curso').val());
		}
	});
}

function mask() {
	$('#cpf').mask('999.999.999-99');
	$('#data_nascimento').mask('99/99/9999');
	$('#data_expedicao_rg').mask('99/99/9999');
	$('#cep_endereco').mask('99999-999');
	$('#fone_contato, #celular_contato').mask('(99)9999-9999');
	$('#ano_conclusao_medio').mask('9999');
}

function procuraPorCPF() {
	var cpf = $('#cpf').val();
	
	if (cpf == '___.___.___-__' || cpf == '') {
		return;
	}
	
	if ($('#submit').val() == 'Confirmar') {
		return;
	}
	
	var classificacao;
	
	$.blockUI({ message: '<div id="block"><h1>Por favor aguarde...</h1></div>' }); 
	
	$.post('../php/supervisor_vestibulares_controle.php',
    {
      acao: 'pedir_codigo_acesso',
			cpf: cpf,
			codigo_acesso: $('#codigo_acesso').val()
    },
    function(resposta){
			//alert(resposta);

			dados = eval(resposta);

			if (!dados) {
				$('#codigo_acesso').val('');
				$.unblockUI();
				return;
			}

			pedeCodigoDeAcesso();
    }
  );
}

function enviaParaEmail() {
$.post('../php/supervisor_vestibulares_controle.php',
		{
			acao: 'envia_para_email',
			cpf: $('#cpf').val()
    },
		function() {
			$('#envia_para_email').html('Enviado!');
		});

$('#envia_para_email').html('Enviando...');
$('#envia_para_email').unbind('click');
}

function submitCodigoAcesso(event)
{
	if ($(event).attr('keyCode') == 13)
		$('#carrega_dados').click();
}

function pedeCodigoDeAcesso(errado) {

if (errado != null) {
	msg = 	'<p>Código Inválido, por favor tente novamente.</p>';
} else {
	msg = 	'<p><strong>Esse CPF já está inscrito nesse vestibular.</strong></p><p><span style="color: blue">Informe o código de acesso para carregar os Dados da Inscrição' +
	', impressão da 2ª Via do Boleto Bancário e do Cartão de Identificação.</span></p>';
}

msg += 	'<label for="codigo_acesso_informado">Código de Acesso:</label>'+
		'<input onKeyPress="submitCodigoAcesso(event)" id="codigo_acesso_informado" /><br/>' +
		'<p><input type="button" id="carrega_dados" value="Carregar"/></p>';

msg += '<p id="envia_para_email"><a href="#">Enviar Código para Email</a></p>';

$('#block').html(msg);

$('#codigo_acesso_informado').focus();

$('#carrega_dados').click(carregaDadosCPF);
$('#envia_para_email').click(enviaParaEmail);

}

function carregaDadosCPF() {
	var cpf = $('#cpf').val();
	
	if (cpf == '___.___.___-__' || cpf == '') {
		return;
	}
	
	var classificacao;
	
	$.post('../php/supervisor_vestibulares_controle.php',
    {
      acao: 'dados_do_cpf',
			cpf: cpf,
			codigo_acesso: $('#codigo_acesso_informado').val()
    },
    function(resposta){
		dados = eval(resposta);
		//alert(dados);

		if (!dados) {
			pedeCodigoDeAcesso(true);
			return;
		}

		$('#acao').val('alteracao');
		var valor_est;

		for (var i = 0; i < dados.length; i++) {
			if (dados[i].nome == 'conhecimento_atraves_de') {
				for (var k = 0; k < dados[i].valor.length; k++) {
					$('#' + dados[i].nome + '_' + dados[i].valor[k]).attr('checked', 'checked');
				}
			}
			else if (dados[i].nome == 'classificacao_necessidades_especiais') {
				classificacao = dados[i].valor;
			}
			else if (dados[i].nome == 'lingua_est')
			{
				valor_est = dados[i].valor;
			}

			$('#' + dados[i].nome).val(dados[i].valor);
			$('#' + dados[i].nome + '_' + dados[i].valor).attr('selected', 'selected');
		}

		$('#submit').val('Clique aqui para ir à próxima tela (Salva os dados)');

		$('#btn_2a_via_boleto').show();
		$('#btn_2a_via_boleto').click(function(){

			$('#codigo_acesso_2_via').val($('#codigo_acesso').val());
			$('#cpf_2a_via').val($('#cpf').val());

			$('#fm_2a_via').submit();
			return false;
		});

		$('#btn_cartao_identificacao').show();

		mostraDetalhesNecessidadesEspeciais();
		
		filtraClassificacoesNecessidadesEspeciais(classificacao);
		
		validacao();

		carregaProvasEstrangeiras(function(){
			$('#lingua_est > option[value=' + valor_est + ']').attr('selected', 'selected');
			$.unblockUI();
		});

		$('#codigo_acesso').val($('#codigo_acesso_informado').val());
		
		$('#nome').focus();
    });
}