// definicao das variaveis do contexto 
var formDisabled = false;
var eForm;
var fForm;
var tableId;
var controller;
var findId;
var retrieveFunction;
var hideFunction;
var canRetrieve = true;
var postProcessEntity; // pra acoes na mesma entidade
var afterProcessEntity; // pra acoes em outras entidades
var startRetrieveId = undefined;
var WINDOW_SESSION_ID = undefined;
var GRID_ROW_PER_PAGE = 5;
var byteArrays = undefined; 
var byteArraySet = new Object();

var btNovoId="btNovo";			
var btEditarId="btEditar";
var btEditarDisabledId="btEditarDisabled";
var btExcluirId="btExcluir";
var btSalvarId="btSalvar";
var btSalvarDisabledId="btSalvarDisabled";
var btPesquisarId="btPesquisar";

var btSalvarCamposId="btSalvarCampos";
var btLimparCamposId="btLimparCampos";	  

function loadDefaultButtonsConfig() {
    btNovoId="btNovo";
    btEditarId="btEditar";
    btEditarDisabledId="btEditarDisabled";
    btExcluirId="btExcluir";
    btSalvarId="btSalvar";
    btSalvarDisabledId="btSalvarDisabled";
    btPesquisarId="btPesquisar";

    btSalvarCamposId="btSalvarCampos";
    btLimparCamposId="btLimparCampos";
}


function disposeWindowContext() {
    if(WINDOW_SESSION_ID != undefined) {
        window.parent.ajaxRequestInternal("../../WindowContextDisposer?id=" + WINDOW_SESSION_ID,"",function() {});
    }
    return true;
}



function ajaxRequestInternal(url,postValues,returnFunction) {
    this.url = url;
    this.postValues = postValues;
    this.xmlhttp = false;
    
    this.create = function() {
        try {
            this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                this.xmlhttp = false;
            }
        }
        if (!this.xmlhttp && typeof XMLHttpRequest!='undefined') {
            try {
                this.xmlhttp = new XMLHttpRequest();
            } catch (e) {
                this.xmlhttp = false;
            }
        }
        if (!this.xmlhttp && window.createRequest) {
            try {
                this.xmlhttp = window.createRequest();
            } catch (e) {
                this.xmlhttp=false;
            }
        }
    }

    this.send = function() {
        var sendData = '';
        sendData += this.postValues;
        var xh = this.xmlhttp;
        xh.open("POST",this.url,true);
        xh.onreadystatechange = function() {
            if (xh.readyState == 4) {
                if (true || xh.status == 200 || xh.status == 304)	{
                    returnFunction(xh.responseText, true);
                } else {
                    returnFunction(undefined, false);
                }
            }
        };
        xh.setRequestHeader("Content-Type", "text/html; charset=UTF-8");
        xh.setRequestHeader("encoding","UTF-8");
        //        xh.setRequestHeader("Content-length", sendData.length );
        xh.send(sendData);
    }

    this.create();
    
    if (this.xmlhttp) {
        this.send();
    } else {
        alert('Este browser não suporta requisições por AJAX');
    }
}

function ajaxRequest(link,valores,funcao, action) { // action informativo para a pilha de execução
    showLoading();
    if(WINDOW_SESSION_ID != undefined) {
        valores = "{ \"WINDOW_SESSION_ID\":\"" + WINDOW_SESSION_ID + "\" , " +  valores.substring(1);
    }
	
	
    ajaxRequestInternal(link,valores,function(retorno,sucesso) {
        var retObj;
        if(sucesso) {
            try {
                retObj = parseToObject(retorno);
                if((retObj.sucess != true) && (retObj.message == 'IDLE')) {
                    alert("Sua sessão expirou devido ao prolongado tempo de inatividade.");
                    window.parent.onbeforeunload = undefined;
                    window.parent.location = "";
                }
            } catch (e) {
                retObj = {
                    sucess : false ,
                    message : 'ERRO: Problemas ao executar a operacao!'
                };
            }
        }
        if(!retObj) retObj = {
            sucess : false ,
            message : 'ERRO: Problemas ao executar a operacao!'
        };
        funcao(retObj);
        if(retObj.entity!=undefined) {
            if(afterProcessEntity!=undefined) {
                afterProcessEntity(retObj, action);
            }
        }
        hideLoading();
    });
}

function objectToFields(valores, elementos) {	
		
	 
    var size = 	elementos.length;
    for(var i=0; i < size; i++) {
		
        if(valores[elementos[i].name] != undefined){
            if(elementos[i].type == "select-one") {
                if(elementos[i].keepOnRetrieve!=true) {
                    setSelectValue(elementos[i], valores[elementos[i].name]);
                    elementos[i].lastValue = valores[elementos[i].name];
                    if(elementos[i].onchange!=undefined) {
                        if(elementos[i].ignoreOnChange != true) {
                            elementos[i].onchange();
                        }
                    }
                }
            } else {
                if((elementos[i].type != 'hidden') && (elementos[i].keepOnRetrieve!=true)) {
                    if(elementos[i].type != 'checkbox') {
                        if(elementos[i].hasMask == true) {
                            var aux = formatNumber(valores[elementos[i].name] , elementos[i].casas);                             
                            elementos[i].value = formatFloatNumber(aux,elementos[i].casas, elementos[i].ds, elementos[i].gs, elementos[i].prefix);
                        /*
                            if(elementos[i].disabled) {
                                elementos[i].disabled = false;
                                elementos[i].focus();
                                elementos[i].value = formatNumber(valores[elementos[i].name] , elementos[i].casas);
                                elementos[i].blur();
                                elementos[i].disabled = true;
                            } else {
                                elementos[i].value = formatNumber(valores[elementos[i].name] , elementos[i].casas);
                            }*/
                        } else {
                            elementos[i].value = valores[elementos[i].name];
                        }
                    } else {
                        elementos[i].checked = eval(valores[elementos[i].name]);
                    }
                }
            }
        }


    
      
    }

    if(byteArrays!=undefined) {
        for(var i=0; i< byteArrays.length; i++) {
            var fieldName = byteArrays[i];
            byteArraySet[fieldName]=undefined;
            loadByteArray(fieldName);
            if(eForm.id.value!='') {
                disableByteArray(fieldName);
            }
        }
    }

    for(var i=0; i < size; i++) {
        if(elementos[i].hasMask == true) {
            elementos[i].focus();
            elementos[i].blur();
        }
    }
}

