﻿/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />



Type.registerNamespace("UI.Controls");

//
UI.Controls.EventFilterBehavior = function(element) {
    /// <summary>
    /// Administra el panel para localización en el mapa
    /// </summmary>
    /// <param name="element" type="Sys.UI.DomElement">The element to attach to</param>
    UI.Controls.EventFilterBehavior.initializeBase(this, [element]);
    // Referencia a Controles y objetos
    this._parentControl = null;         // Referencia al control de mapas
    this._container = null;             // contenedor
    this._txtFechaDesde = null;         // Control texto para carga de fecha desde
    this._txtFechaHasta = null;         // Control texto para carga de fecha Hasta
    this._chkTiposDelito = [];          // Tipos de delito
    this._chkTiposOrigen = [];          // Checkboxes para tipos de origen de carga
    // Fields
    this._CfgFiltro = null;             // Representa al filtro generado
    this._CfgTiposDelito = null;        // Lista de tipos de delito
    this._CfgTiposOrigen = null;        // Lista de tipos de origen de carga
    this._EventFilterPanelId = null;    // Id del Panel para desarrollar controles
    this._ServicePath = null;           // Ruta del servicio web con el método para insertar un delito
    // Eventos
    this._txtFechaDesde$delegates = {
        change: Function.createDelegate(this, this._txtFechaDesde_onChange)
    };
    this._txtFechaHasta$delegates = {
        change: Function.createDelegate(this, this._txtFechaHasta_onChange)
    };
    this._chkTiposDelito$delegates = {
        click: Function.createDelegate(this, this._chkTiposDelito_onClick)
    };
    this._chkTiposOrigen$delegates = {
        click: Function.createDelegate(this, this._chkTiposOrigen_onClick)
    };
}

