/**************************************************************
*
* CLASSE JAVASCRIPT COMBO BOX
*
* CRIADO POR: JONATAN BRANDI
* DATA: 13/07/2010
* OBS:
* EDITADO POR: JONATAN BRANDI
* DATA: 13/07/2010
* OBS:
*
*************************************************************/

function getPosicaoElemento(elemID) {
    var offsetTrail = document.getElementById(elemID);
    var offsetLeft = 0;
    var offsetTop = 0;
    while (offsetTrail) {
        offsetLeft += offsetTrail.offsetLeft;
        offsetTop += offsetTrail.offsetTop;
        offsetTrail = offsetTrail.offsetParent;
    }
    if (navigator.userAgent.indexOf("Mac") != -1 &&
			typeof document.body.leftMargin != "undefined") {
        offsetLeft += document.body.leftMargin;
        offsetTop += document.body.topMargin;
    }
    return { left: offsetLeft, top: offsetTop };
}

function documentClick (combo) {

    $(document).click(function () {
        $("#master_cont_" + combo.id).hide();
    });

    $("#bg_" + combo.id).click(function () {
        if ($("#master_cont_" + combo.id).css("display") == "none") {
            $(".master_cont").hide();
            $("#master_cont_" + combo.id).show()
        }
        else {
            $("#master_cont_" + combo.id).hide()
        }
        return false;
    });
}

function populaInput(id,descricao,controle) {
    $("#" + controle).val(descricao);
    $("#hdn_" + controle).val(id);
    $("#master_cont_" + controle).hide()
}

function replaceAll(str, de, para) {
    var pos = str.indexOf(de);
    while (pos > -1) {
        str = str.replace(de, para);
        pos = str.indexOf(de);
    }
    return (str);
}

function carregaUf(combo) {
    addNewItem({ combo: combo, value: 'AC', label: 'AC', selected: false });
    addNewItem({ combo: combo, value: 'AL', label: 'AL', selected: false });
    addNewItem({ combo: combo, value: 'AP', label: 'AP', selected: false });
    addNewItem({ combo: combo, value: 'AM', label: 'AM', selected: false });
    addNewItem({ combo: combo, value: 'BA', label: 'BA', selected: false });
    addNewItem({ combo: combo, value: 'CE', label: 'CE', selected: false });
    addNewItem({ combo: combo, value: 'DF', label: 'DF', selected: false });
    addNewItem({ combo: combo, value: 'ES', label: 'ES', selected: false });
    addNewItem({ combo: combo, value: 'GO', label: 'GO', selected: false });
    addNewItem({ combo: combo, value: 'MA', label: 'MA', selected: false });
    addNewItem({ combo: combo, value: 'MT', label: 'MT', selected: false });
    addNewItem({ combo: combo, value: 'MS', label: 'MS', selected: false });
    addNewItem({ combo: combo, value: 'MG', label: 'MG', selected: false });
    addNewItem({ combo: combo, value: 'PA', label: 'PA', selected: false });
    addNewItem({ combo: combo, value: 'PB', label: 'PB', selected: false });
    addNewItem({ combo: combo, value: 'PR', label: 'PR', selected: false });
    addNewItem({ combo: combo, value: 'PE', label: 'PE', selected: false });
    addNewItem({ combo: combo, value: 'PI', label: 'PI', selected: false });
    addNewItem({ combo: combo, value: 'RJ', label: 'RJ', selected: false });
    addNewItem({ combo: combo, value: 'RN', label: 'RN', selected: false });
    addNewItem({ combo: combo, value: 'RS', label: 'RS', selected: false });
    addNewItem({ combo: combo, value: 'RO', label: 'RO', selected: false });
    addNewItem({ combo: combo, value: 'RR', label: 'RR', selected: false });
    addNewItem({ combo: combo, value: 'SC', label: 'SC', selected: false });
    addNewItem({ combo: combo, value: 'SP', label: 'SP', selected: true });
    addNewItem({ combo: combo, value: 'SE', label: 'SE', selected: false });
    addNewItem({ combo: combo, value: 'TO', label: 'TO', selected: false });
}

function carregaFinalidade(combo) {
    addNewItem({ combo: combo, value: 'Residencial', label: 'Residencial', selected: true });
    addNewItem({ combo: combo, value: 'Comercial', label: 'Comercial', selected: false });
    addNewItem({ combo: combo, value: 'Com/Res', label: 'Com/Res', selected: false });
    addNewItem({ combo: combo, value: 'Industrial', label: 'Industrial', selected: false });
    addNewItem({ combo: combo, value: 'Rural', label: 'Rural', selected: false });
}

function carregaTipo(combo) {
    addNewItem({ combo: combo, value: 'Apartamento', label: 'Apartamento', selected: false });
    addNewItem({ combo: combo, value: 'Área', label: 'Área', selected: false });
    addNewItem({ combo: combo, value: 'Barracão', label: 'Barracão', selected: false });
    addNewItem({ combo: combo, value: 'Casa', label: 'Casa', selected: true });
    addNewItem({ combo: combo, value: 'Chácara', label: 'Chácara', selected: false });
    addNewItem({ combo: combo, value: 'Fazenda', label: 'Fazenda', selected: false });
    addNewItem({ combo: combo, value: 'Galpão', label: 'Galpão', selected: false });
    addNewItem({ combo: combo, value: 'Prédio', label: 'Prédio', selected: false });
    addNewItem({ combo: combo, value: 'Sala', label: 'Sala', selected: false });
    addNewItem({ combo: combo, value: 'Salão', label: 'Salão', selected: false });
    addNewItem({ combo: combo, value: 'Sítio', label: 'Sítio', selected: false });
    addNewItem({ combo: combo, value: 'Terreno', label: 'Terreno', selected: false });
}

