Type.registerNamespace('Devy.UI.Admin.Publicidades');

/********** EncuestasOpcionesFieldEdit ***********************/
Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit = function () {
    Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit.initializeBase(this);

    this._cmdAddNew = null;
    this._Grilla = null;
}

Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit.prototype = {
    initialize: function () {
        Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit.callBaseMethod(this, 'initialize');

        this._FieldContainerCSSClass = "EncuestasOpcionesFieldEdit";
    },

    _createFieldControl: function (container, fieldID) {
        var $container = $(container);

        var mainContainer = $('<div class="EncuestasOpcionesFieldEditContainer"></div>');
        $container.append(mainContainer);

        var CommandsContainer = $('<div class="CommandsContainer"></div>');
        this._cmdAddNew = $('<a href="#" title = "Agregar una nueva opcion" class="Command AddNewCmd"><span>Agregar una nueva opción</span></a>')[0];
        CommandsContainer.append(this._cmdAddNew);
        $addHandlers(this._cmdAddNew, { click: this._cmdAddNewClick }, this);
        mainContainer.append(CommandsContainer);
        
        
        var gridContainer = $('<div class="OpcionesGridContainer"></div>');
        this.initGrid(gridContainer[0]);

        mainContainer.append(gridContainer);
    },


    _toogleAutoValidationEventsHooking: function () {
        /*do nothing*/
    },

    clear_Value: function () {
        this._Opciones = new Array();
        this._updateGrilla();
    },

    _setEnabled: function (value) {
        
        if (this._Grilla)
            this._Grilla.set_Enabled(value);

        if (this._cmdAddNew)
        {
            if (value) {
                $(this._cmdAddNew).show();
            }
            else {
                $(this._cmdAddNew).hide();
            }
        }
    },

    get_Value: function () {
        return this._Opciones;
    },
    set_Value: function (value) {
        this._Opciones = value;

        if (this._Opciones && this._Opciones.constructor.toString().indexOf("Array") == -1) //No es array
            this._Opciones = new Array();

        this._updateGrilla();
    },

    _cmdAddNewClick: function (evt) {
        evt.preventDefault();

        if (this._Opciones)
        {
            Array.add(this._Opciones, {"Id" : -1, 
            "Orden" : 0,
            "Texto" : "Nueva opción " + (this._Opciones.length + 1),
            "ImagenURL" : "",
            "Votos" : 0
            });

            this._updateGrilla();
        }
    },

    _updateGrilla: function () {
        if (this._Grilla)
            this._Grilla.set_DataSource(this._Opciones);
        
    },

    //Init fields
    initGrid: function (container) {
        
        var editDelegate = Function.createDelegate(this, function (obj) {
            this._editItem(obj);
        });

        var deleteDelegate = Function.createDelegate(this, function (obj) {
            this._deleteItem(obj);
        });

        this._Grilla = $create(Devy.UI.GridView,
        {
            "Parent": this,
            "Container": container,
            "ColumnsDescriptors": [
                { "PropertyName": "Id", "FieldType" : "Number"},
                { "PropertyName": "Orden", "FieldType" : "Number"},
                { "PropertyName": "Texto", "FieldType" : "Text"},
                { "PropertyName": "ImagenURL", "HeaderText": "Imagen", "FieldType" : "ImageURL"},
                { "PropertyName": "Votos", "FieldType" : "Number" },
            ],
            "EditObjectCallBack": editDelegate,
            "DeleteObjectCallBack": deleteDelegate,
            "Selectable" : false
            /*"CreateCellViewCallBack": this._CreateGridCellViewCallBack,*/
        },
        {},
        {});

    },

    _deleteItem: function (obj) {
        Array.remove(this._Opciones, obj);
        this._updateGrilla();
    },

    _editItem: function (obj) {
        this._showDialogForm (obj);
    },

    _showDialogForm: function (BusinessObject) {
        var frm = this._getEditForm();
        frm.PrepareToShow();

        frm.set_BusinessObject(BusinessObject);

        
        //Mostramos el dialogo
        frm.___ContainerJQ.dialog({ dialogClass: 'devy-EditForm',
            modal: true,
            title: "Editar opción",
            height: 500,
            width: 700,
            closeOnEscape: true,
            close: function () { $(this).dialog('destroy'); }
        });
    },

    _getEditForm: function () {
        if (!this._editForm) {
            var form = $('<div></div>');
            this._editForm = this._createEditForm(form[0]);
            form.append(this._editForm);
            this._editForm.___ContainerJQ = form;
        }
        return this._editForm;
    },

    _createEditForm: function (formContainer) {
        var form = $create(Devy.UI.Forms.Form,
        {
            "Parent": this,
            "Container": formContainer,
            "CommandOKText": "Guardar",
            "FieldDescriptors": [
                    {
                        "PropertyName": "Orden"
                    , "FieldType": "Number"
                    }

                    ,
                    {
                        "PropertyName": "Texto"
                    , "FieldType": "Text"
                    , "Validators": [
                    Devy.UI.Forms.Validators.CreateRequiredValidator('')]
                    }

                    ,
                    {
                        "PropertyName": "ImagenURL"
                    , "FieldType": "ImageURL"
                    }

                    ,
                    {
                        "PropertyName": "Votos"
                    , "FieldType": "ReadOnlyHtml"
                    }
                    ]
        },
        { "OKClick": this._formOKClick,
            "cancelClick": this._formCancelClick
        },
        {});

        return form;
    },

    _formOKClick: function (s, e) {
        s.get_Parent()._updateGrilla();
        s.get_Parent()._closeDialog();
    },

    _formCancelClick: function (s, e) {
        s.get_Parent()._closeDialog();
    },

    _closeDialog: function () {
        var frm = this._getEditForm();
        if (frm)
            if (frm.___ContainerJQ)
                frm.___ContainerJQ.dialog('close');
    },
}

Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit.registerClass('Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit', Devy.UI.Forms.Fields.Base);

Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit.CreateObject = function () {
    var ctrl = $create(Devy.UI.Admin.Publicidades.EncuestasOpcionesFieldEdit,
        {},
        {},
        {});

    return ctrl;
}


