﻿function cAutoCompleteReceita() {
    //Variáveis de Uso Global.
    var objAutoComplete;
    var IDSelected;
    var intPagIndex = 1;
    var intPagIni = 0;
    var intPagFim = 10;

    //Propriedade que Define o DataTable com os Dados a Serem Buscados.
    this.objDataTable = function(_objDataTable) {
        objDataTable = new Ajax.Web.DataTable();
        objDataTable = _objDataTable;
    }

    //Propriedade que Define o DataTable com os Dados a Serem Buscados.
    this.objDataTableAux = function(_objDataTableAux) {
        objDataTableAux = _objDataTableAux;
    }

    //Propriedade que Define a Caixa de Texto do AutoComplete.
    this.objAutoComplete = function(_objAutoComplete) {
        objAutoComplete = _objAutoComplete;
    }

    //Propriedade que Define a Caixa de Texto do AutoComplete.
    this.objAutoCompleteAux = function(_objAutoCompleteAux) {
        objAutoCompleteAux = _objAutoCompleteAux;
    }

    //Propriedade que Define a Tecla que Pressionada.            
    this.e = function(_e) {
        e = _e;
    }

    //Propriedade que Define o ID Escolhido.            
    this.IDSelected = function(_IDSelected) {
        IDSelected = _IDSelected;
    }

    //Método que Exibe a Janela de AutoComplete.
    this.showAutoComplete = function() {
        if (objDataTable.Rows.length > 0 && objAutoComplete.value != "") {
            var objDvAutoComplete = document.getElementById("dvAutoComplete");
            var strResult = "<table id=\"tbAutoComplete\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" >";
            var intSelected = 0;

            intPagFim = 10;
            
            //Verifica se a Quantidade de Registros é Menor que a Paginação Final.
            if (objDataTable.Rows.length < intPagFim) {
                intPagFim = objDataTable.Rows.length;
            }

            //Valoriza a Propriedade de Total de Registros.
            objAutoCompleteAux = objAutoComplete;

            for (i = intPagIni; i < intPagFim; i++) {
                strResult += "<tr><td class='tdOut' style=\"width:236px\">";
                strResult += "<label id=\"lblAutoCompleteID" + i + "\" style=\"display:none;\">" + objDataTable.Rows[i].ID + "</label>";                
                strResult += "<div class=\"auto_complete_resumo\">";                
                strResult += "<span class=\"auto_complete_linha1\">" + objDataTable.Rows[i].NOME + "</span>";
                strResult += "</div>";
                strResult += "</td></tr>";
            }

            strResult += "</table>";

            var absPosition = new String();
            absPosition = cAutoCompleteReceita.getAbsolutePosition(objAutoComplete).toString();

            var absX = new String();
            absX = absPosition.split(",")[0];

            var absY = new String();
            absY = absPosition.split(",")[1];

            absX = absX.replace("(", "");
            absY = absY.replace(")", "");

            objDvAutoComplete.style.top = (parseInt(absY) + 25) + "px";
            objDvAutoComplete.style.left = (parseInt(absX) - 2) + "px";

            objDvAutoComplete.innerHTML = strResult;
            objDvAutoComplete.style.display = "block";

            var objTdAutoComplete = document.getElementById("tbAutoComplete").getElementsByTagName("td");

            for (i = 0; i < objTdAutoComplete.length; i++) {
                //Define o Evento de MouseOver do AutoComplete.                                                       
                objTdAutoComplete[i].onmouseover = function() {
                    var intSelected = 0;

                    intSelected = cAutoCompleteReceita.getIndexAutoComplete();
                    objTdAutoComplete[intSelected].className = "tdOut";

                    this.className = "tdOver";
                }

                //Define o Evento de MouseOut do AutoComplete.    
                objTdAutoComplete[i].onmouseout = function() {
                    this.className = "tdOut";
                }

                //Define o Evento de OnClick do AutoComplete.    
                objTdAutoComplete[i].onclick = function() {
                    intSelected = cAutoCompleteReceita.getIndexAutoComplete();
                    cAutoCompleteReceita.getReceita();

                    objAutoComplete.value = "";
                    objAutoComplete.focus();
                    objDvAutoComplete.style.display = "none";
                }
            }

            //Define o Evento de KeyDown do AutoComplete.
            objAutoComplete.onkeydown = function(ev) {
                var intSelected = 0;
                var e_aux = "";

                if (document.all)
                { e_aux = event.keyCode; }
                else
                { e_aux = ev.which; }

                //Verifica se o Indicador Sobe ou Desce na Lista de AutoComplete.
                switch (e_aux) {
                    case 13:

                        intSelected = cAutoCompleteReceita.getIndexAutoComplete();
                        cAutoCompleteReceita.getReceita();

                        objAutoComplete.value = "";
                        objAutoComplete.focus();
                        objDvAutoComplete.style.display = "none";
                        return false;
                        break;

                    case 37:
                        if (intPagIni != 0 && intPagIni != "" && intPagIni != null) {
                            cAutoCompleteReceita.setPreviousPage();
                        }
                        break;

                    case 38:
                        intSelected = cAutoCompleteReceita.getIndexAutoComplete();

                        if (intSelected > 0) {
                            objTdAutoComplete[intSelected].className = "tdOut";
                            objTdAutoComplete[intSelected - 1].className = "tdOver";
                        }
                        break;

                    case 39:
                        if (intPagFim < objDataTable.Rows.length) {
                            cAutoCompleteReceita.setNextPage();
                        }
                        break;

                    case 40:
                        intSelected = cAutoCompleteReceita.getIndexAutoComplete();

                        if (intSelected == 0 && objTdAutoComplete[0].className == "tdOut") {
                            objTdAutoComplete[intSelected].className = "tdOver";
                        }
                        else {
                            if (intSelected + 1 <= objTdAutoComplete.length - 1) {
                                objTdAutoComplete[intSelected].className = "tdOut";
                                objTdAutoComplete[intSelected + 1].className = "tdOver";
                            }
                        }
                        break;
                }
            }
        }
        else {
            var objDvAutoComplete = document.getElementById("dvAutoComplete");
            objDvAutoComplete.style.display = "none";
        }
    }

    //Recupera o Indice Selecionado pelo Usuário no AutoComplete.
    this.getIndexAutoComplete = function() {
        var objTdAutoComplete = document.getElementById("tbAutoComplete").getElementsByTagName("td");
        var intSelected = 0;

        for (i = 0; i < objTdAutoComplete.length; i++) {
            if (objTdAutoComplete[i].className == "tdOver") {
                intSelected = i;
            }
        }

        return intSelected;
    }

    //Método que Redireciona para a Página de Receitas.
    this.getReceita = function() {
        var objTdAutoComplete = document.getElementById("tbAutoComplete").getElementsByTagName("td");
        var intSelected = 0;
        var aux = 0;
        var index = 0;
        var countSelected = 0;

        //Verifica se algum registro foi selecionado.
        for (i = 0; i < objTdAutoComplete.length; i++) {
            if (objTdAutoComplete[i].className == "tdOver") {
                countSelected++;
            }
        }

        //Caso nenhum registro seja selecionado, redireciona para a busca normal.
        if (countSelected == 0) {
            cHeader.getReceitaDetalhada();
            return;
        }

        aux = (parseInt(intPagIndex) - 1) * 3;
        intSelected = cAutoCompleteReceita.getIndexAutoComplete();
        index = (intSelected + parseInt(aux));

        try {
            //Chama o Método que Codifica a Url.                    
            var strCryptUrl = Ajinomoto.Site.Interface.controls.header.cryptUrl(document.getElementById("lblAutoCompleteID" + index).innerHTML).value;
        }
        catch (err) {
            window.location = "erro.aspx?msg=" + err.description;
        }

        window.location = "receita.aspx?receita=" + strCryptUrl;
    }

    //Recupera a Posição Absoluta de Qualquer Elemento.
    this.getAbsolutePosition = function(element) {
        var ret = new cAutoCompleteReceita.Point();
        for (;
                element && element != document.body;
                ret.translate(element.offsetLeft, element.offsetTop), element = element.offsetParent
                );

        return ret;
    }

    //Cria os Pontos de Eixo "X" e "Y";
    this.Point = function(x, y) {
        this.x = x || 0;
        this.y = y || 0;
        this.toString = function() {
            return '(' + this.x + ', ' + this.y + ')';
        };
        this.translate = function(dx, dy) {
            this.x += dx || 0;
            this.y += dy || 0;
        };
        this.getX = function() { return this.x; }
        this.getY = function() { return this.y; }
        this.equals = function(anotherpoint) {
            return anotherpoint.x == this.x && anotherpoint.y == this.y;
        };
    }
}