
/*
 * DIREITOS AUTORAIS RESERVADOS (C) 2007 UFRJ
 * 
 * ESTE PROGRAMA É SOFTWARE LIVRE; VOCÊ PODE REDISTRIBUÍ-LO E/OU MODIFICÁ-LO SOB OS
 * TERMOS DA LICENÇA PÚBLICA GERAL GNU CONFORME PUBLICADA PELA FREE SOFTWARE FOUNDATION;
 * TANTO A VERSÃO 2 DA LICENÇA, COMO (A SEU CRITÉRIO) QUALQUER VERSÃO POSTERIOR.

 * ESTE PROGRAMA É DISTRIBUÍDO NA EXPECTATIVA DE QUE SEJA ÚTIL, PORÉM, SEM NENHUMA GARANTIA;
 * NEM MESMO A GARANTIA IMPLÍCITA DE COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
 * CONSULTE A LICENÇA PÚBLICA GERAL DO GNU PARA MAIS DETALHES.
 * 
 * VOCÊ DEVE TER RECEBIDO UMA CÓPIA DA LICENÇA PÚBLICA GERAL DO GNU JUNTO COM ESTE PROGRAMA; 
 * SE NÃO, ACESSE <<HTTP://WWW.GNU.ORG/LICENSES/LICENSES.PT-BR.HTML>>
 */


function on_submit_success(data)//{{{
{
	window.scrollTo(0,0);

	if(data.error)
		$('#message').html(data.error).attr('class','erro');
	else if(data.sucesso)
	{
		$('#cadform').data('autosave').remove();
		$('#message').text('');
		window.location = 'consulta.php';
	}
//	else
//		$('#message').text("Erro não previsto").attr('class','erro');

}//}}}
function on_submit_error(req, status, e)//{{{
{
	window.scrollTo(0,0);
	mostra_erro(erro_ajax(status, e));
	alert(req.responseText);
}//}}}
function on_submit()//{{{
{
	$.blockUI({message: "<h2><img src='images/busy.gif'> Atualizando registro... </h2>"});
	$('#cadform').ajaxSubmit({ 
		dataType: 'json',
		error: function(req, status, e) {
			$.unblockUI();
			on_submit_error(req, status, e);
		},
		success: function(data) {
			$.unblockUI();
			on_submit_success(data);
		}
	});
	return true;
}//}}}

function set_estado_municipio(estado, municipio, idestado, idmunicipio)//{{{
{
	// Se nao temos estado, remove todos os municipios
	if(!idestado)
		$(municipio).removeOption(/./);
	else
	{
		$(estado).val(idestado);

		$(municipio).val(idmunicipio);

		// A lista de municipios não contem o municipio que queremos?
		if($(municipio).val() == null)
		{
			// Pega lista de municipios do estado via ajax (ajaj na verdade)
			$(municipio)
				.removeOption(/./)
				.addOption('','')
				.ajaxAddOption('do_list_municipios.php',
					{'idestado': idestado}, false, 
					function(mun, id) {
						// Quando a lista chegar, seleciona o municipio
						// correto
						$(mun).val(id);
					},
					[municipio, idmunicipio]);
		}
	}
}//}}}
function setup_combo_municipios(estado, municipio)//{{{
{
	$(estado).change(function() { 
		set_estado_municipio(this, municipio, $(this).val(), null); 
	});
}//}}}