function disableByteArray(fieldName) {
    if(byteArraySet[fieldName]==undefined) {
        setTimeout('disableByteArray("' + fieldName + '");',100);
    } else {
        byteArraySet[fieldName].getElementById('upload:'+ fieldName).disabled = true;
        byteArraySet[fieldName].getElementById('submitButton').disabled = true;
    }
}

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
            break;
        }
    }
}

function fieldsToObject(elementos) {
    var retorno = new Object();
    for(var i=0; i < elementos.length; i++) {
        if((elementos[i].name != undefined)&&(elementos[i].name!='')&&(elementos[i].name.indexOf('$toString')<0)) {
            if(elementos[i].type != 'checkbox') {
                if(elementos[i].type == 'radio'){
                    if(elementos[i].checked){
                        retorno[elementos[i].name] = elementos[i].value;
                    }
                }else{
                    if(getStyle(elementos[i], 'text-transform')=='uppercase') {
                        retorno[elementos[i].name] = elementos[i].value.toUpperCase();
                    } else {
                        retorno[elementos[i].name] = elementos[i].value;
                    }
                }
            }else {
                retorno[elementos[i].name] = elementos[i].checked;
            }
        }
    }
    return retorno;
}

function setSelectValue(selectElement, value) {		
    if(selectElement.value != value) {
        var achou = false;
        if(selectElement.length>1) {
            for(var i = 0; i < selectElement.length; i++) {
if(selectElement.options[i].value == value) 	{
                    selectElement.options[i].selected = true;
                    achou = true;
                    //selectElement.lastValue = undefined;
                    break;
                }
            }
            if(!achou) {
                if(selectElement.options[0].selected!=true) {
                    selectElement.options[0].selected = true;
                }
            }
        }
    }
}

function redfyByFor(fieldName) {
    var fElement = eval('document.'+ eForm.name + "." +fieldName );
    if(fElement) {
        var elements = document.getElementsByTagName("LABEL");
        for(var i=0; i<elements.length; i++) {
            if(elements[i].getAttribute("for") == fElement.id) {
                elements[i].style.color = "red";
                return;
            }
        }
    }
}

function unredfyByFor(fieldName) {
    if(eForm!=undefined) {
        var fElement = eval('document.'+ eForm.name + "." +fieldName );
        if(fElement) {
            var elements = document.getElementsByTagName("LABEL");
            for(var i=0; i<elements.length; i++) {
                if(elements[i].getAttribute("for") == fElement.id) {
                    elements[i].style.color = "black";
                    return;
                }
            }
        }
    }
}

function unredfyAll() {
    var elements = document.getElementsByTagName("LABEL");
    for(var i=0; i<elements.length; i++) {
        if(elements[i].parentNode.id != 'abas') {
            elements[i].style.color = "black";
        }
    }
}

function deleteEntity() {    
    if(eForm.id.value != "") {
        if(confirm("Deseja apagar o registro?")) {
            executeActionId(controller, "delete", eForm.id.value, function(retorno) {
                alert(retorno.message);
                processAction(retorno);
				try {
					if (retorno.sucess) {
						createEntity();
					}
				} catch (e) {}
            });
        }
    } else {
        alert("Selecione um registro antes de excluir!");
    }
}

function saveEntity() {
    var preEditar = retrieveFunction == undefined;    
    executeActionEntity(controller, "save", function(retorno) {
        alert(retorno.message);
        processAction(retorno);
        if(retorno.sucess) {
            if(preEditar) {
                preEditEntity();
            }
        }
    });
}

function saveTemplate() {
    executeActionEntity(controller, "saveTemplate", function(retorno) {
        if(!retorno.sucess)
            alert(retorno.message);
    });
}

function clearTemplate() {
    executeActionNull(controller, "clearTemplate", function(retorno) {
        if(!retorno.sucess)
            alert(retorno.message);
    });
}


function pdfReport() {
    executeActionEntity(controller, "doPDFReport", function(retorno) {
        if(retorno.sucess) {
            var iframe = document.createElement("iframe");
            iframe.src = "../../ReportServlet?reportId=" + new Date().getTime();
            iframe.style.display = "none";
            document.body.appendChild(iframe);
        } else {
            alert(retorno.message);
            processErrorFields(retorno);
        }
       
    });
}

function csvReport() {
    executeActionEntity(controller, "doCSVReport", function(retorno) {
        if(retorno.sucess) {
            var iframe = document.createElement("iframe");
            iframe.src = "../../ReportServlet?reportId=" + new Date().getTime();
            iframe.style.display = "none";
            document.body.appendChild(iframe);
        } else {
            alert(retorno.message);
            processErrorFields(retorno);
        }
       
    });
}

function rtfReport() {
    executeActionEntity(controller, "doRTFReport", function(retorno) {
        if(retorno.sucess) {
            var iframe = document.createElement("iframe");
            iframe.src = "../../ReportServlet?reportId=" + new Date().getTime();
            iframe.style.display = "none";
            document.body.appendChild(iframe);
        } else {
            alert(retorno.message);
            processErrorFields(retorno);
        }
       
    });
}

function xlsReport() {
    executeActionEntity(controller, "doXLSReport", function(retorno) {
        if(retorno.sucess) {
            var iframe = document.createElement("iframe");
            iframe.src = "../../ReportServlet?reportId=" + new Date().getTime();
            iframe.style.display = "none";
            document.body.appendChild(iframe);
        } else {
            alert(retorno.message);
            processErrorFields(retorno);
        }
       
    });
}


function createEntity() {
    if((eForm.state == getFormState(eForm)) || (confirm("Os dados não estão salvos. Limpar dados mesmo assim?")) ) {
        executeActionNull(controller, "create", function(retorno) {
            processAction(retorno);
            if(retorno.sucess) {
                if(document.getElementById(btEditarId)!=undefined) {
                    preNovo();
                }
            }
			
        });
    }
}

function clearEntity() {
    executeActionNull(controller, "create", function(retorno) {
        processAction(retorno);
        if(retorno.sucess) {
            if(document.getElementById(btEditarId)!=undefined) {
                preNovo();
            }
        }

    });
}


function getHiddenParams() {
    var fElements = new Array();
    var achou = false;
    for(var i=0; i<eForm.elements.length; i++) {
        if(eForm.elements[i].type == 'hidden') {
            fElements.push(eForm.elements[i]);
            achou = true;
        }
    }
    if(achou==true) {
        return fieldsToObject(fElements);
    } else {
        return undefined;
    }
}

