/* ===-----------=== 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 --=== */


// ------------------=== Before Calls ===------------------ //
/* As funções abaixo são invocadas antes da chamada ao
   servidor.
   Elas tem a chance de modificar, inserir ou remover dados
   do pacote a ser enviado, ou mesmo abortar todo o
   processo.                                                */


// -----------------=== getAreaValues() - beforeCall
/* Recupera os valores de uma area (div/form/etc) para envio ao servidor.
                                                     by Labs - 03/2004 */
function getAreaValues(params){

    // Pega os valores:
        var area = document.getElementById(params.area); 
        
        if (!area) return params;
        
        // Repositórios:
        var re   = /\[(.*)\]/i;
        var res  = {};
        var cres = {};
        var arr_objs = new Array();

        // O que procurar:
        var tags_arr = new Array('input', 'textarea', 'select');

        // Valores:
        var c = 0;
        var n = 0;
        var arq_arr  = new Array();
        var path_arr = new Array();
        var files    = new Array();
        var len = tags_arr.length;
        for (x=0; x<len; x++){
            var el = area.getElementsByTagName(tags_arr[x]);
            var l = el.length;
            for (y=0; y<l; y++){

                // Acerta tipo de componente:
                comp = el[y].name;//alert(el[y].name + ' - ' + el[y].type);
                
                // Verifica se é pra enviar imagens ao servidor:
                if (el[y].checkForImgs){
                    el[y].value = checkForImgs(el[y]);
                }

                // Envia arquivos ao servidor:
                if (el[y].type == 'file' && el[y].value){
                    var arq = unescape(el[y].value);
                    var fre = /\\/gi;
                    arq = arq.replace(fre, '/');
                    arq_arr[c]  = arq;
                    path_arr[c] = el[y].path;
                    files[c] = el[y];
                    c++;
                    res[comp]  = arq;

                // Trata selects multiple:
                } else if (el[y].type == 'select-multiple'){
                    var lgth = el[y].options.length;
                    var sels = {};
                    var cs   = 0;
                    for (i = 0; i < lgth ; i++){
                         if (el[y].options[i].selected){
                             sels[el[y].options[i].value] = el[y].options[i].value;
                             cs++;
                        }
                    }
                    if (cs > 0){
                        res[comp] = sels;
                    }

                } else {
                    // checkbox e radio:
                    if (el[y].force_array){
                        el[y].value = (el[y].checked ? el[y].value : 0);
                        
                    } else if ((el[y].type == 'checkbox' || el[y].type == 'radio') && !el[y].checked){
                        continue;
                    }

                    // Se já existe parâmetro com o mesmo nome:
                    if (res[comp]){

                        // Se o parâmetro já é array:
                        if (res[comp].constructor == Array){

                            // Pegamos last_index:
                            var lndx = res[comp].length ;

                        // Se não é array:
                        } else {

                            // Transformamos o param em array:
                            var lndx = 1;
                            var tmp = res[comp];
                            res[comp] = new Array();
                            res[comp][0] = tmp;
                        }
                        res[comp][lndx]  = el[y].value;

                    } else {
                        res[comp]  = el[y].value;
                    }
                }
            }
        }

        // Trata upload de arquivos:
        var len = files.length;
        if (len > 0){
            params.files = files;
        }

        // Coloca os objetos no resultado:
        var len = arr_objs.length;
        for (x=0; x<len; x++){
            res[arr_objs[x]] = eval(arr_objs[x]);
        }
        params.value = res;

  /* }catch(e){
        params._abort = 1;
        reportException(e, "Não foi possível recuperar os valores.\n");
    }*/

    // Retorna params:
    return params;

}


// -----------------=== doDelete() - beforeCall
/* Recupera os ids para deleção no servidor.
                                                     by Labs - 02/2004 */
function doDelete(params){

    // Pega os ids:
    var ids = '';
    for (var row in selRows){
         if (selRows[row]['sel']){
             ids += (ids ? ', ' + selRows[row]['id'] : selRows[row]['id']);
        }
    }

    // Verifica se pode deletar sem ids:
    if (params.can_be_empty == 0 && !ids){
        params._abort = 1;
        params._abort_msg = "Nenhum registro foi selecionado para a remoção.";
        return params;
    }

    // Pede confirmação:
    if (!confirm('Confirma a exclusão?\nAtenção! Esta ação não tem volta.')){
        params._abort = 1;
        return params;
    }

    // Coloca ids em params:
    params.p_delIds = ids;
    selRows = {};

    // Retorna params:
    return params;
}

// -----------------=== clearTimers() - beforeCall
/* Zera timers padrões - banners, etc - em caso de
   mudança de página.
   Todo módulo que usar setInterval ou setTimeout
   deverá registrar sua finalização aqui.
                                                     by Labs - 08/2004 */
function clearTimers(params){

    // Zera timers de banner:
    for (var timer_id in banners_timer){
         clearInterval(banners_timer[timer_id]);
    }

    // Zera timers de chamadas:
    for (var timer_id in chamadas_timer){
         clearInterval(chamadas_timer[timer_id]);
    }

}


