/* ===-----------=== Komanche 2.0 ===-----------===

           Copyright:     © 2004, CBA Consult ltda.
            Coded by:  Luiz Antonio B. Silva [Labs]
                      Todos os direitos reservados.

                http:         www.cbaconsult.com.br
                mail:   comercial@cbaconsult.com.br

   Gateway de comunicações com o komanche.

   Esta versão(2.0) foi inspirada nas idéias do sistema
   jsrs de autoria de Brent Ashley [jsrs@megahuge.com]

-------------=== Vs. 2.0 - Junho/2004 | By Labs --=== */


// --------------------=== After Calls ===-------------------- //
// As funções abaixo são invocadas após a chamada ao servidor.
// Elas recebem como parâmetros tanto o pacote que foi enviado
// quanto o resultado recebido do servidor.


// -----------------=== putHTML() - afterCall
/* Coloca o resultado HTML de uma chamada em um box na página.
                                                     by Labs - 02/2004 */
function putHTML(params, result){

    // Variáveis:
    var script = "";
    var areas  = result.areas;
    var box    = document.getElementById(params.box);
    if (!box){
        box = document.getElementById("_body");
    }

    // Coloca o HTML principal:
    if (result.html){
        box.innerHTML = result.html;
    }

    // Aplica o HTML das áreas:
    if (areas){
        for (var area_id in areas){
             var area = document.getElementById(area_id);
             if (area){
                 area.innerHTML = areas[area_id].html;
                 if (areas[area_id].script && areas[area_id].script != ""){
                     script += areas[area_id].script;
                 }
             }
        }
    }

    // Acerta scripts:
    script = result.script + script;
    if (script){
        window.execScript(script, "javascript");
    }

    return true;
}


// -----------------=== applyHTML() - afterCall
/* Acrescenta o resultado HTML de uma chamada em um box na página.
                                                     by Labs - 04/2004 */
function applyHTML(params, result){

    // Pega as áreas:
    var areas = result.areas;
    var script = "";

    // Coloca o HTML
    for (var area_id in areas){
        var area = document.getElementById(area_id);
        if (area){
            area.innerHTML = areas[area_id].html;
            if (areas[area_id].script && areas[area_id].script != ""){
                script += areas[area_id].script;
            }
        }
    }

    // Acerta scripts:
    if (script){
        area.innerHTML += "<script defer=\"true\" language=\"javascript1.5\">" + script + "</script>";
        window.execScript(script, "javascript");
       // insertScript(script);
    }

    return true;
}


// -----------------=== addHTML() - afterCall
/* Acrescenta o resultado HTML de uma chamada em um box na página.
                                                     by Labs - 04/2004 */
function addHTML(params, result){

    // Pega o box:
    var box = document.getElementById(params.box);
    selRows = {};

    // Coloca o HTML
    if (box){
        box.innerHTML += result.html;
        if (result.script && result.script != ""){
            box.innerHTML += "<script language=\"javascript1.5\">eval("+result.script+")</script>";
            window.execScript(result.script, "javascript");
        }
    }
    return true;
}


// -----------------=== putOptions() - afterCall
/* Acrescenta o resultado HTML de uma chamada em um box na página.
                                                     by Labs - 04/2004 */
function putOptions(params, result){

    // Pega o select:
    var sel = document.getElementById(params.select);
    sel.options.length = 0;
    
    // Cria options:
    var x = 0;
    var len = result.opts.length;
    var selected = (params.selected ? params.selected : result.selected);
    while (x < len){
        var opt = document.createElement("OPTION");
        opt.value = result.opts[x]; x++;
        opt.text  = result.opts[x]; x++;
        sel.add(opt);
    }

    if (selected){
        sel.value = selected;
    }

    return true;
}


// -----------------=== setSelOption() - afterCall
/* Acerta um option.
                                                     by Labs - 02/2004 */
