﻿// Archivo JScript
var strControlSelec;
var http_request= false;
var objetoReceptor = null;

function DarNombreControlCombo(strControl)
{
    return strControl.split("_").reverse()[2] + strControl.split("_").reverse()[1];//-1 por que quiero la posicion, no la cantidad
}

///Da el objeto calculado ya instanciado.
function DarObjetoCalculadoCB(IDControl)
{
    if(IDControl)
        try
        {
            var control = null; 
            if(IDControl.search("obj")==-1) 
               control = eval("".concat("obj",IDControl));                
            else
               control = eval(IDControl);   
            return control;    
        }
        catch(ex)
        {
            return null;
        }
    else
        return null;
}

///Constructor
var ComboBox = function (       ControlID,
                                strComboBoxID,
                                strHiddenFieldID,
                                strHiddenFieldNombre,
                                DataSourceUrl,
                                TextoCuandoEstaVacio,
                                ComboBoxCascadeID,
                                AutoPostBack,
                                EsPostBack,
                                Adicional,
                                UpdatePanel,
                                BuscarNombre,
                                DataSourceUrlTodos) 
{
    this.ID=ControlID;
    this.ComboBox=document.getElementById(strComboBoxID);
    this.HiddenField=document.getElementById(strHiddenFieldID);
    this.HiddenFieldNombre=document.getElementById(strHiddenFieldNombre);
    this.DataSourceUrl=DataSourceUrl;    
    this.TextoVacio=TextoCuandoEstaVacio;
    this.ComboBoxCascadeID=ComboBoxCascadeID;
    this.AutoPostBack=AutoPostBack;
    this.EsPostBack = EsPostBack.toLowerCase();    
    this.Adicional=Adicional;
    this.UpdatePanel=UpdatePanel;
    this.BuscarNombre=BuscarNombre;
    this.DataSourceUrlTodos=DataSourceUrlTodos;    
};
///////////////////////////////////////////////////////////////////////
///Propiedades
ComboBox.prototype.ID=null;
ComboBox.prototype.ComboBox=null;
ComboBox.prototype.HiddenField=null;
ComboBox.prototype.HiddenFieldNombre=null;
ComboBox.prototype.DataSourceUrl;
ComboBox.prototype.TextoVacio;
ComboBox.prototype.ComboBoxCascadeID;
ComboBox.prototype.AutoPostBack;
ComboBox.prototype.EsPostBack;
ComboBox.prototype.Adicional;
ComboBox.prototype.BuscarNombre;
ComboBox.prototype.DataSourceUrlTodos;
//////////////////////////////////////////////
///Metodos
ComboBox.prototype.RemoverTodo = function()
{
    
    if (this.ComboBox == null) return;
    this.ComboBox.options.length = 0;
    this.ComboBox.options[0] = new Option(this.TextoVacio, "-1");
    
    var objCasacade = DarObjetoCalculadoCB(this.ComboBoxCascadeID);               
    if (objCasacade != null)
    {
        objCasacade.RemoverTodo();        
    }
    
};
ComboBox.prototype.Llenar = function(e)
{
    
    if (this.ComboBox == null) return;
    this.ComboBox.onchange = this.OnChangeComboBox;    
    this.RemoverTodo();
    if(this.DataSourceUrl.search("varId")==-1)
    {
        makeRequest(this.DataSourceUrl,this);
    }
    else
    {
        makeRequest(this.DataSourceUrl.replace("varId",e.toString()),this);
    }
    
    var objCasacade = DarObjetoCalculadoCB(this.ComboBoxCascadeID);
    if (objCasacade != null)
    {
        if (objCasacade.HiddenField.value != "-1" && objCasacade.HiddenField.value != "")
        {
            this.CambioValorComboBox();
        }
    }
    
};

