/**
 * Funcoes AJAX utilizadas pelo guia medico
 * 
 * arquivos relacionados:
 * 
 *   comum/js/guiamedico/guia-medico-id.js
 *     - identificacao dos ID dos campos select originais
 *   
 *   comum/js/guiamedico/guia-medico-combo.js
 *     - Rotinas para utilizacao das combos
 *     
 *   comum/js/guiamedico/guia-medico-util.js
 *     - Funcoes auxiliares
 */

/**
 * Rotina para popular a combo com os valores
 * vindos da consulta AJAX
 * 
 * @param campo
 * @param data
 */
function popularCombo(campo, data) {
	
	//do objeto data, para cada objeto item encontrado executa a funcao
	var d   = [];
	$(data).find("item").each(
		function() {
			//recupera nome e valor e cria uma opcao no campo de cidade
			var nm = $(this).find("name").text();
			var vl = $(this).find("value").text();		
			d.push([vl, nm]);							
	});
	
	//remove a opcao de carregando, por favor aguarde
	cbRemoveAll(campo);
	cbLoadArray(d, campo);

	//retira a opcao desabilitada para mostrar os valores
	cbEnable(campo);

	//verificar se existe a opcao
	if( cbContainsOption(campo, '-') ) {
		cbSelect(campo, '-');
	}
	else if( cbContainsOption(campo, '0') ) {
		cbSelect(campo, '0');
	}
}

/**
 * Funcao para popular os dados da combo de cidade
 * @param funcaoOk - funcao calback para ser executada apos a carga
 * @return
 */
function popularCidade(funcaoOk) {

	limpaCidades();
	var url      = getURLServletGuiaMedico();
	var nmUf     = cbGetValue(_comboEstado);
	var cdRede   = $("input#cod_rede").val();
	var cdUnimed = $("#guia-prestador").val();
	
	var acao = "getCidadesComRedes";
	if( !isCliente ) {
			acao = "getCidadesPorEstado";
	}

	if ( !uUtil.contemVlrArray(nmUf,  new Array(null, "0", "-","--","---"))){
		$.ajax({
			type : "POST",
			url : url,
			data : { cd_unimed : cdUnimed, ds_uf : nmUf, cd_rede : cdRede,  action: acao},
			contentType: "application/x-www-form-urlencoded;charset=UTF-8",
			dataType : "xml",
			//funcao executada no campo estado enquanto esta sendo processada a requisicao de cidades
			beforeSend : function(){
				//adicionando opcao de aguarde		
				cbAddOption(_comboCidade, '.', 'Carregando, por favor aguarde ... ');
				cbSelect(_comboCidade, '.');
			},
			error : ajaxUtil.onError,
			success : funcaoOk
		});
	}
}

/**
 * Funcao para popular os dados da combo de recursos
 * @return
 */
function popularRecursos() {
	var url = getURLServletGuiaMedico();
	limpaRecursos();
	
	var selCid= cbGetValue(_comboCidade);
	var cdRede = $("input#cod_rede").val();
	var cdUnimed = $("#guia-prestador").val();
	
	var acao = "getRecursosPorEstado";
	if( !isCliente ) {
		acao = "getRecursos";
	}

	if ( !uUtil.contemVlrArray(selCid,  new Array(null, ".", "0", "-", "--","---"))){
		$.ajax({
			type : "POST",
			url : url,
			data : { cd_munic : selCid, cd_rede: cdRede, action: acao, cd_unimed : cdUnimed},
			contentType: "application/x-www-form-urlencoded;charset=UTF-8",
			dataType : "xml",
			beforeSend: function(){
				//adicionando opcao de aguarde		
				cbAddOption(_comboTpRecurso, '.', 'Carregando, por favor aguarde ... ');
				cbSelect(_comboTpRecurso, '.');
			},
		    error : ajaxUtil.onError,
		    success : onSuccessRecurso
		});		
	}
}

/**
 * Funcao para popular os dados da combo de especialidades
 * @return
 */