function loadForm(id) {  
    if(id==undefined) {        
        executeActionNull(controller, "load", loadFormRetorno);
    } else {        
        executeActionId(controller, "load", id, loadFormRetorno);
    }
}

/*function semPermissao(){
    document.getElementById(btSalvarId).style.visibility = "hidden";
        document.getElementById(btSalvarDisabledId).style.visibility = "hidden";
        document.getElementById(btEditarId).style.visibility = "hidden";
        document.getElementById(btEditarDisabledId).style.visibility = "hidden";
        document.getElementById(btNovoId).style.visibility = "hidden";
        document.getElementById("btSalvarCampos").style.visibility = "hidden";
        document.getElementById("btLimparCampos").style.visibility = "hidden";
        document.getElementById(btExcluirId).style.visibility = "hidden";
        document.getElementById(btPesquisarId).style.visibility = "hidden";
        document.getElementById('abas').innerHTML = "";
        document.getElementById('conteudo').innerHTML = "<h6 style='font-family: Verdana;' align='center'>Você não tem permissão para visualizar esta área!</h6>";
}*/

function loadFormRetorno(retorno) {

    /*
            if(!((retorno._retrieve_) || (retorno._delete_) || (retorno._save_) || (retorno._create_))) {
                    eForm.innerHTML = "Você não tem permissão para visualizar esta aba";
        }
     */
    
    if(!retorno.sucess) {
        alert(retorno.message);
    } else {
        if(document.getElementById(btEditarId)!=undefined) {
            preNovo();
        }
    }
    

    processAction(retorno);


    canRetrieve = retorno._retrieve_;

    eForm._retrieve_ =  retorno._retrieve_;
    eForm._save_ =  retorno._save_;
    eForm._create_ =  retorno._create_;
    eForm._delete_ =  retorno._delete_;

    /*

            if((retorno._retrieve_) && (retorno._save_)) {
                    document.getElementById(btEditarId).style.visibility = "visible";
                    document.getElementById(btEditarDisabledId).style.visibility = "visible";
            } else {
                    document.getElementById(btEditarId).style.visibility = "hidden";
                    document.getElementById(btEditarDisabledId).style.visibility = "hidden";
            }

            if(retorno._save_) {
                    document.getElementById(btSalvarId).style.visibility = "visible";
                    document.getElementById(btSalvarDisabledId).style.visibility = "visible";
            } else {
                    document.getElementById(btSalvarId).style.visibility = "hidden";
                    document.getElementById(btSalvarDisabledId).style.visibility = "hidden";
            }

            if((retorno._create_) && (retorno._save_)) {
                     document.getElementById(btNovoId).style.visibility = "visible";
                     document.getElementById("btSalvarCampos").style.visibility = "visible";
                     document.getElementById("btLimparCampos").style.visibility = "visible";
            } else {
                    document.getElementById(btNovoId).style.visibility = "hidden";
                    document.getElementById("btSalvarCampos").style.visibility = "hidden";
                    document.getElementById("btLimparCampos").style.visibility = "hidden";
            }

            if((retorno._retrieve_) && (retorno._delete_)) {
                    document.getElementById(btExcluirId).style.visibility = "visible";
            } else {
                    document.getElementById(btExcluirId).style.visibility = "hidden";
            }
     */

    if(startRetrieveId!=undefined) {
        var aux1 = startRetrieveId;
        startRetrieveId = undefined;
        retrieveEntity(aux1);
    }

    return retorno.sucess;
}


function loadCombo(action) {
    var fElements = new Array();

    for(var i=0; i<eForm.elements.length; i++) {
        fElements.push(eForm.elements[i]);
    }
    var params = fieldsToObject(fElements);
    
    executeActionParams(controller, action, params, function(retorno) {
        if(retorno.sucess) {
            processAction(retorno);
        } else {           
            alert(retorno.message);                        
        }
    });
}

function loadFindCombo(action) {
    var fElements = new Array();

    if(eForm!=undefined) {
        for(var i=0; i<eForm.elements.length; i++) {
            fElements.push(eForm.elements[i]);
        }
    }
    
    var params = fieldsToObject(fElements);

    executeActionParams(controller, action, params, function(retorno) {
        if(retorno.sucess) {
            processActionFind(retorno);
        } else {
            alert(retorno.message);
        }
    });
}

function loadStaticCombo(action) {
    var fElements = new Array();

    for(var i=0; i<eForm.elements.length; i++) {
        fElements.push(eForm.elements[i]);
    }
    var params = fieldsToObject(fElements);
    
    executeActionParams(controller, action, params, function(retorno) {
        if(retorno.sucess) {
            processAction(retorno);
        } else {
            alert(retorno.message);
        }
    });
}
    

function retrieveEntity(id) {
    /*
    if(canRetrieve != true) {
		alert("Você não tem permissão para selecionar este registro");
		return;
	}
     */
    if((eForm == undefined)||(eForm.state == getFormState(eForm)) || (confirm("Os dados não estão salvos. Selecionar outro registro mesmo assim?")) ) {
        var preEditar = retrieveFunction == undefined;
        executeActionId(controller, "retrieve", id , function(retorno) {
            if(!retorno.sucess) {
                alert(retorno.message);
            } else {
                if(document.getElementById(findId)) {
                    hideModal(findId);
                }
            }
            
            processAction(retorno);

            if(hideFunction != undefined) {
                hideFunction();
            }
			
            if(preEditar) {
                preEditEntity();
            }

        });
    }
}


function selectAddOption(value, desc) {
    return "<option value='" + value + "'>" + desc + "</option>";
}

function selectClearOptions(element) {
    element.innerHTML = '';
}


function processEntity(retorno) {
    if(retorno.entity) {
        if(eForm != undefined) {
            clear$ToString();
            objectToFields(retorno.entity, eForm.elements);
            if(postProcessEntity != undefined) {
                postProcessEntity(retorno);
            }
        } else {
            if(retrieveFunction != undefined) {
                retrieveFunction(retorno.entity);
            }
        }
    }
}




