/**
 * Classe para controle das combos utilizadas no guia medico
 * 
 * arquivos relacionados:
 * 
 *   comum/js/guiamedico/guia-medico-id.js
 *     - identificacao dos ID dos campos select originais
 *     - tamanho das combos
 *     
 *   comum/js/guiamedico/guia-medico-util.js
 *     - Funcoes auxiliares     
 */

var _comboRede 			= null;
var _comboPlano			= null;
var _comboEstado 		= null;
var _comboCidade 		= null;
var _comboTpRecurso 	= null;
var _comboEspecialidade = null;
var _comboAreaAtuacao	= null;

/**
 * Metodo que inicializa as combos 
 * 
 * @return
 */
function setupCombo() {

	// combo de rede referenciada
	_comboRede = new Ext.form.ComboBox({
		typeAhead: true,
		editable: false,
		triggerAction: 'all',
		transform: idComboRede,
		mode: 'local',
		value: ' ',
		hideMode: 'offsets',
		listAlign: 'tr-br?',
		minListWidth: 140,
		width: sizeComboRede,
		minHeight: 100,
		emptyText:'Selecione',
		forceSelection:true
	});
	
	// combo de planos
	_comboPlano = new Ext.form.ComboBox({
		typeAhead: true,
		editable: false,
		triggerAction: 'all',
		transform: idComboPlano,
		mode: 'local',
		value: ' ',
		hideMode: 'offsets',
		listAlign: 'tr-br?',
		minListWidth: 250,
		width: sizeComboPlano,
		minHeight: 100,
		emptyText:'Selecione',
		forceSelection:true
	});
	
	// combo de estados
	_comboEstado  = new Ext.form.ComboBox({
		typeAhead: true,
		editable: false,
		triggerAction: 'all',
		transform: idComboEstado,
		mode: 'local',
		value: ' ',
		hideMode: 'offsets',
		listAlign: 'tr-br?',
		minListWidth: 250,
		width: sizeComboEstado,
		minHeight: 100,
		emptyText:'Selecione',
		forceSelection:true,
		tabIndex: 52
	});
	
	// combo de cidades
	_comboCidade = new Ext.form.ComboBox({
		typeAhead: true,
		editable: false,
		triggerAction: 'all',
		transform: idComboCidade,
		mode: 'local',
		value: ' ',
		hideMode: 'offsets',
		listAlign: 'tr-br?',
		minListWidth: 250,
		width: sizeComboCidade,
		minHeight: 100,
		emptyText:'Selecione',
		forceSelection:true,
		tabIndex: 53
	});

	// combo de tipo de recurso
	_comboTpRecurso = new Ext.form.ComboBox({
		typeAhead: true,
		editable: false,
		triggerAction: 'all',
		transform: idComboRecurso,
		mode: 'local',
		value: ' ',
		hideMode: 'offsets',
		listAlign: 'tr-br?',
		minListWidth: 250,
		width: sizeComboRecurso,
		minHeight: 100,
		emptyText:'Selecione',
		forceSelection:true,
		tabIndex: 54
	});

	// combo de especialidade
	_comboEspecialidade = new Ext.form.ComboBox({
		typeAhead: true,
		editable: false,
		triggerAction: 'all',
		transform: idComboEspecialidade,
		mode: 'local',
		value: ' ',
		hideMode: 'offsets',
		listAlign: 'tr-br?',
		minListWidth: 250,
		width: sizeComboEspecialidade,
		minHeight: 100,
		emptyText:'Selecione',
		forceSelection:true,
		tabIndex: 55
	});
	
	// combo de area de atuacao
	_comboAreaAtuacao = new Ext.form.ComboBox({
		typeAhead: true,
		editable: false,
		triggerAction: 'all',
		transform: idComboAreaAtuacao,
		mode: 'local',
		value: ' ',
		hideMode: 'offsets',
		listAlign: 'tr-br?',
		minListWidth: 250,
		width: sizeComboAreaAtuacao,
		minHeight: 100,
		emptyText:'Selecione',
		forceSelection:true,
		tabIndex: 56
	});
	
	////////////////////////////////////////////
	// eventos 
	////////////////////////////////////////////
	_comboRede.on('select', function(){
		popularPlano(onSuccessPlano);
	});
	
	_comboPlano.on('select', function(){
		popularRede(onSuccessRede);
	});
	
	_comboEstado.on('select', function(){
		popularCidade(onSuccessCidade);
	});
	
	_comboCidade.on('select', function(){
		if( !isCliente ) {
			consultarInformacoesUnimed();
		}
		else {
			popularRecursos();
		}
	});

	_comboTpRecurso.on('select', function(){
		popularEspecialidade();
		popularAreaAtuacao();
	});
	
	//Envia o texto da combo junto
	_comboEspecialidade.on('select', function() {
		
		var text = cbGetText(_comboEspecialidade);
		var frmGuia = $("#especialidadeText");
		
		//Se o elemento existir
		if( frmGuia.length != 0 ) {
			frmGuia.val(text);
		}
	});
}