function popularEspecialidade(){

	var selRec = cbGetValue(_comboTpRecurso);
	var selCid = cbGetValue(_comboCidade);
	var rede   = $("input#cod_rede").val();
	var cdUnimed = $("#guia-prestador").val();

	var acao = "getEspecialidadesPorEstado";
	if( !isCliente ) {
		acao = "getEspecialidades";
	}
	
	limpaEspecialidade();
	
	if ( !uUtil.contemVlrArray(selCid,  new Array(null, ".", "0", "-","--","---"))){
		if( !isNaN(selRec) && selRec > 0 ) {
			var url = getURLServletGuiaMedico();
			$.ajax({
				type : "POST",
				url : url,
				contentType: "application/x-www-form-urlencoded;charset=UTF-8",
				data : { cd_munic : selCid, tp_recurso : selRec, cd_rede: rede, action: acao, cd_unimed: cdUnimed},
				dataType : "xml",
				beforeSend: function(){
					//adicionando opcao de aguarde		
					cbAddOption(_comboEspecialidade, '.', 'Carregando, por favor aguarde ... ');
					cbSelect(_comboEspecialidade, '.');
				},
			    error : ajaxUtil.onError,
			    success : onSuccessEspecialidade
			});
		}
	}
}

/**
 * funcao de sucesso no caso de selecao de recurso
 * @param data
 * @param textStatus
 * @return
 */
function onSuccessEspecialidade(data, textStatus){

	limpaEspecialidade();

	//retira a opcao desabilitada
	cbEnable(_comboEspecialidade);
	
	if( $("#guia-li-nome-prest").length > 0 ) { 
		$("#nm_prestador").removeAttr("disabled");
		$("#nm_prestador").removeClass("disabledField");
	}
	
	if( $("#guia-li-end-prest").length > 0 ) {
		$("#ds_bairro").removeAttr("disabled");
		$("#ds_bairro").removeClass("disabledField");
	}
	
	//do objeto data, para cada objeto item encontrado executa a funcao
	if ($(data).find("item").length > 0)
	{
		var d = [];
	
		d.push(['-',	"Selecione"]);	
		d.push(["0",	"--------------------"]);
		d.push(["00",	"Todos"]);
		d.push(["000",	"--------------------"]);
		
		$(data).find("item").each(
			function() {
			//recupera nome e valor e cria uma opcao no campo de cidade
			var nm = $(this).find("name").text();
			var vl = $(this).find("value").text();
			
			d.push([vl, nm]);							
		});
		
		cbLoadArray(d, _comboEspecialidade);
		
		// se existir o parametro da consulta,
		// manter no formulario
		if( pEspecialidade && pEspecialidade != '' && pEspecialidade != '0') {
			//verificar se existe a opcao
			if( cbContainsOption(_comboEspecialidade, pEspecialidade + '') ) {
				cbSelect(_comboEspecialidade, pEspecialidade + '');
			}			
		} 
		else {
			
			//verificar se existe a opcao
			if( cbContainsOption(_comboEspecialidade, '-') ) {
				cbSelect(_comboEspecialidade, '-');
			}
			else if( cbContainsOption(_comboEspecialidade, '0') ) {
				cbSelect(_comboEspecialidade, '0');
			}
		}
	}
	else{
		alert('Não existem especialidades para o recurso na cidade selecionada. ');
	}
}

/**
 * Funcao para popular os dados da combo de estados
 * @param load
 * @return
 */
function popularEstados(load) {

	limpaEstados();
	
	var url    	 = getURLServletGuiaMedico();	
	var cdRede 	 = $("input#cod_rede").val();
	var cdUnimed = $("#guia-prestador").val();
		
	var acao 	 = "getEstadosPorRede";
	if( !isCliente ) {
		acao = "getEstados";
	}
	
	var funcaoOk = onSuccessEstadoLoad;
	if( !load ) {
		funcaoOk = onSuccessEstadoNotLoad;
	}
	
	$.ajax({
		type : "POST",
		url : url,
		data : { cd_unimed : cdUnimed, cd_rede : cdRede,  action: acao},
		contentType: "application/x-www-form-urlencoded;charset=UTF-8",
		dataType : "xml",
		//funcao executada no campo estado enquanto esta sendo processada a requisicao de cidades
		beforeSend : function(){
			//adicionando opcao de aguarde
			cbAddOption(_comboEstado, '.', 'Carregando, por favor aguarde ... ');
			cbSelect(_comboEstado, '.');
		},
		error : ajaxUtil.onError,
		success : funcaoOk
	});
}