ComboBox.prototype.ArmarDatos = function(Xml)
{
    var encontroDato = false;
    if(Xml.getElementsByTagName("key").length != 0)
    {
        for(i=0 ; i<Xml.getElementsByTagName("key").length; i++)
        {
            var _key = DarValorXML(Xml.getElementsByTagName("key")[i]);
            var _value = DarValorXML(Xml.getElementsByTagName("value")[i]);
            this.ComboBox.options[i+1] = new Option(_value, _key);
            if (!this.BuscarNombre && this.HiddenField.value != "-1" && this.HiddenField.value == _key) 
            {
                this.ComboBox.options[i+1].selected = true;
                encontroDato = true;
            }
            if (this.BuscarNombre = "true" && this.HiddenFieldNombre.value != "" && this.HiddenFieldNombre.value == _value) 
            {
                this.ComboBox.options[i+1].selected = true;
                encontroDato = true;
            }
        }  
    }
    if (this.Adicional != "")
    {
        this.ComboBox.options[i+1] = new Option(this.Adicional, "-2");
    }
    if (!encontroDato && (this.HiddenFieldNombre.value != "" || this.HiddenField.value != "-1") && this.HiddenField.value != "0" && this.DataSourceUrlTodos != "")
    {
        this.RemoverTodo();
        makeRequest(this.DataSourceUrlTodos,this);
    }
};

ComboBox.prototype.OnChangeComboBox = function(e)
{
    e = e?e:window.event;
    var idComboBox = DarNombreControlCombo(EsIE()?e.srcElement.id:e.target.id);
    var objComboBox = DarObjetoCalculadoCB(idComboBox);
    if (objComboBox == null) return;
            
    objComboBox.CambioValorComboBox();
            
};

ComboBox.prototype.CambioValorComboBox = function()
{
    if (this.ComboBox == null) return;

    var _id = this.ComboBox.options[this.ComboBox.selectedIndex].value;
    var _text = this.ComboBox.selectedText;

    var objHidden = this.HiddenField;
    objHidden.value = _id;
    
    var objHiddenNombre = this.HiddenFieldNombre;
    objHiddenNombre.value = _text;

    if(this.ComboBox.selectedIndex >= 0)
    {
        
        var objCasacade = DarObjetoCalculadoCB(this.ComboBoxCascadeID);
               
        if (objCasacade != null)
        {                        
            if (_id == -1)
            {
                objCasacade.ComboBox.disabled = true;
                objCasacade.RemoverTodo();
            }
            else
            {
                objCasacade.ComboBox.disabled = false;
                objCasacade.Llenar(_id);
            }
        }
  
        if (this.AutoPostBack)
        {            
            __doPostBack(objHidden.id,"");
        }
                  
    }
        
};

function LLenarComboBox(idClientComboBox)
{

    var idComboBox = DarNombreControlCombo(idClientComboBox);
    var objComboBox = DarObjetoCalculadoCB(idComboBox);
    if (objComboBox == null) return;
            
    if(objComboBox.DataSourceUrl && objComboBox.DataSourceUrl.search("varId")==-1)
    {
        objComboBox.Llenar();
        if (objComboBox.EsPostBack == "true") objComboBox.CambioValorComboBox();
    }
    else
    {
        objComboBox.RemoverTodo();
    }           
        
}

function DefinirTextoVacioComboBox(idClientComboBox, TextoCuandoEstaVacio)
{

    var idComboBox = DarNombreControlCombo(idClientComboBox);
    var objComboBox = DarObjetoCalculadoCB(idComboBox);
    if (objComboBox == null) return;
            
    objComboBox.TextoVacio=TextoCuandoEstaVacio;   
        
}

function DefinirDataSourceUrlComboBox(idClientComboBox, DataSourceUrl)
{

    var idComboBox = DarNombreControlCombo(idClientComboBox);
    var objComboBox = DarObjetoCalculadoCB(idComboBox);
    if (objComboBox == null) return;
            
    objComboBox.DataSourceUrl=DataSourceUrl;   
        
}

function DefinirPostBackComboBox(idClientComboBox, AutoPostBack)
{

    var idComboBox = DarNombreControlCombo(idClientComboBox);
    var objComboBox = DarObjetoCalculadoCB(idComboBox);
    if (objComboBox == null) return;
            
    objComboBox.AutoPostBack = AutoPostBack;   
        
}