/**
 * Remover todos os items da combo
 * @param combo
 * @return
 */
function cbRemoveAll(combo) {
	if( combo ) { 
		if(combo.store) {
			combo.store.removeAll();
		}
	}
}

/**
 * Carregar valores para a combo
 * @param data
 * @param combo
 * @param itemId
 * @param itemValue
 * @return
 */
function cbLoad(data, combo, itemId, itemValue) {
	
	var d = [];
	$.each(data, function(i, item){
		var opId    = item[itemId];
		var opValue = item[itemValue];
		d.push([opId, opValue]);
	});

	cbLoadArray(d, combo);
}

/**
 * Carregar array de valores para a combo
 * @param data
 * @param combo
 * @return
 */
function cbLoadArray(data, combo) {

	if( combo ) { 
		if(combo.store) {
			combo.store.loadData(data);
		}
	}
}

/**
 * Efetuar o foco na combo
 * @param combo
 * @return
 */
function cbFocus(combo) {
	if( combo ) {
		combo.focus(false);
	}
}

/**
 * Selecionar valor da combo
 * @param combo
 * @param value
 * @return
 */
function cbSelect(combo, value) {
	if( combo ) {
		if( cbContainsOption(combo, value) ) {
			combo.setValue(value);
		}
	}	
}

/**
 * Retornar valor (ID) atualmente selecionado na combo
 * @param combo
 * @return
 */
function cbGetValue(combo) {
	if( combo ) {
		return combo.getValue();
	}	
}

/**
 * Retornar valor (TEXTO) atualmente selecionado na combo
 * @param combo
 * @return
 */
function cbGetText(combo) {
	if( combo ) {
		return combo.getRawValue();
	}	
}

/**
 * Habilitar combo
 * @param combo
 * @return
 */
function cbEnable(combo) {
	if( combo ) {
		combo.setDisabled(false);
	}	
}

/**
 * Desabilitar combo
 * @param combo
 * @return
 */
function cbDisable(combo) {
	if( combo ) {
		combo.setDisabled(true);
	}	
}

/**
 * Adcionar opcao na combo
 * @param combo
 * @param valor
 * @param descricao
 * @return
 */
function cbAddOption(combo, valor, descricao) {
	if( combo ) {
		var d = [];
		d.push([valor, descricao]);
		cbLoadArray(d, combo);
	}	
}

/**
 * Verificar se combo possui um determinado valor
 * @param combo
 * @param valor
 * @return
 */
function cbContainsOption(combo, valor) {
	if(!Ext.isEmpty(valor, true)){
		//combo.valueField || combo.displayField
        var r = cbFindRecord(combo, combo.valueField, valor);
        if(r){
            return true;
        }
    }
	return false;
}

/**
 * Encontrar valor na combo
 * @param combo
 * @param prop
 * @param value
 * @return
 */
function cbFindRecord(combo, prop, value) {
    var record;
    if(combo.store.getCount() > 0){
    	combo.store.each(function(r){
            if(r.data[prop] == value){
                record = r;
                return false;
            }
        });
    }
    return record;	
}

/**
 * Funcao auxiliar para retornar o objeto 
 * de um elemento <select> baseado no ID
 * 
 * @return
 */
function getSelectID(elID) {
	return $(idFormGuia).find(elID);
}