function processTable(retorno) {
    if(retorno.table) {
        var aux = parseToObject(retorno.table);
        var data = new Object();
        data.columns =  aux.columns[0];
        data.rows =  aux.rows[0];
		 
        if(aux.sum) {
            data.sum =  aux.sum;
        }
		 
        if(aux.sumLabel) {
            data.sumLabel =  aux.sumLabel;
        }
		 
        if(aux.links) {
            data.links = aux.links[0];
        }
		 
        if(aux.removeLinks) {
            data.removeLinks = aux.removeLinks[0];
        }
		 
        mountGrid( data, tableId, GRID_ROW_PER_PAGE);
    }
}

function processErrorFields(retorno) {
    if(retorno.errorFields) {
        var fields = retorno.errorFields.toString().split(",");
        for(var i=0; i< fields.length ; i++) {
            redfyByFor(fields[i], eForm);
        }
    }
}

//alterado para carregar os combos no IE; rafael
function processAction(retorno) {
    if(eForm!=undefined) if(eForm.preProcess != undefined) eForm.preProcess();
    var browserName = navigator.appName;
    if(retorno.sucess) {
        processTable(retorno);
        if ( browserName == "Microsoft Internet Explorer" ) {
            processComboIE(retorno);
        } else {
            processCombo(retorno);
        }
        processEntity(retorno);
        if(eForm != undefined) {
            unredfyAll(eForm);
            eForm.state = getFormState(eForm);
            if(eForm.elements.length > 0) {
                //ALTERADO (COMENTADO/INATIVADO) POR EDUARDO PARA RESOLVER UM PROBLEMA PONTUAL, DEPOIS VERIFICAR A
                ////MELHOR MANEIRA DE SE PROCEDER, POIS AO DAR UM LOAD NUM COMBO, O CURSOR RETORNA AO
                //PRIMEIRO CAMPO, E NO CASO ESPECIFICO DEVERIA IR PARA O COMBO SEGUINTE
                //
                eForm.elements[0].focus();
            }
        }

    } else {
    //processErrorFields(retorno)
    }

    if(eForm!=undefined) if(eForm.posProcess !=undefined) eForm.posProcess(retorno);

}

function processCombo(retorno) {
    if(retorno.combos && eForm!=undefined) {
        var elements = eForm.elements;
        for(var i=0 ; i< elements.length; i++) {
            if(retorno.combos[elements[i].name]) {
                var comboData = '';
                var combo = retorno.combos[elements[i].name][0];
                if(elements[i].parentNode.tagName != 'AUTOSUGEST') {

                    if(((!elements[i].req)||(combo.length != 1))&&(elements[i].noSelect!=true) || (elements[i].sel)) {
                        comboData += "<option value=''>[-Selecione-]</option>";
                    }

                    for(var j=0 ; j < combo.length ; j++) {
                        comboData += "<option value='" + combo[j].value + "'>" + combo[j].label + "</option>";
                    }

                    elements[i].innerHTML = comboData;
                    if((elements[i].lastValue != undefined)&& (elements[i].lastValue != '')) {
                        setSelectValue(elements[i], elements[i].lastValue);
                        elements[i].lastValue = undefined;
                    }

                    if((elements[i].req)&&(combo.length == 1)) {
                        if(elements[i].onchange!=undefined) {
                            elements[i].onchange();
                        }
                    }
                } else {

                    for(var j=0 ; j < combo.length ; j++) {
                        //comboData += '<asitem style="display : block;" onclick="as_selectItem(' + elements[i].name + ', ' +  combo[j].value + '); onmouseover="javascript: as_select(this);as_over(this);" onmouseout="javascript: as_unselect(this);as_out(this);">' + combo[j].label + '</asitem>';
                        comboData += '<asitem style="display : block;"  onclick="as_selectItem(\'' + elements[i].name + '\', \'' +  combo[j].value + '\', this.innerHTML);" onmouseover="javascript: as_select(this);as_over(this);" onmouseout="javascript: as_unselect(this);as_out(this);">' + combo[j].label + '</asitem>';
                    }

                    var nodes = elements[i].parentNode.childNodes;
                    for(var p=0; p<nodes.length; p++) {
                        if(nodes[p].tagName=='DIV') {
                            nodes[p].innerHTML = comboData;
                            break;
                        }
                    }

                }
            }
        }

        elements = document.getElementsByTagName("selector");
        for(var i=0; i<elements.length; i++) {
            if(retorno.combos[elements[i].id]) {
                var combo = retorno.combos[elements[i].id][0];
                elements[i].sourceList.clear();
                for(var j=0 ; j < combo.length ; j++) {
                    if (isNaN(combo[j].value)){
                        if(elements[i].selectedList.getElement(combo[j].value)==undefined) {
                            elements[i].sourceList.put(combo[j].value,combo[j].label);
                        } else {
                            elements[i].sourceList.put(combo[j].value,combo[j].label, true);
                        }
                    }else{
                        if(elements[i].selectedList.getElement(parseInt(combo[j].value))==undefined) {
                            elements[i].sourceList.put(parseInt(combo[j].value),combo[j].label);
                        } else {
                            elements[i].sourceList.put(parseInt(combo[j].value),combo[j].label, true);
                        }
                    }
                }

                elements[i].sourceList.sort();
                elements[i].renderer();
            }
        }

    }

}