UI.Controls.EventFilterBehavior.prototype = {
    initialize: function() {
        UI.Controls.EventFilterBehavior.callBaseMethod(this, 'initialize');
        //
        this._parentControl = this.get_element().control;
        this._container = $get(this._EventFilterPanelId);
        // Attach events
        // Construye elementos
        this.buildControls();
    },
    dispose: function() {
        // Detach Handlers
        UI.Controls.EventFilterBehavior.callBaseMethod(this, 'dispose');
    },
    get_PlugInId: function() {
        /// <value type="string" mayBeNull="false">
        /// Gets de plugIn unique id
        /// </value>
        return 'ui.controls.EventFilter';
    },
    load: function(container) {
        /// <summary>
        // loads the current plugin into the main map container, creates menu, toolbar, atach events, etc
        /// </summary>
        /// <param name="container" type="SGis.MapToolkit.MapControl">
        /// The map control container
        /// </param>

        // Carga parámetros en layer de objetos
        var ol = $find('DelitosLayerObjects');
        if (ol) {
            // Cambia los parámetros de la capa de delitos y refresca
            ol.set_Params(Sys.Serialization.JavaScriptSerializer.serialize(this._CfgFiltro));

        }

    },
    unload: function() {
        // Unloads Plugin
    },
    buildControls: function() {
        /// <summary>
        /// Construye los controles contenidos 
        /// </summary>
        /// <returns />
        var tabla = $common.createElementFromTemplate(
        {
            nodeName: "table",
            cssClasses: ["ui_filter_datos"]
        }, this._container);
        var tbody1 = $common.createElementFromTemplate({ nodeName: "tbody" }, tabla);
        //
        this.buildTxtFechaDesde(tbody1);
        this.buildTxtFechaHasta(tbody1);
        this.buildChkTiposDelito(tbody1);
        this.buildChkTiposOrigen(tbody1);
    },
    // Construye la fila para la edición de fecha desde
    buildTxtFechaDesde: function(tablebody) {
        var tr = $common.createElementFromTemplate({ nodeName: "tr" }, tablebody);
        var td1 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            properties: {
                vAlign: "top",
                innerHTML: "<span>Desde</span>"
            },
            cssClasses: ["ui_filter_datos1_label"]
        }, tr);
        var td2 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            cssClasses: ["ui_filter_datos1_field"]
        }, tr);
        var div = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                style: {
                    width: "100%"
                }
            }
        }, td2);
        var d = this._CfgFiltro.FechaDesde;
        this._txtFechaDesde = $common.createElementFromTemplate(
        {
            nodeName: "input",
            properties: { id: "txtFechaDesde", value: d.localeFormat("d") },
            cssClasses: ["ui_filter_txtfechahora"],
            events: this._txtFechaDesde$delegates
        }, div);
        // Botón calendario
        var imgCal = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                id: "imgFechaDesdeCalendar",
                innerHTML: "&nbsp;"
            },
            cssClasses: ["ui_filter_calendar"]
        }, div);
        // Máscara para fecha
        $create(
            AjaxControlToolkit.MaskedEditBehavior,
            {
                "ClientStateFieldID": "ctl00_NewEventContentPlaceHolder_MskHastaFechaTrayecto_ClientState",
                "CultureAMPMPlaceholder": "",
                "CultureCurrencySymbolPlaceholder": "€",
                "CultureDateFormat": "DMY",
                "CultureDatePlaceholder": "/",
                "CultureDecimalPlaceholder": ",",
                "CultureName": "es-ES",
                "CultureThousandsPlaceholder": ".",
                "CultureTimePlaceholder": ":",
                "ErrorTooltipEnabled": true,
                "Mask": "99/99/9999",
                "MaskType": 1,
                "id": "mskFechaDesde"
            }, null, null, this._txtFechaDesde);
        // Calendaro para seleccionar fecha
            var calPosition = AjaxControlToolkit.CalendarPosition.BottomLeft;
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7) {
            calPosition = AjaxControlToolkit.CalendarPosition.BottomRight;
        }
        $create(
            AjaxControlToolkit.CalendarBehavior,
            {
                "button": imgCal,
                "id": "calendarFechaDesde",
                "popupPosition": calPosition
            }, null, null, this._txtFechaDesde);
    },
    // Construye la fila para edición de fecha hasta
    buildTxtFechaHasta: function(tablebody) {
        var tr = $common.createElementFromTemplate({ nodeName: "tr" }, tablebody);
        var td1 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            properties: {
                vAlign: "top",
                innerHTML: "<span>Hasta</span>"
            },
            cssClasses: ["ui_filter_datos1_label"]
        }, tr);
        var td2 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            cssClasses: ["ui_filter_datos1_field"]
        }, tr);
        var div = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                style: {
                    width: "100%"
                }
            }
        }, td2);
        var d = this._CfgFiltro.FechaHasta;
        this._txtFechaHasta = $common.createElementFromTemplate(
        {
            nodeName: "input",
            properties: { id: "txtFechaHasta", value: d.localeFormat("d") },
            cssClasses: ["ui_filter_txtfechahora"],
            events: this._txtFechaHasta$delegates
        }, div);
        // Botón calendario
        var imgCal = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                id: "imgFechaHastaCalendar",
                innerHTML: "&nbsp;"
            },
            cssClasses: ["ui_filter_calendar"]
        }, div);
        // Máscara para fecha
        $create(
            AjaxControlToolkit.MaskedEditBehavior,
            {
                "ClientStateFieldID": "ctl00_NewEventContentPlaceHolder_MskHastaFechaTrayecto_ClientState",
                "CultureAMPMPlaceholder": "",
                "CultureCurrencySymbolPlaceholder": "€",
                "CultureDateFormat": "DMY",
                "CultureDatePlaceholder": "/",
                "CultureDecimalPlaceholder": ",",
                "CultureName": "es-ES",
                "CultureThousandsPlaceholder": ".",
                "CultureTimePlaceholder": ":",
                "ErrorTooltipEnabled": true,
                "Mask": "99/99/9999",
                "MaskType": 1,
                "id": "mskFechaHasta"
            }, null, null, this._txtFechaHasta);
        // Calendaro para seleccionar fecha
            var calPosition = AjaxControlToolkit.CalendarPosition.BottomLeft;
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7) {
            calPosition = AjaxControlToolkit.CalendarPosition.BottomRight;
        }
        $create(
            AjaxControlToolkit.CalendarBehavior,
            {
                "button": imgCal,
                "id": "calendarFechaHasta",
                "popupPosition": calPosition
            }, null, null, this._txtFechaHasta);
    },
    // Construye la fila para selección de tipos de delito
    buildChkTiposDelito: function(tablebody) {
        var tr = $common.createElementFromTemplate({ nodeName: "tr" }, tablebody);
        var td1 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            properties: {
                vAlign: "top",
                innerHTML: "<span>Tipo</span>"
            },
            cssClasses: ["ui_filter_datos1_label"]
        }, tr);
        var td2 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            cssClasses: ["ui_filter_datos1_field"],
            properties: {
                style: {
                    overflowY: "auto"
                }
            }
        }, tr);
        var div = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                style: {
                    width: "100%",
                    overflowY: "auto",
                    height: "130px"
                }
            }
        }, td2);
        for (var i in this._CfgFiltro.TiposDelito) {
            this.buildOneChkTipoDelito(div, this._CfgFiltro.TiposDelito[i]);
        }
    },
    // Construye la fila para selección de tipos de origen de delito
    buildChkTiposOrigen: function(tablebody) {
        if (typeof (this._CfgTiposOrigen) == 'undefined' || this._CfgTiposOrigen == null || this._CfgTiposOrigen.length == 0)
            return;
        //
        var tr = $common.createElementFromTemplate({ nodeName: "tr" }, tablebody);
        var td1 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            properties: {
                vAlign: "top",
                innerHTML: "<span>Origen</span>"
            },
            cssClasses: ["ui_filter_datos1_label"]
        }, tr);
        var td2 = $common.createElementFromTemplate(
        {
            nodeName: "td",
            cssClasses: ["ui_filter_datos1_field"],
            properties: {
                style: {
                    overflowY: "auto"
                }
            }
        }, tr);
        var div = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                style: {
                    width: "100%"
                }
            }
        }, td2);
        for (var i in this._CfgFiltro.TiposOrigen) {
            this.buildOneChkTipoOrigen(div, this._CfgFiltro.TiposOrigen[i]);
        }
    },
    // Construye un div para la selección de un tipo de delito
    buildOneChkTipoDelito: function(container, tde) {

        // Contenedor checkbox
        var div = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                style: {
                    width: "100%"
                }
            }
        }, container);
        // Icono
        var tdedef = null;
        for (var j in this._CfgTiposDelito) {
            if (this._CfgTiposDelito[j].TdeId == tde.TdeId) {
                tdedef = this._CfgTiposDelito[j];
            }
        }

        var ico = $common.createElementFromTemplate(
        {
            nodeName: "img",
            properties: {
                id: "iconFiltroTipo" + tde.TdeId.toString(),
                src: "GetCrimeIcon.aspx?" + tdedef.TdeIconCode
            },
            cssClasses: ["ui_filter_icontipodelito"]
        }, div);
        // Checkbox
        var chk = $common.createElementFromTemplate(
        {
            nodeName: "input",
            properties: {
                id: "chkFiltroTipo" + tde.TdeId.toString(),
                type: 'checkbox'
            },
            cssClasses: ["ui_filter_chktipodelito"],
            events: this._chkTiposDelito$delegates
        }, div);
        chk.checked = tde.Activo;
        chk.TipoDelito = tde;
        Array.add(this._chkTiposDelito, chk);

        // Texto Tipo Delito
        var chk = $common.createElementFromTemplate(
        {
            nodeName: "span",
            properties: {
                id: "textFiltroTipo" + tde.TdeId.toString(),
                innerHTML: tdedef.TdeNombre
            },
            cssClasses: ["ui_filter_texttipodelito"]
        }, div);


    },
    // Construye un div para la selección de un tipo de origen
    buildOneChkTipoOrigen: function(container, ori) {

        // Contenedor checkbox
        var div = $common.createElementFromTemplate(
        {
            nodeName: "div",
            properties: {
                style: {
                    width: "100%"
                }
            }
        }, container);
        // Icono
        var oridef = null;
        for (var j in this._CfgTiposOrigen) {
            if (this._CfgTiposOrigen[j].OriId == ori.OriId) {
                oridef = this._CfgTiposOrigen[j];
            }
        }

        var ico = $common.createElementFromTemplate(
        {
            nodeName: "img",
            properties: {
                id: "iconFiltroOrigen" + ori.OriId.toString(),
                src: "GetPoliceIcon.aspx?" + oridef.OriIconCode
            },
            cssClasses: ["ui_filter_icontipoorigen"]
        }, div);
        // Checkbox
        var chk = $common.createElementFromTemplate(
        {
            nodeName: "input",
            properties: {
                id: "chkFiltroOrigen" + ori.OriId.toString(),
                type: 'checkbox'
            },
            cssClasses: ["ui_filter_chktipoorigen"],
            events: this._chkTiposOrigen$delegates
        }, div);
        chk.checked = ori.Activo;
        chk.TipoOrigen = ori;
        Array.add(this._chkTiposOrigen, chk);

        // Texto Tipo Delito
        var chk = $common.createElementFromTemplate(
        {
            nodeName: "span",
            properties: {
                id: "textFiltroOrigen" + ori.OriId.toString(),
                innerHTML: oridef.OriNombre
            },
            cssClasses: ["ui_filter_texttipoorigen"]
        }, div);


    },
    //--------------------------------------------------------------------------
    // Acceso a Propiedades
    //--------------------------------------------------------------------------
    get_EventFilterPanelId: function() {
        return this._EventFilterPanelId;
    },
    set_EventFilterPanelId: function(value) {
        if (this._EventFilterPanelId != value) {
            this._EventFilterPanelId = value;
            this.raisePropertyChanged('EventFilterPanelId');
        }
    },
    get_ServicePath: function() {
        return this._ServicePath;
    },
    set_ServicePath: function(value) {
        if (this._ServicePath != value) {
            this._ServicePath = value;
            this.raisePropertyChanged('ServicePath');
        }
    },

    get_CfgFiltro: function() {
        return this._CfgFiltro;
    },
    set_CfgFiltro: function(value) {
        if (this._CfgFiltro != value) {
            this._CfgFiltro = value;
            this.raisePropertyChanged('CfgFiltro');
        }
    },

    get_CfgTiposDelito: function() {
        return this._CfgTiposDelito;
    },
    set_CfgTiposDelito: function(value) {
        if (this._CfgTiposDelito != value) {
            this._CfgTiposDelito = value;
            this.raisePropertyChanged('CfgTiposDelito');
        }
    },

    get_CfgTiposOrigen: function() {
        return this._CfgTiposOrigen;
    },
    set_CfgTiposOrigen: function(value) {
        if (this._CfgTiposOrigen != value) {
            this._CfgTiposOrigen = value;
            this.raisePropertyChanged('CfgTiposOrigen');
        }
    },

    //--------------------------------------------------------------------------
    // EVENTS
    //--------------------------------------------------------------------------
    // FilterChanged
    add_filterChanged: function(handler) {
        this.get_events().addHandler("filterChanged", handler);
    },
    remove_filterChanged: function(handler) {
        this.get_events().removeHandler("filterChanged", handler);
    },
    raiseFilterChanged: function() {
        var eh = this.get_events().getHandler("filterChanged");
        if (eh) {
            eh(this, Sys.EventArgs.Empty);
        }
    },

    //--------------------------------------------------------------------------
    // Manejadores de Eventos
    //--------------------------------------------------------------------------
    // Al cambiar valor seleccionado de departamento
    _txtFechaDesde_onChange: function(sender, args) {
        var t = sender.target;
        var d = Date.parseLocale(t.value, 'd');
        if (d) {
            this._CfgFiltro.FechaDesde = d;
            this.raiseFilterChanged();
        } else {
            alert('Fecha Inválida');
        }
    },
    _txtFechaHasta_onChange: function(sender, args) {
        var d = Date.parseLocale(sender.target.value, 'd');
        this._CfgFiltro.FechaHasta = d;
        if (d) {
            this._CfgFiltro.FechaHasta = d;
            this.raiseFilterChanged();

        } else {
            alert('Fecha Inválida');
        }
    },
    _chkTiposDelito_onClick: function(sender, args) {
        var t = sender.target;
        if (t.TipoDelito) {
            t.TipoDelito.Activo = t.checked;
            this.raiseFilterChanged();
        }
    },
    _chkTiposOrigen_onClick: function(sender, args) {
        var t = sender.target;
        if (t.TipoOrigen) {
            t.TipoOrigen.Activo = t.checked;
            this.raiseFilterChanged();
        }
    }


}
UI.Controls.EventFilterBehavior.registerClass('UI.Controls.EventFilterBehavior', AjaxControlToolkit.BehaviorBase, SGis.MapToolkit.IPlugIn);



if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();