function printCombo(combo) {
    var cont_width = parseInt(combo.width) - 2;
    var cont_height = parseInt(combo.height) - 4;
    var z_index_1 = 100 - parseInt(combo.z_index);
    var z_index_2 = 100 - parseInt(combo.z_index) - 1;

    $("#" + combo.destino).html("<div id='bg_" + combo.id + "' style='width: " + combo.width + "px; height: " + combo.height + "px; background: url(" + combo.background + ") no-repeat; cursor:default; ' onmouseover=\"$(this).css(\'background\', \'url(" + combo.background + ") no-repeat 0px -" + combo.height + "px\');\" " +
                                "onmouseout=\"$(this).css(\'background\', \'url(" + combo.background + ") no-repeat 0px 0px\');\">" +
                                "<input nome='" + combo.label + "' name='"+combo.name+"' type=text id=" + combo.id + " readonly=readonly  style='outline:0 none; cursor:default; width: " + combo.input_width + "px; margin-left: 6px; margin-top: " + combo.input_margin_top + "px; border: 0px; background: transparent;' />" +
                                "<input type=hidden class='chaveCombo' campo='" + combo.id + "' id=hdn_" + combo.id + " />" +
                                "</div>" +
                                "<div class=master_cont id='master_cont_" + combo.id + "' style='display:none;  width: " + cont_width + "px; top: " + cont_height + "px; max-height: 152px; border:solid 1px #CCC; border-top: 0px; background: #FFF; z-index: " + z_index_2 + "; position:absolute;'>" +
                                "<div id='cont_" + combo.id + "' style='width: " + cont_width + "px;  border-top: 0px; overflow-y: auto; overflow-x:hidden;  background: #FFF;  max-height: 152px; '>");

    if(combo.id == "inf_finalidade" || combo.id == "inf_tipo" || combo.id == "inf_cidade" || combo.id == "inf_bairro" || combo.id == "cbo_ordem" || combo.id == "cbo_exibir")
        $("#master_cont_" + combo.id).css("left", getPosicaoElemento(combo.destino).left - 9);
    else
        $("#master_cont_" + combo.id).css("left", getPosicaoElemento(combo.destino).left);
    $("#master_cont_" + combo.id).css("top", getPosicaoElemento(combo.destino).top + 22);

    combo.documentClick(combo);
    if (combo.tipo == "uf")
        carregaUf(combo);
    else if (combo.tipo == "finalidade")
        carregaFinalidade(combo);
    else if (combo.tipo == "tipo")
        carregaTipo(combo);
}

function addNewItem(parametros) {
    if (typeof (parametros.evtClick) == "undefined")
        parametros.evtClick = "atualizaCampos(\"" + parametros.combo.atualizar + "\");";    
    if (typeof (parametros.selected) == "undefined")
        parametros.selected = false;

    $("#cont_" + parametros.combo.id).append("<div style='height: 17px; color:#000; padding:0px 5px; cursor:default;' onmouseover=\"$(this).css(\'background-color\', \'#3399FF\'); $(this).css(\'color\', \'#FFF\');\" " +
                                             "onmouseout=\"$(this).css(\'background-color\', \'#FFF\'); $(this).css(\'color\', \'#000\'); \" onClick=populaInput(\"" + replaceAll(parametros.value, " ", "&nbsp;") + "\",\"" + replaceAll(parametros.label, " ", "&nbsp;") + "\",\"" + parametros.combo.id + "\");" +
                                             parametros.evtClick + " >" + parametros.label + "</div>");
    if (parametros.selected)
        populaInput(parametros.value,parametros.label,parametros.combo.id);
}


function Combo(parametros) {
    // Inicia Variaveis
    this.destino = '';
    this.id = '';
    this.width = '';
    this.input_width = '';
    this.height = '';
    this.background = '';
    this.z_index = '';
    this.atualizar = '';


    // Variaveis de controle
    this.destino = parametros.destino;
    this.label = parametros.label;
    this.name = parametros.name;
    this.id = parametros.id;
    this.tipo = (typeof (parametros.tipo) == 'undefined' ? '' : parametros.tipo);    
    this.width = parametros.width;
    this.input_width = parametros.input_width;
    this.height = parametros.height;
    this.background = parametros.background;
    this.z_index = parametros.z_index;
    this.atualizar = replaceAll(parametros.atualizar, " ", "");
    this.input_margin_top = (typeof (parametros.input_margin_top) == 'undefined' ? '1' : parametros.input_margin_top);

    // Métodos
    this.printCombo = printCombo;
    this.addNewItem = addNewItem;
    this.documentClick = documentClick;
    this.carregaUf = carregaUf;
    this.carregaFinalidade = carregaFinalidade;
    this.carregaTipo = carregaTipo;
}