/********** EncuestasResultadosView ***********************/
Devy.UI.Admin.Publicidades.EncuestasResultadosView = function () {
    Devy.UI.Admin.Publicidades.EncuestasResultadosView.initializeBase(this);

    
}

Devy.UI.Admin.Publicidades.EncuestasResultadosView.prototype = {
    initialize: function () {
        Devy.UI.Admin.Publicidades.EncuestasResultadosView.callBaseMethod(this, 'initialize');

        this._FieldContainerCSSClass = "EncuestasResultadosView";
    },

    _createFieldControl: function (container, fieldID) {
        
    },


    _toogleAutoValidationEventsHooking: function () {
        /*do nothing*/
    },

    clear_Value: function () {
        $(this._FieldContainer).empty();
    },

    _setEnabled: function (value) {
        
    },

    get_Value: function () {
        return null;
    },
    set_Value: function (value) {
        this._updateResultados();
    },

    _updateResultados : function()
    {
        this.clear_Value();
        
        if (this._BusinessObject)
        {
            var jqContainer =  $(this._FieldContainer);
            
             jqContainer.append('<h2>' + this._BusinessObject.Titulo + '</h2>');
             jqContainer.append('<p class="EncuestaConsigna">' + this._BusinessObject.Consigna + '</p>');

             if (!this._BusinessObject.HideCantVotos)
                jqContainer.append('<p class="EncuestaTotalVotos"><em>De un total de <strong>' + this._BusinessObject.Votos + '</strong> votos</em></p>');

             var graphContainer = $('<div class="EncuestaResultadosGraphContainer"></div>');
             jqContainer.append (graphContainer);

             for (var i = 0; i < this._BusinessObject.Opciones.length; i++) 
                this._updateResultadosPrintOption (this._BusinessObject.Opciones[i], graphContainer);
        }
    },

    _updateResultadosPrintOption : function(opcion, graphContainer)
    {
        var optionContainer = $('<div class="OpcionContainer"></div>');
        optionContainer.append ('<p class="Texto">' + opcion.Texto + '</p>')

        if (this._BusinessObject.HideCantVotos)
            optionContainer.append ('<p class="Votos">' + opcion.PorcVotos + '% de los votos</p>')
        else    
            optionContainer.append ('<p class="Votos">' + opcion.Votos + ' votos, ' + opcion.PorcVotos + '%</p>')

        optionContainer.append ('<div class="BarContainer"><div class="Bar" style="width:' + opcion.PorcVotos + '%"></div></div>')

        graphContainer.append (optionContainer);
    }
}

Devy.UI.Admin.Publicidades.EncuestasResultadosView.registerClass('Devy.UI.Admin.Publicidades.EncuestasResultadosView', Devy.UI.Forms.Fields.Base);

Devy.UI.Admin.Publicidades.EncuestasResultadosView.CreateObject = function () {
    var ctrl = $create(Devy.UI.Admin.Publicidades.EncuestasResultadosView,
        {},
        {},
        {});

    return ctrl;
}