function processComboIE( retorno ) {
    if(retorno.combos && eForm!=undefined) {
        var elements = eForm.elements;

        //alert(elements.length);
        for(var i=0 ; i< elements.length; i++) {
            
            if(retorno.combos[elements[i].name]) {
                var combo = retorno.combos[elements[i].name][0];

                if(elements[i].parentNode.tagName != 'AUTOSUGEST') {
                    var obj = elements[i];

                    if(((!elements[i].req)||(combo.length != 1))&&(elements[i].noSelect!=true) || (elements[i].sel)) {
                        obj.options[obj.length] = new Option( "[-Selecione-]","");

                    }

                    for(var j=0 ; j < combo.length ; j++) {
                        obj.options[obj.length] = new Option( combo[j].label, combo[j].value);
                    }

                    if((elements[i].lastValue != undefined)&& (elements[i].lastValue != '')) {
                        setSelectValue(elements[i], elements[i].lastValue);
                        elements[i].lastValue = undefined;
                    }

                    if((elements[i].req)&&(combo.length == 1)) {
                        if(elements[i].onchange!=undefined) {
                            elements[i].onchange();
                        }
                    }
                } else {
                    for(var j=0 ; j < combo.length ; j++) {
                        //comboData += '<asitem style="display : block;" onclick="as_selectItem(' + elements[i].name + ', ' +  combo[j].value + '); onmouseover="javascript: as_select(this);as_over(this);" onmouseout="javascript: as_unselect(this);as_out(this);">' + combo[j].label + '</asitem>';
                        comboData += '<asitem style="display : block;"  onclick="as_selectItem(\'' + elements[i].name + '\', \'' +  combo[j].value + '\', this.innerHTML);" onmouseover="javascript: as_select(this);as_over(this);" onmouseout="javascript: as_unselect(this);as_out(this);">' + combo[j].label + '</asitem>';
                    }
                    var nodes = elements[i].parentNode.childNodes;
                    for(var p=0; p<nodes.length; p++) {
                        if(nodes[p].tagName=='DIV') {
                            nodes[p].innerHTML = comboData;
                            break;
                        }
                    }

                }
            }
        }
        elements = document.getElementsByTagName("div");
        for(var i=0; i<elements.length; i++) {
            if(elements[i].selector){
                if(retorno.combos[elements[i].id]) {
                    var combo = retorno.combos[elements[i].id][0];
                    elements[i].sourceList.clear();
                    for(var j=0 ; j < combo.length ; j++) {
                        if (isNaN(combo[j].value)){
                            if(elements[i].selectedList.getElement(combo[j].value)==undefined) {
                                elements[i].sourceList.put(combo[j].value,combo[j].label);
                            } else {
                                elements[i].sourceList.put(combo[j].value,combo[j].label, true);
                            }
                        }else{
                            if(elements[i].selectedList.getElement(parseInt(combo[j].value))==undefined) {
                                elements[i].sourceList.put(parseInt(combo[j].value),combo[j].label);
                            } else {
                                elements[i].sourceList.put(parseInt(combo[j].value),combo[j].label, true);
                            }
                        }
                    }
                    elements[i].sourceList.sort();
                    elements[i].renderer();
                }
            }
        }
    }

}
/*
function processAction(retorno) {
    if(eForm!=undefined) if(eForm.preProcess != undefined) eForm.preProcess();
    
    if(retorno.sucess) {
        processTable(retorno);
        processCombo(retorno);
        processEntity(retorno);
        if(eForm != undefined) {
            unredfyAll(eForm);
            eForm.state = getFormState(eForm);
            if(eForm.elements.length>0) {
                eForm.elements[0].focus();
            }            
        }

    } else {
    //processErrorFields(retorno)
    }
	
    if(eForm!=undefined) if(eForm.posProcess !=undefined) eForm.posProcess(retorno);
	  
}
*/

function processActionFind(retorno) {
    if(eForm!=undefined) if(eForm.preProcess != undefined) eForm.preProcess();
	 
    if(retorno.sucess) {
        if(retorno.table) {
            var aux = parseToObject(retorno.table);
            var data = new Object();
            data.columns =  aux.columns[0];
            data.rows =  aux.rows[0];
            data.links = aux.links[0];
            mountGrid( data, tableId, GRID_ROW_PER_PAGE );
        }


        if(retorno.combos) {
            var elements = fForm.elements;
            for(var i=0 ; i< elements.length; i++) {
                if(retorno.combos[elements[i].name]) {
                    var comboData = '';
                    var combo = retorno.combos[elements[i].name][0];

                    if((!elements[i].req)||(combo.length != 1)) {
                        comboData += "<option value=''>[-Selecione-]</option>";
                    }

                    for(var j=0 ; j < combo.length ; j++) {
                        comboData += "<option value='" + combo[j].value + "'>" + combo[j].label + "</option>";
                    }

                    elements[i].innerHTML = comboData;
                    if((elements[i].lastValue != undefined)&& (elements[i].lastValue != '')) {
                        setSelectValue(elements[i], elements[i].lastValue);
                        elements[i].lastValue = undefined;
                    }

                    if((elements[i].req)&&(combo.length == 1)) {
                        if(elements[i].onchange!=undefined) {
                            elements[i].onchange();
                        }
                    }

                }
            }
        }

    }
    if(eForm!=undefined) if(eForm.posProcess !=undefined) eForm.posProcess(retorno);
}

function executeActionId(controllerVar, action, id, retFunction) {
    var sendObj = new Object();
    sendObj.id = id;
    sendObj.action = action;
    sendObj.controller = controllerVar;    
    if(eForm!= undefined) {
        var auxp = getHiddenParams();
        if(auxp!=undefined) {
            sendObj.params =  auxp;
        }
    }
         
    var sendData = JSON.stringify(sendObj);
    ajaxRequest("../../RequestServlet",sendData , retFunction, action);
}

function executeActionEntity(controllerVar, action, retFunction) {
    var sendObj = new Object();
    sendObj.entity = fieldsToObject(eForm.elements);
    sendObj.action = action;
    sendObj.controller = controllerVar;

    

    var elements = document.getElementsByTagName("selector");    
    for(var i=0; i<elements.length; i++) {
        sendObj.entity[elements[i].id] = elements[i].getValue();
    }

    elements = document.getElementsByTagName("div");
    for(var i=0; i<elements.length; i++) {
        if(elements[i].selector){
            sendObj.entity[elements[i].id] = elements[i].getValue();
        }
    }

    if(eForm!= undefined) {
        var auxp = getHiddenParams();
        if(auxp!=undefined) {
            sendObj.params =  auxp;
        }
    }
         
    var sendData = JSON.stringify(sendObj);
    ajaxRequest("../../RequestServlet",sendData , retFunction, action);
}

function executeActionNull(controllerVar, action, retFunction) {    
    
    var sendObj = new Object();
    sendObj.action = action;
    sendObj.controller = controllerVar;    
    if(eForm!= undefined) {
        sendObj.params = getHiddenParams();
    }    
    var sendData = JSON.stringify(sendObj);
    ajaxRequest("../../RequestServlet", sendData , retFunction, action);
}

function executeActionParams(controllerVar, action, params, retFunction) {    
    var sendObj = new Object();
    sendObj.action = action;
    sendObj.controller = controllerVar;
    sendObj.params = params;
    var sendData = JSON.stringify(sendObj);
    ajaxRequest("../../RequestServlet", sendData , retFunction, action);
}

function getFormState() {
    return JSON.stringify(fieldsToObject(eForm.elements));
}


function showModal(elementId) {    
    document.getElementById('modalDiv').style.display = '';
    document.getElementById(elementId).style.display = '';
    
}


function hideModal(elementId) {    
    document.getElementById(elementId).style.display = 'none';
    document.getElementById('modalDiv').style.display = 'none';
}