/**
 *  Popular os dados recebidos na combo de cidades
 *  Pre-selecionar a cidade informada
 *  @param cidade
 */
var cidadeEscolhida = "";
function popularCidadeKitSite(cidade) {
	cidadeEscolhida = cidade + "";
	popularCidade(onSuccessResultadoCidade);
}

/**
 * Popupar os dados recebidos na combo de estado.
 * @param data
 * @param textStatus
 * @return
 */
function onSuccessEstadoNotLoad(data, textStatus){
	onSuccessEstado(false, data, textStatus);
}

/**
 * Popupar os dados recebidos na combo de estado.
 * Pre-selecionar a estado informado
 * @param data
 * @param textStatus
 * @return
 */
function onSuccessEstadoLoad(data, textStatus){
	onSuccessEstado(true, data, textStatus);
}

/**
 * Popupar os dados recebidos na combo de estado.
 * 
 * @param load
 * @param data
 * @param textStatus
 * @return
 */
function onSuccessEstado(load, data, textStatus){

	popularCombo(_comboEstado, data);

	if( isCliente ) {
		if( load && (pEstado && pEstado != '') && (pCidade && pCidade != '') ) {
			if( cbContainsOption(_comboEstado, pEstado) ) {
				cbSelect(_comboEstado, pEstado);
				popularCidadeKitSite(pCidade);
			}
		}
		else {
			if( cbContainsOption(_comboEstado, ufUnimed) ) {
				cbSelect(_comboEstado, ufUnimed);
				popularCidadeKitSite(municUnimed);
			}
		}
	}
	else {
		if( load ) {
			var uf = $("input#busca_estado").val();
			if( !uUtil.contemVlrArray(uf,  new Array(null, "", " ", ".", "-","--","---", "0"))) {
				var munic = $("input#busca_cd_cidade").val();
				if( cbContainsOption(_comboEstado, uf) ) {
					cbSelect(_comboEstado, uf);
					popularCidadeKitSite(munic);	
				}
			}
		}
	}	
}	

/**
 * Popupar os dados recebidos na combo de cidade 
 * 
 * @param data
 * @param textStatus
 * @return
 */
function onSuccessResultadoCidade(data, textStatus) {

	onSuccessCidade(data, textStatus);
	
	//verificar se existe a opcao
	if( cbContainsOption(_comboCidade, cidadeEscolhida) ) {
		cbSelect(_comboCidade, cidadeEscolhida);
	}
	
	aplicarRegrasRede();
	cbFocus(_comboEstado);
		
	popularRecursos();
}

/**
 * funcao de sucesso no caso de selecao de estado
 * 
 * @param data
 * @param textStatus
 * @return
 */
function onSuccessCidade(data, textStatus){
	limpaCidades();
	popularCombo(_comboCidade, data);
}	

/**
 * funcao de sucesso no caso de selecao de unimed x recurso
 * 
 * @param data
 * @param textStatus
 * @return
 */
function onSuccessRecurso(data, textStatus){
	limpaRecursos();
	popularCombo(_comboTpRecurso, data);

	// se existir o parametro da consulta,
	// manter no formulario
	if( pRecurso && pRecurso != '' ) {
		//verificar se existe a opcao
		if( cbContainsOption(_comboTpRecurso, pRecurso + '') ) {
			cbSelect(_comboTpRecurso, pRecurso + '');
			popularEspecialidade();
		}
	}	
}	

/**
 * funcao de sucesso no caso de selecao de cidade
 * 
 * @param jsUns
 * @param textStatus
 * @return
 */