function configura_campos(pessoa, has_autosave)//{{{
{
	// Preenche o valor dos campos com os dados da pessoa
	$.each(pessoa, function(campo, valor) {
		$(':input[name='+campo+']').val([valor+'']);
		if(campo == 'motivo[24]')
			$('#motivo_24_a_27').val(24);
		else if(campo == 'motivo[25]')
			$('#motivo_24_a_27').val(25);
		else if(campo == 'motivo[26]')
			$('#motivo_24_a_27').val(26);
		else if(campo == 'motivo[27]')
			$('#motivo_24_a_27').val(27);
	});

	$('#motivo_outras_internacoes').val($('#motivo_24_a_27').val() ? 1 : 0);

	//{{{ AUTOSAVE
	if(has_autosave)
	{
		$('#header_message').append('<span class=autosave_saving></span>');
		var autosave = $('#cadform :input')
			.autosave({
				interval: 20000,
				before_restore: function(upd_date, p)
				{
					if(p.hasOwnProperty('id'))
					{
						var msg = "Existe uma edição de cadastro do paciente não salva";
						if(upd_date)
							msg += ',\nrealizada em '+upd_date.toLocaleString();
						msg += '.\nDeseja restaurar estas informações?';
						if(confirm(msg))
							return true;
						else
						{
							$('#cadform').data('autosave').remove();
							return false;
						}
					}
					else
						return false;
				},
				url: 'do_autosave.php'});

		$.update_state(); 

		$('#cadform').data('autosave', autosave);

		autosave.restore(undefined, function(pessoa_autosave) { 
			var campos = 
				[['idestado_nascimento','idmunicipio_nascimento'],
				 ['logradouro_idestado','logradouro_idcidade'],
				 ['logradouro_corresp_idestado','logradouro_corresp_idcidade']];

			for(var i=0; i<campos.length; ++i)
			{
				var idestado = (pessoa_autosave && pessoa_autosave[campos[i][0]]) ||
									pessoa[campos[i][0]],
					idcidade = (pessoa_autosave && pessoa_autosave[campos[i][1]]) ||
									pessoa[campos[i][1]];

				set_estado_municipio($('#'+campos[i][0]), $('#'+campos[i][1]),
									 idestado, idcidade);
			}

			$.update_state(); 
		});

		$('#menu a[class!=submit]').click(function() {
			$('#cadform').data('autosave').remove();
			return true;
		});
	} //}}}

	// Parametros default p/ controle datepicker
	$.datepicker.setDefaults($.extend($.datepicker.regional['pt-BR'],{
		changeMonth: true,
		changeYear: true,
		yearRange: '1910:2009',
	//		showButtonPanel: true,
	//		buttonImage: 'images/box_calendario.png',
		buttonImageOnly: true,
	//		showOn: 'both'
	}));

	// {{{ INFORMAÇÕES DA PESSOA DE REFERÊNCIA
	$('input[name=tem_cns]')
		.enables('.dep_cns', function(value) { return value == 1; });

	$('input[name=nome_mae]')
		.enabled_by('#sem_nome_mae', function(checked) { return !checked; });

	$('#data_nascimento')
		.enabled_by('#data_nascimento_ignorada', 
					function(checked) { return !checked; })
		.datepicker();

	$('#data_nascimento').mask('99/99/9999');

	$('input[name=nacionalidade]')
		// Habilita municipio e estado de nascimento se a pessoa for brasileira
		.enables('#idmunicipio_nascimento,#idestado_nascimento',
			function(value) { return value == 1; })
		// Habilita campos de naturalização se a pessoa for naturalizada
		.enables('#data_naturalizacao,#data_naturalizacao_ignorada',
			function(value) { return value == 2; } )
		// Se a pessoa nao for brasileira permite alteração do campo de pais
		.makes_writable('#idpais_nascimento', 
			{
				test_enable: function(value) { return value != 1; },
				on_disable: function() { $(this).val('BRASIL'); } 
			});

	$('#data_naturalizacao')
		.enabled_by('#data_naturalizacao_ignorada',
					function(checked) { return !checked; })
		.datepicker();

	setup_combo_municipios($('#idestado_nascimento'), 
						   $('#idmunicipio_nascimento'));
	// }}}
	
	// {{{ DOCUMENTOS DO PACIENTE
	var campos_documentos 
		= new Array("nis","cpf","rg","ctps","titulo_eleitor",
					"pis","certidao","cnh");
	var tipo_documentos
		= new Array(4,5,1,2,10,3,9,8);

	for(var i in campos_documentos)
	{
		var campo = campos_documentos[i];
		$('input[name=tem_'+campo+']')
			.enables('.dep_'+campo, function(value) { return value == 1; })
			.change(function() { 
				if(this.value==1) 
					$('#sem_documentos').removeAttr('checked'); 
			});

		$('#'+campo+'_data_emissao')
			.enabled_by('#'+campo+'_data_emissao_ignorada',
				function(checked) { return !checked; })
			.datepicker();

		var docfrente = pessoa[campo+'_digitalizado_frente']?true:false,
			docverso =  pessoa[campo+'_digitalizado_verso']?true:false;

		if(docfrente || docverso)
		{
			$(':input[name='+campo+'_digitalizado]').val(['1']);

			var botfrente = $("<input type=button value='Ver Frente' onclick=\"window.open('doc_upload/mostraDocumentoImage.php?id="+pessoa['idpessoa_cabcomum']+'&idTipoDoc='+tipo_documentos[i]+"&docSide=front','_blank')\">");

			var botverso = $("<input type=button value='Ver Verso'  onclick=\"window.open('doc_upload/mostraDocumentoImage.php?id="+pessoa['idpessoa_cabcomum']+'&idTipoDoc='+tipo_documentos[i]+"&docSide=back','_blank')\">");

			$('#box_'+campo+'_digitalizado')
				.append('<br>')
				.append(botfrente)
				.append(botverso);

			botverso.readonly(!docverso);
			botfrente.readonly(!docfrente);
		}
		else
			$(':input[name='+campo+'_digitalizado]').val(['0']);
	}

	$('#sem_documentos').change(function() {
		for(var i in campos_documentos)
			$("#tem_"+campos_documentos[i]+"_nao").click().change();
	});

	$('#cns').mask('999 9999 9999 9999');
	$('#nis').mask('99999999999');
	$('#cpf').mask('999.999.999-99');
	// Vou tirar a mascara de titulo de eleitor pois no titulo o numero nao
	// vem com zeros a esquerda, isto confunde quem entra o numero
//	$('#titulo_eleitor').mask('99999999999/99');
	$('#cnh').mask('99999999999');
	// }}}

	// {{{ Configura campos de endereço residencial
	$('#logradouro_geoiguacu').change(function(ev)
	{
		var val = $(this).val_unmasked();
		if(val.length != 8)
		{
			$('#geoiguacu_error').html('');
			$('.dep_geoiguacu').readonly(false);
			$('#logradouro_nao_cadastrado').enable();
		}
		else
		{
			$.getJSON('do_list_geoiguacu.php',{id: val}, function(data) {
				if(typeof(data.error) != 'undefined')
				{
					$('#geoiguacu_error').html(data.error);
					$('.dep_geoiguacu').readonly(false);
					$('#logradouro_nao_cadastrado').enable();
				}
				else
				{
					$('#logradouro_nao_cadastrado')
						.removeAttr('checked')
						.disable();
					$('input[name=logradouro_nao_cad_justificativa]').disable();

					$('.dep_geoiguacu').readonly(true);

					$('#geoiguacu_error').html('');
					$('#logradouro_nome').val(data.logradouro);
					$('#logradouro_bairro').val(data.bairro);
					$('#idtipo_logradouro').val(data.idtipo_logradouro);
					$('#logradouro_numero').val(data.numero);
					$('#logradouro_complemento').val(data.complemento);
					$('#logradouro_cep').val(data.cep);
					set_estado_municipio($('#logradouro_idestado'),
										 $('#logradouro_idcidade'),
										 "RJ", "NOVA IGUACU");
				}
			});
		}
	});
	$('#logradouro_geoiguacu').change();

	$('#logradouro_nome').change(function()
	{
		$('#idtipo_endereco_variavel').
			enable(this.value.length==0);

		if(this.value.length==0)
			$('#idtipo_endereco_variavel').val(0);
	});

	var logradouro_estado = $('#logradouro_idestado'),
		logradouro_cidade = $('#logradouro_idcidade');

	setup_combo_municipios($('#logradouro_idestado'),$('#logradouro_idcidade'));

	$('#idtipo_endereco_variavel')
		// Habilita campos de endereço se o endereço for fixo
		.enables('.dep_geoiguacu,#logradouro_geoiguacu,.dep_logr_nao_cad',
				 '#logradouro_nao_cadastrado,#logradouro_referencia',
			function(value) { return value == 0; });

	$('#logradouro_nao_cadastrado')
		.enables('.dep_logr_nao_cad', function() { return this.checked; });

	$('input[name=logradouro_nao_cad_justificativa]')
		// Habilita campo p/ usuario entrar a outra justificativa
		.enables('#logradouro_nao_cad_outra_justificativa',
			function(value) { return value == 1; })
		// Habilita campos de endereço se o endereço deve ser informado
		.enables('.dep_geoiguacu,#logradouro_geoiguacu,#logradouro_referencia',
			function(value) { return value != 2; })
		// Habilita campo do geoiguacu se endereço estiver no municipio de NI
		.enables('#logradouro_geoiguacu',
			function(value) { return value != 0; });

	$('#logradouro_idcidade')
		.enables('#logradouro_nao_cadastrado', 
				 function(value) { return value != 330350; })
		.enables('#logr_nao_cad_fora_municipio', {
			test_enable: function(value) { return value != 330350; },
			preserve_value: false,
			on_disable: function() {
				var outro = $('#logr_nao_cad_outro');
				if(!outro.attr('disabled'))
					outro.attr('checked',true);
			}
		});

	$('#logradouro_geoiguacu').mask('99999999');
	$('#logradouro_cep').mask('99999-999');
	$('#logradouro_corresp_cep').mask('99999-999');
	// }}}
	// {{{ Configuração de campos de contatos
	$('#telefone_fixo')
		.enabled_by('#nao_possui_telefone_fixo', 
					function() { return !this.checked; })
		.mask('(99)9999-9999');

	$('#telefone_celular')
		.enabled_by('#nao_possui_telefone_celular', 
					function() { return !this.checked; })
		.mask('(99)9999-9999');

	$('#telefone_recado')
		.enabled_by('#nao_possui_telefone_recado', 
					function() { return !this.checked; })
		.mask('(99)9999-9999');

	$('#email')
		.enabled_by('#nao_possui_email', 
					function() { return !this.checked; })
	// }}}

	// {{{ Configuração de campos de endereço de correspondência
	$('input[name=mesmo_logradouro_corresp]')
		.enables('.dep_endcorresp', 
				 function(value) { return value==0; })
		.shows('#campos_logr_corresp > tbody > tr:gt(0)',
				 function(value) { return value==0; });
	
	setup_combo_municipios($('#logradouro_corresp_idestado'),
						   $('#logradouro_corresp_idcidade'));
	// }}}
	
	// {{{ Configuração de campos de motivo de comparecimento
	$('#motivo_5')
		.enables('#motivo_idocupacao_medico',
				 function() { return this.checked; });
	$('#motivo_6')
		.enables('#motivo_idocupacao_enfermeiro',
				 function() { return this.checked; });
	$('#motivo_7')
		.enables('#motivo_idocupacao_outros',
				 function() { return this.checked; });

	$('#motivo_outras_internacoes')
		.enables('#motivo_24_a_27',
				 function() { return this.checked; });

	$('input[name^=motivo]').click(function() {
		$('#sem_comparecimento').valid();
	});

	$('input[name^=motivo],#comparecimento_prontuario')
		.enabled_by('#sem_comparecimento', 
					function() { return !this.checked; });
	//}}}
	
	// Configuração de campos de análise 
	$('input[name=codigo_situacao]')
		.enables('#obs_validacao', function(val) { return val == 2; });

	$('#sem_validacao').attr('disabled',true);

	// {{{ Validação de campos
	$.validator.addMethod('codigo_cns',function(value, el)
		{ return this.optional(el) || cns_valido(value); },
		'Código SUS inválido');

	$.validator.addMethod('alfanumerico', function(value, el)
		{ return value.search(/[^A-Z0-9\s]/i)==-1; },
		'Somente caracteres alfanuméricos e espaços são permitidos');

	$.validator.addMethod('alfabetico', function(value, el)
		{ return value.search(/[^A-Z\s]/i)==-1; },
		'Somente letras e espaços são permitidos');

	$.validator.addMethod('endereco',function(value, el, campo_tipo)
		{ 
			if(!this.optional(el))
			{
				var tipo = $(campo_tipo+" option:selected").text();
				if(tipo)
				{
					tipo = $.trim(tipo.toUpperCase());
					value = $.trim(value.toUpperCase());
					if(value.substr(0,tipo.length) == tipo)
						return false;
				}
			}
			return true;
		},
		'Nome do logradouro não deve conter o tipo de logradouro (Rua, Avenida,...)');

	$.validator.addMethod('codigo_cpf',function(value, el)
		{ return this.optional(el) || cpf_valido(value); },
		'CPF inválido');

	$.validator.addMethod('tamanho', function(value, el, params)
		{ return this.optional(el) || $(el).val_unmasked().length == params; },
		$.validator.format('Campo deve ter {0} caracteres'));

	$.validator.addMethod('masked_required', function(value, el, params)
		{ return $.validator.methods.required.call(this, $(el).val_unmasked(),el,params); },
		'Campo obrigatório');

	$('#cadform').validate({
		onsubmit: true,
		focusInvalid: true,
		errorClass: 'campo_erro',
		submitHandler: on_submit,
		errorPlacement: function(error, el)
		{
			switch(el.attr('name'))
			{
			default:
				error.insertAfter(el);
			}
		},
		highlight: function(el, errclass)// {{{
		{
			var boxes = $('#box_'+el.name);
			if(boxes.length == 1)
				boxes.addClass(errclass);
			else
				$(el).addClass(errclass);
		},// }}}
		unhighlight: function(el, errclass)// {{{
		{
			var boxes = $('#box_'+el.name);
			if(boxes.length == 1)
				boxes.removeClass(errclass);
			else
				$(el).removeClass(errclass);
		},// }}}
		rules:// {{{
		{
			nome:
			{
				required: true,
				alfabetico: true
			},
			nome_mae:
			{
				masked_required: '#sem_nome_mae:unchecked',
				alfabetico: true
			},
			tem_cns: 'required',
			tem_nis: 'required',
			tem_cpf: 'required',
			tem_rg: 'required',
			tem_ctps: 'required',
			tem_titulo_eleitor: 'required',
			tem_pis: 'required',
			tem_certidao: 'required',
			tem_cnh: 'required',

			cns_apresentado: 'required',
			nis_apresentado: 'required',
			cpf_apresentado: 'required',
			rg_apresentado: 'required',
			ctps_apresentado: 'required',
			titulo_eleitor_apresentado: 'required',
			pis_apresentado: 'required',
			certidao_apresentado: 'required',
			cnh_apresentado: 'required',

			idraca: 'required',
			idsexo: 'required',
			idestado_nascimento: 'required',
			idmunicipio_nascimento: 'required',
			nacionalidade: 'required',
			data_naturalizacao: 'required',

			sem_comparecimento:
			{
				required: function(el)
				{
					var req = true;
					$('input[name^=motivo]').each(function() {
						if(this.checked)
						{
							req = false;
							return false;
						}
						return true;
					});

					return req;
				}
			},
			logradouro_nome:
			{
				endereco: '#idtipo_logradouro',
				alfanumerico: true
			},
			logradouro_nao_cadastrado:
			{
				required: function(el)
				{
					return !$('#logradouro_nome').is_readonly();
				}
			},
			logradouro_nao_cad_justificativa:
			{
				required: '#logradouro_nao_cadastrado:checked'
			},
			logradouro_geoiguacu:
			{
				masked_required: '#logradouro_nao_cadastrado:unchecked',
				tamanho: 8,
			},
			logradouro_nao_cad_outra_justificativa:
			{
				required: '#logr_nao_cad_outro:checked'
			},
			logradouro_corresp_nome:
			{
				endereco: '#idtipo_logradouro_corresp',
				alfanumerico: true
			},
			cns:
			{
				tamanho: 15,
				masked_required: '#tem_cns_sim:checked',
				codigo_cns: true
			},
			nis:
			{
				tamanho: 11,
				masked_required: '#tem_nis_sim:checked',
			},
			cpf:
			{
				tamanho: 11,
				masked_required: '#tem_cpf_sim:checked',
				codigo_cpf: true,
			},
			rg:
			{
				masked_required: '#tem_rg_sim:checked',
			},
			rg_idestado_emissor:
			{
				required: '#tem_rg_sim:checked',
			},
			rg_idorgao_emissor:
			{
				required: '#tem_rg_sim:checked',
			},
			ctps:
			{
				required: '#tem_ctps_sim:checked',
			},
			ctps_serie:
			{
				required: '#tem_ctps_sim:checked',
			},
			ctps_idestado:
			{
				required: '#tem_ctps_sim:checked',
			},
			titulo_eleitor:
			{
				tamanho: 13,
				masked_required: '#tem_titulo_eleitor_sim:checked',
			},
			titulo_eleitor_zona:
			{
				digits: true
			},
			titulo_eleitor_secao:
			{
				digits: true
			},
			pis:
			{
				tamanho: 11,
				masked_required: '#tem_pis_sim:checked',
			},
			idtipo_certidao:
			{
				required: '#tem_certidao_sim:checked',
			},
			certidao_folha:
			{
				required: '#tem_certidao_sim:checked',
			},
			certidao_termo:
			{
				required: '#tem_certidao_sim:checked',
				digits: true
			},
			certidao_livro:
			{
				required: '#tem_certidao_sim:checked',
			},
			cnh:
			{
				masked_required: '#tem_cnh_sim:checked',
			},
			telefone_fixo:
			{
				tamanho: 10,
				masked_required: '#nao_possui_telefone_fixo:unchecked'
			},
			telefone_celular:
			{
				tamanho: 10,
				masked_required: '#nao_possui_telefone_celular:unchecked'
			},
			telefone_recado:
			{
				tamanho: 10,
				masked_required: '#nao_possui_telefone_recado:unchecked'
			},
			email:
			{
				email: true,
				required: '#nao_possui_email:unchecked'
			},
			data_nascimento:
			{
				masked_required: '#data_nascimento_ignorada:unchecked'
			},
			rg_data_emissao:
			{
				masked_required: '#rg_data_emissao_invalida:unchecked'
			},
			ctps_data_emissao:
			{
				masked_required: '#ctps_data_emissao_invalida:unchecked'
			},
			certidao_data_emissao:
			{
				masked_required: '#certidao_data_emissao_invalida:unchecked'
			},
			motivos_24_a_27:
			{
				masked_required: '#motivo_outras_internacoes:checked'
			},
			codigo_situacao: 'required'
		}// }}}
	});
	$.validator.messages['required'] = '';
	/// }}}

	$('*[id^=box_]').each(function()//{{{
	{
		var id = this.id;
		var children = $(this).children();
		$(this).removeAttr('id');

		$(this).append('<span style="padding-top:5px; padding-right:5px" id='+id+'></span>');
		children.appendTo('#'+id);
	});//}}}
}//}}}