function showLoading() {
    if(document.getElementById('loadingModalDiv')!=undefined) {
        document.getElementById('loadingModalDiv').style.display = '';
        document.getElementById('loading').style.display = '';
    } else if(window.parent.document.getElementById('loadingModalDiv')!=undefined) {
        window.parent.document.getElementById('loadingModalDiv').style.display = '';
        window.parent.document.getElementById('loading').style.display = '';
    }
    
}


function hideLoading() {
    if(document.getElementById('loadingModalDiv')!=undefined) {
        document.getElementById('loading').style.display = 'none';
        document.getElementById('loadingModalDiv').style.display = 'none';
    } else if(window.parent.document.getElementById('loadingModalDiv')!=undefined) {
        window.parent.document.getElementById('loading').style.display = 'none';
        window.parent.document.getElementById('loadingModalDiv').style.display = 'none';
    }
}



function selectRadioById(elementId) {
    document.getElementById(elementId).checked = true;
}

function findEntity() {
    var action = fForm.findOption.value;
    var fElements = new Array();
    
    for(var i=0; i<fForm.elements.length; i++) {
        if(fForm.elements[i].name!= 'findOption') {
            fElements.push(fForm.elements[i]);
        }
    }

    if(eForm != undefined) {
        for(var i=0; i<eForm.elements.length; i++) {
            if(eForm.elements[i].type == 'hidden') {
                fElements.push(eForm.elements[i]);
            }
        }
    }
    
    var params = fieldsToObject(fElements);
    
    executeActionParams(controller, action, params, function(retorno) {
        if(!retorno.sucess) {
            alert(retorno.message);
        }
        processActionFind(retorno, tableId);
    });
}



function showFind() {
    if((eForm==undefined) && (formDisabled)) {
        alert('Clique no botão editar para alterar os dados.');
        hideFunction();
        return;
    }
    showFindFields(fForm.findOption);	
    document.getElementById(tableId).innerHTML = '';
    showModal(findId);

	inputFindFocus();
	searchOnEnter();
}

function showFindForFind() {
    showFindFields(fForm.findOption);
    document.getElementById(tableId).innerHTML = '';
    showModal(findId);
	
	inputFindFocus();
	searchOnEnter();
}


function showFindFields(element) {
    var focusDiv;
    for(var i=0; i<element.length ; i++) {
        if(element.options[i].value!='') {
            //if(element.options[i].selected == true) {
            var elDiv = document.getElementsByTagName("DIV");
            for(var k=0; k < elDiv.length; k++) {
                if(elDiv[k].id == element.options[i].value) {
                    if(isParent(document.getElementById(findId), elDiv[k])) {
                        if(element.options[i].selected == true) {
                            elDiv[k].style.display = '';
                            focusDiv = elDiv[k];
							if ( fForm )
								inputFindFocus();
                        } else {
                            elDiv[k].style.display = 'none';
                        }
                    }
                }
            }
					  
        /*} else {
                document.getElementById(element.options[i].value).style.display = 'none';
            }*/
        }
    }
}


//posiciona o foco no primeiro elemento da busca
function inputFindFocus() {
	try {
		//seleciona a div de inputs de busca
		var divInputs = $("#"+$(fForm.findOption).val(), fForm);
		$(":input:text:enabled:visible:first", divInputs).focus();
	} catch (ex) {}
}

//aciona a busca quando o ENTER é pressionado
function searchOnEnter() {
	try {
		//pega os options do findOption
		var findOptions = $("select[name=findOption] > option", fForm);
		findOptions.each( function (i, opt ) {
			//pega o primeiro input da busca
			var firstInput = $("#"+$(opt).val()+" > :input:text:enabled:first", fForm);
			firstInput.unbind();
			firstInput.keyup( function(e) {
				//se a tecla pressionada foi ENTER
				var el = $(this);
				if ( e.keyCode == 13 && el.val() != el.attr("old_value")) {
					el.attr("old_value", el.val());
					$("#btPesquisarC",fForm).click();
				}
			});
		});
	} catch(ex) {}
}


function isParent(root, child) {
	
    if(child.parent == root) {
        return true;
    }
	 
}

function hideFind() {
    hideModal(findId);
    if(hideFunction != undefined) {
        hideFunction();
    }
}




function clear$ToString() {
    for(var i=0; i<eForm.elements.length; i++) {
        if((eForm.elements[i].name)&&(eForm.elements[i].name.match('\\$toString')!=null)) {
            eForm.elements[i].value = '';
        }
    }

}


function disableForm(form) {
    var elements = form.elements;
    formDisabled = true;
    eForm.formDisabled = true;
    for(var i=0; i< elements.length; i++) {
        elements[i].disabled = true;
    }
/*
    if(byteArrays!=undefined) {
      for(var i=0; i< byteArrays.length; i++) {
          var fieldName = byteArrays[i];
          if(byteArraySet[fieldName]!=undefined) {
              byteArraySet[fieldName].getElementById('upload:'+ fieldName).disabled = true;              
          }
      }
    }
     */
}

function enableForm(form) {
    var elements = form.elements;
    formDisabled = false;
    eForm.formDisabled = false;    
    for(var i=0; i< elements.length; i++) {
        elements[i].disabled = false; 
    }

    if(byteArrays!=undefined) {
        for(var i=0; i< byteArrays.length; i++) {
            var fieldName = byteArrays[i];
            if(byteArraySet[fieldName]!=undefined) {
                byteArraySet[fieldName].getElementById('upload:'+ fieldName).disabled = false;
                byteArraySet[fieldName].getElementById('submitButton').disabled = false;
            }
        }
    }
  
}


function editEntity() {	
	
    enableForm(eForm);
    document.getElementById(btEditarId).style.display = 'none';
	
    if(document.getElementById('btEstornar')!=undefined) {
        document.getElementById('btEstornar').style.display = 'none';
    }
	  
    document.getElementById(btSalvarId).style.display = '';

    document.getElementById(btEditarDisabledId).style.display = '';
    document.getElementById(btSalvarDisabledId).style.display = 'none';

    if(document.getElementById('btEstornarDisabled')!=undefined) {
        document.getElementById('btEstornarDisabled').style.display = '';
    }


    var elements = eForm.elements;
    for(var i=0; i<elements.length; i++) {
        if(elements[i].disabledOnUpdate == true) {
            elements[i].disabled = true;
        }
    }
    focusFirst(eForm);
}