function onSuccessCidadeNotCliente(jsUns, textStatus) {
	
	if( canSwapUnimed ) {
		//adiciona para a variavel global o valor pesquisado, no caso de alterar a unimed
		jsonUnimeds = jsUns;
		//se nao necessita abrir o modal e se for uma unica unimed
		if (!showModalNotCliente() && jsonUnimeds.qtd == 1){
		    var uni = jsonUnimeds.lista[0].unimed;
		    // valida o botao para download do gm
		    onGuiaMedicoCanDown( uni );
		    //redirecionar a selecao de unimed
		    selectUnimed(uni.cd, uni.nm, false);						
		}
		else {
			if( !isCliente ) {
				limpaRecursos();
			}
			else {
				popularRecursos();
			}		
		}
	}
	else {
		popularRecursos();
	}
}

/**
 * Mostar popup modal para nao clientes 
 * quando existir mais de uma possibilidade de unimed
 * para a mesma cidade
 * 
 * @return
 */
function showModalNotCliente(){
	//somente mostrar o modal, se existir valores na variavel jsonUnimeds
	if (jsonUnimeds != null){
		//se for mais de uma unimed, ou 
		//se for uma unimed, mas essa nao tiver guia medico
	    if ((jsonUnimeds.qtd > 1) || (jsonUnimeds.qtd == 1 && jsonUnimeds.lista[0].unimed.tpguia != 1)){
		    //abrindo funcao de modal no div id : divMultiUnimed
	    	modUtil.openModal('#divMultiUnimed', function(){
				// ao mostrar o modal, para cada valor de unimed, efetuar a funcao eachUnimed
				limpaRecursos();
	    		uUtil.groupUnimed(jsonUnimeds);
		    });
		    //retornar verdadeiro caso o modal seja aberto
		    return true;
	    }
	}
	//retornar falso caso o modal nao seja necessario
	return false;
}

/**
 * Limpar combo de estado
 * @return
 */
function limpaEstados() {
	//desabilita as opcoes de recursos
	limpaSelecao(_comboEstado);
	cbDisable(_comboEstado);
	cbRemoveAll(_comboEstado);
	
	limpaCidades();
}

/**
 * Limpar combo de cidade
 * 
 * @return
 */
function limpaCidades(){
	//desabilita as opcoes 
	limpaSelecao(_comboCidade);
	cbDisable(_comboCidade);
	cbRemoveAll(_comboCidade);
	
	limpaRecursos();
}

/**
 * Limpar combo de recurso
 * @return
 */
function limpaRecursos(){
	//desabilita as opcoes
	limpaSelecao(_comboTpRecurso);
	cbDisable(_comboTpRecurso);
	cbRemoveAll(_comboTpRecurso);

	limpaEspecialidade();
}

/**
 * Limpar combo de especialidade
 * @return
 */
function limpaEspecialidade(){
	//desabilita as opcoes de especialidade
	limpaSelecao(_comboEspecialidade);
	cbDisable(_comboEspecialidade);
	cbRemoveAll(_comboEspecialidade);		
	
	if( $("#guia-li-nome-prest").length > 0 ) { 
		$("#nm_prestador").attr("disabled", "true");
		$("#nm_prestador").addClass("disabledField");
	}
	
	if( $("#guia-li-end-prest").length > 0 ) {
		$("#ds_bairro").attr("disabled", "true");
		$("#ds_bairro").addClass("disabledField");
	}	
}	

/**
 * Seleciona o item 'vazio' da combo, simulando
 * o estado de nenhuma selecao
 * 
 * @param objCombo
 * @return
 */
function limpaSelecao(objCombo) {
	
	if( cbContainsOption(objCombo, '.') ) {
		cbSelect(objCombo, '.');
	}
	if( cbContainsOption(objCombo, ' ') ) {
		cbSelect(objCombo, ' ');
	}	
	if( cbContainsOption(objCombo, '0') ) {
		cbSelect(objCombo, '0');
	}	
	if( cbContainsOption(objCombo, '-') ) {
		cbSelect(objCombo, '-');
	}
}