function setSelOption(params, result){

    // Deu erro:
    if (result.erro){
        alert(result.erro);
        return false;
    }

    // Pega o box:
    var sel = document.getElementById(params.select);
    var opt = document.createElement("OPTION");
    opt.value = result.new_key;
    opt.text  = result.new_val;
    sel.add(opt);
    sel.value = result.new_key;
    sel.click();sel.value = result.new_key;
    return true;
}


// -----------------=== updateOption() - afterCall
/* Acerta um option.
                                                     by Labs - 09/2004 */
function updateOption(params, result){

    // Deu erro:
    if (result.erro){
        alert(result.erro);
        return false;
    }

    // Pega o box:
    var sel = document.getElementById(params.select);
    if (sel){
        sel.options[sel.selectedIndex].text = result.value;
    }
    
    return true;
}

// -----------------=== delOption() - afterCall
/* Remove um option.
                                                     by Labs - 04/2004 */
function delOption(params, result){

    // Pega o box:
    var sel = document.getElementById(params.select);
    lgth = sel.options.length-1;
    for (i = lgth; i >= 0 ; i--){
         if (sel.options[i].value == result.del_key){
             sel.options.remove(i);
        }
    }

    return true;
}

function swapOptions(from, to){
    
    var sel = document.getElementById(to);
    var opt = document.createElement("OPTION");
        
    opt.text  = from.options[from.selectedIndex].text;
    opt.value = from.options[from.selectedIndex].value;
        
    sel.options.add(opt);   
    from.options.remove(from.selectedIndex); 
}

function selectOptions(select){
    var sel = document.getElementById(select);
    lgth = sel.options.length-1;
    for (i = lgth; i >= 0 ; i--){
        sel.options[i].selected = true;
    }
}

// -----------------=== turnOff() - afterCall
/* Acerta os estilos dos campos do formulário de volta
   ao normal.
                                                     by Labs - 06/2004 */
function turnOff(params, result){

    var area = (params.area ? params.area : params.form);
    area = document.getElementById(area);
    if (!area) return true;

    // O que procurar:
    var tags_arr = new Array('input', 'textarea', 'select');
    var len = 3; //<<= tags_arr.length;

    // Armazena nome de editores HTML:
    var editores = new Array();
    var e = 0;

    // Campos:
    for (x=0; x<len; x++){
        var el = area.getElementsByTagName(tags_arr[x]);
        var l = el.length;
        for (y=0; y<l; y++){
            if (!el[y].editor){
                if (el[y].type != 'button'){
                    el[y].className = (el[y].type == 'checkbox' ? "clFrmCheckOff" : "clFrmInputOff");
                }

            } else if (el[y].className == 'clFrmMemoCode') {
                editores[e] = el[y].name;
                e++;
            }
        }
    }

    // Retorna editores para modo Layout:
    for (x=0; x<e; x++){
        swapHTML(editores[x]);
    }

    // Retorna params:
    return true;
}


// -----------------=== checkSave() - afterCall
/* Exibe erros de validação de formulário, caso existam. Senão
   atualiza a área.
                                                     by Labs - 02/2004 */
function checkSave(params, result){

    if (result.erros){
        var x = 0;
        var msg = "";
        for (var k in result.erros){
             msg += result.erros[k];

             // Altera a cor
             inp = document.all[result.ids[k]];
             inp.className = 'clFrmInputError';
             lbl = document.all[inp.label];
             if (lbl) lbl.className = "clFrmLabelError";

             // Armazena o primeiro da lista
             if (x==0) var firstInp = inp;
             x++;
        }

        if (firstInp){firstInp.focus();}
        var s = (x > 1 ? 's' : '');
        alert("Atenção! Corrija o"+s+" erro"+s+" indicado"+s+":\n"+msg);
        return false;

    } else if (result.html){
        putHTML(params, result);

    } else {
        turnOff(params, result);
        return true;
    }
}


// -----------------===  reloadMNArea:
function reloadMNArea(params, result){
    call({action: 'compAction', comp: 'mnArea',  mode: 'reload', 
          keys: params.mnArea['keys'], compId: params.mnArea['compId'], box: params.mnArea['box'], 
          area: params.mnArea['area']}, 'putHTML', 'getAreaValues');
}