function preEditEntity() {
    disableForm(eForm);
    document.getElementById(btEditarId).style.display = '';
    document.getElementById(btSalvarId).style.display = 'none';
    if(document.getElementById('btEstornar')!=undefined) {
        document.getElementById('btEstornar').style.display = '';
    }
	 

    document.getElementById(btEditarDisabledId).style.display = 'none';
    document.getElementById(btSalvarDisabledId).style.display = '';
    if(document.getElementById('btEstornarDisabled')!=undefined) {
        document.getElementById('btEstornarDisabled').style.display = 'none';
    }
	 
}


function preNovo() {
	  
    enableForm(eForm);
    document.getElementById(btEditarId).style.display = 'none';
    document.getElementById(btSalvarId).style.display = '';

    if(document.getElementById('btEstornar')!=undefined) {
        document.getElementById('btEstornar').style.display = 'none';
    }

    document.getElementById(btEditarDisabledId).style.display = '';
    document.getElementById(btSalvarDisabledId).style.display = 'none';

    if(document.getElementById('btEstornarDisabled')!=undefined) {
        document.getElementById('btEstornarDisabled').style.display = '';
    }


    var elements = eForm.elements;
	
    for(var i=0; i<elements.length; i++) {
        if(elements[i].disabledOnInsert == true) {
            elements[i].disabled = true;
        }
    }
    focusFirst(eForm);

}


function focusFirst(form) {	
    for(var i=0; i< form.elements.length; i++) {
        if((form.elements[i].type != "hidden") && (form.elements[i].disabled != true) && (form.elements[i].readOnly != true)) {
            form.elements[i].focus();
            break;
        }
    }
}

function isParent(root, child) {
    if(child.parentNode == root) {
        return true;
    } else if( (child.parentNode != undefined)&& (child.parentNode != 'BODY') ){
        return isParent(root, child.parentNode);
    } else {
        return false;
    }
}


function formatNumber(number , casas) {
    var strNumber = new String(number);
    var strArray = strNumber.split(/\./);
    kasas = parseInt(casas);
    if(strArray.length > 1) {
        if(strArray[1].length > kasas) {
            return strArray[0] + strArray[1].substring(0,kasas);
        } else {
            var retorno = strArray[0]  +  strArray[1]
            for(var i=strArray[1].length; i<kasas; i++) {
                retorno += '0';
            }
            return retorno;
        }
    } else {
        var retorno = strArray[0];
        for(var i=0; i<kasas; i++) {
            retorno += '0';
        }
        return retorno;
    }
}


var searchTimeout = undefined;
var lastSearch = undefined;
function textSearch(ele, minSize, waitTime, funcao, maxSize) {
    if(ele.value!=lastSearch) {
        lastSearch = ele.value;
        if(searchTimeout != undefined) {
            clearTimeout(searchTimeout);
        }
        if(ele.value.length>=minSize) {
            if(maxSize!=undefined && ele.value.length>=maxSize) {
                eval(funcao);
            } else {
                searchTimeout = setTimeout(funcao, waitTime);
            }            
        }
    }
}



function deleteEntityOnTable(id) {    
    executeActionId(controller, "delete", id, function(retorno) {
        if(!retorno.sucess) {
            alert(retorno.message);
        }
        processAction(retorno);
    });
}


function upDownTabIndex(el, ev) {
    var eles = document.forms[0].elements;

    if(ev.keyCode==40) {
        for(var i=0; i< eles.length; i++) {
            if( (eles[i].tabIndex - 1) == el.tabIndex) {
                eles[i].focus();
                break;
            }
        }
    }
    if(ev.keyCode==38) {
        for(var i=0; i< eles.length; i++) {
            if( (eles[i].tabIndex + 1) == el.tabIndex) {
                eles[i].focus();
                break;
            }
        }
    }
}



function getStyle(x,styleProp) 	{
    var y;
    if (x.currentStyle) {
        y = x.currentStyle[styleProp];
    } else if (window.getComputedStyle) {
        y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
    }
    return y;
}


function loadByteArray(id) {    
    var el = document.getElementById(id);
    var size = '';
    var width = "100%";
    var height = "100px";
    var maxdim = "60";
    var showThumb = "true";
    var customPage= "../../jspf/upload.jsp";

    if(el.getAttribute("customPage")!=null) {
        customPage = el.getAttribute("customPage") ;
    }

    if(el.getAttribute("showthumb")!=null) {
        if(el.getAttribute("showthumb") != 'true') {
            showThumb = "false";
            height = "55px";
        }
    } 

    if(el.getAttribute("height")!=null) {
        height = el.getAttribute("height") ;
    } 

    if(el.getAttribute("width")!=null) {
        width = el.getAttribute("width") ;
    } 

    if(el.getAttribute("maxdim")!=null) {
        maxdim = el.getAttribute("maxdim") ;
    } 

    var style = 'width : ' + width + ' ; height : '+ height + '; border :1px solid black;';
    
    if(el.getAttribute("size")!=null) {
        size = '&size=' + el.getAttribute("size") ;
    } 
    if(el.getAttribute("style")!=null) {
        style = el.getAttribute("style") ;
    }
    el.innerHTML = '<iframe src="'+ customPage +'?fieldname=' + el.id + '&wid=' + WINDOW_SESSION_ID + size + '&maxdim=' + maxdim + '&showthumb=' + showThumb +'" style="' + style + '"></iframe>'        
}


function loadImageCollecion(el) {
    var size = '';
    var width = "100%";
    var height = "55px";

    if(el.getAttribute("height")!=null) {
        height = el.getAttribute("height") ;
    } 

    if(el.getAttribute("width")!=null) {
        width = el.getAttribute("width") ;
    } 


    var style = 'width : ' + width + ' ; height : '+ height + '; border :1px solid black;';
    
    if(el.getAttribute("size")!=null) {
        size = '&size=' + el.getAttribute("size") ;
    } 
    if(el.getAttribute("style")!=null) {
        style = el.getAttribute("style") ;
    }
    el.innerHTML = '<iframe src="../../jspf/zipUpload.jsp?wid=' + WINDOW_SESSION_ID + size + '" style="' + style + '"></iframe>'        
}



function loadByteArrays() {
    var elements = document.getElementsByTagName("bytearray");
    for(var i=0; i<elements.length; i++) {
        loadByteArray(elements[i].id);
    }
    elements = document.getElementsByTagName("img-collection");
    for(var i=0; i<elements.length; i++) {
        loadImageCollecion(elements[i]);
    }   
    
}









function as_show(elId, inputEl) {
    var els = document.getElementById(elId).childNodes;
    for(var i=0; i<els.length; i++) {
        if(els[i].tagName == 'ASITEM') {
            if(els[i].selected==true) {
                els[i].selected=false;
                els[i].style.background = '#FFFFFF';
            }
        }
    }
    document.getElementById(elId).scrollTop = 0;
    document.getElementById(elId).showed = true;
    document.getElementById(elId).style.width = (inputEl.offsetWidth-1) + 'px';
    document.getElementById(elId).style.marginTop = '1px';
    document.getElementById(elId).style.marginLeft = '0px';
    document.getElementById(elId).style.marginRight = '0px';
    document.getElementById(elId).style.marginBottom = '0px';
    
    document.getElementById(elId).style.display = '';
}

function as_hide(elId) {
    document.getElementById(elId).showed = false;
    setTimeout( "document.getElementById('" + elId + "').style.display = 'none'",200);

}

function as_select(el) {
    var els = el.parentNode.childNodes;
    for(var i=0; i<els.length; i++) {
        if(els[i].tagName == 'ASITEM' && els[i]!=el) {
            if(els[i].selected==true) {
                els[i].selected=false;
                els[i].style.background = '#FFFFFF';
            }
        }
    }
    el.style.background = '#DDDDDD';
    el.selected = true;

}
function as_unselect(el) {
    el.style.background = '#FFFFFF';
    el.selected = false;
}

function as_over(el) {
    el.isover = true;
}

function as_out(el) {
    el.isover = false;
}

function as_run_over(elId) {
    var els = document.getElementById(elId).childNodes;
    for(var i=0; i<els.length; i++) {
        if(els[i].tagName == 'ASITEM') {
            if(els[i].isover==true) {
                els[i].onclick();
            }
        }
    }
}

function as_move(elId, evt) {
    if(evt.keyCode==38 || evt.keyCode==40) {
        var els = document.getElementById(elId).childNodes;
        var divs = new Array();
        var selDiv = undefined;
        var selPos = undefined;
        for(var i=0; i<els.length; i++) {
            if(els[i].tagName == 'ASITEM') {
                if(els[i].selected==true) {
                    selPos = divs.length;
                    selDiv = els[i];
                }
                divs.push(els[i]);
            }
        }
        if(divs.length>0) {
            var ts = document.getElementById(elId).offsetHeight;
            var sum = 0;

            if(evt.keyCode==40) {
                if(selDiv==undefined) {
                    selPos = 0;
                } else {
                    selPos++;
                    if(divs.length<=selPos) {
                        return;
                    }
                }

                for(var k=0; k<=selPos; k++) {
                    sum += divs[k].offsetHeight;
                }

                if((document.getElementById(elId).scrollTop - (sum - ts))<0) {
                    document.getElementById(elId).scrollTop = sum - ts;
                }


            } else if(evt.keyCode==38) {
                if(selDiv==undefined) {
                    selPos = divs.length-1;
                } else {
                    selPos--;
                    if(selPos<0) {
                        return;
                    }
                }

                for(var k=0; k<selPos; k++) {
                    sum += divs[k].offsetHeight;
                }

                if((document.getElementById(elId).scrollTop - sum)>0) {
                    document.getElementById(elId).scrollTop = sum;
                }
            }
            as_select(divs[selPos]);

        }
    } else if(evt.keyCode==13) {
        var els = document.getElementById(elId).childNodes;
        for(var i=0; i<els.length; i++) {
            if(els[i].tagName == 'ASITEM') {
                if(els[i].selected==true) {
                    els[i].onclick();
                }
            }
        }
    } else {
//alert(evt.keyCode);
}
}

function as_blur(elId) {
    document.getElementById(elId).blur();
}


function loadAutoSugest(el) {
    var elName = el.getAttribute("name");
    var method = el.getAttribute("method");
    var style = "";
    if(el.getAttribute("style")!=null) {
        style = el.getAttribute("style") ;
    }

    var delay = "300";
    if(el.getAttribute("delay")!=null) {
        delay = el.getAttribute("delay") ;
    }

    var maxSize = "50";
    if(el.getAttribute("maxsize")!=null) {
        maxSize = el.getAttribute("maxsize") ;
    }


    var minSize = "4";
    if(el.getAttribute("minsize")!=null) {
        minSize = el.getAttribute("minsize") ;
    }

    var height = "100";
    if(el.getAttribute("height")!=null) {
        height = el.getAttribute("height") ;
    }


    var elId = el.id;
    var rand = elName + '_' + new Date().getTime();
    var comp = '<input name="' + elName +'" type="hidden">';
    comp  += '<input name="' + elName + '$sugest" id="' + elId +  '" onclick="as_run_over(\'' + rand + '\');" onfocus="javascript: as_show(\'' + rand +'\', this);" onblur="javascript: as_hide(\'' + rand + '\');"  onkeypress="javascript: as_move(\'' + rand + '\', event);" onkeyup="javascript: if(document.getElementById(\'' + rand + '\').showed==true) textSearch(this, ' + minSize + ', ' + delay + ' ,\'loadCombo(\\\'' + method + '\\\');\',' + maxSize + ');" style="' + style + '">';
    comp += '<div id="' + rand + '" onclick="as_run_over(\'' + rand + '\');" style="background : #FFFFFF; font-family : verdana; font-size : 10px; display : none; position: absolute; border : 1px solid black; height : ' + height + 'px; overflow: auto;"></div>';
    el.innerHTML = comp;
}

function loadAutoSugests() {
    var ass = document.getElementsByTagName('autosugest');
    for(var ii=0; ii< ass.length; ii++) {
        loadAutoSugest(ass[ii]);
    }
}

function as_selectItem( name , value ,label ) {
    
    lastSearch = label;
    eForm[name].value = value;
    eForm[name + "$sugest"].value = label;
    var els = eForm[name].parentNode.childNodes;
    for(var i=0; i<els.length; i++) {
        if(els[i].tagName == 'DIV') {
            as_hide(els[i].id);
        }
    }
    eForm[name + "$sugest"].blur();
    
    if(eForm[name].parentNode.getAttribute('onchange')!=null) {
        eval(eForm[name].parentNode.getAttribute('onchange'));
    }    
}
