Type.registerNamespace('Devy.UI.Membership');

Devy.UI.Membership.SuscripcionNewsletter = function () {
    Devy.UI.Membership.SuscripcionNewsletter.initializeBase(this);

    //Miembros
    this._Parent = null;
    this._Container = null;

    this._ServicePortal = null;

    this._txtEmail = null;

    this._NotificationContainerJQ = null;
}

Devy.UI.Membership.SuscripcionNewsletter.prototype = {
    //*********************************************************************
    //Publicos
    set_Container: function (value) { this._Container = value; },
    get_Container: function () { return this._Container; },
    set_Parent: function (value) { this._Parent = value; },
    get_Parent: function () { return this._Parent; },

    set_ServicePortal: function (value) { this._ServicePortal = value; },
    get_ServicePortal: function () { return this._ServicePortal; },

    set_DontUseDialogs: function (value) { this._DontUseDialogs = value; },
    get_DontUseDialogs: function () { return this._DontUseDialogs; },

    initialize: function () {
        Devy.UI.Membership.SuscripcionNewsletter.callBaseMethod(this, 'initialize');

        this._ServicePortal = Devy.UI.Membership.SuscripcionNewsletterService;
        this._initInterface();

        this._atachEvents();
    },

    dispose: function () {
        this._detachEvents();

        Devy.UI.Membership.SuscripcionNewsletter.callBaseMethod(this, 'dispose');
    },

    _atachEvents: function () {
        var contexto = this;

    },

    _detachEvents: function () {


    },

    _initInterface: function () {
        var contexto = this;

        var containerJQ = $(this._Container);
        containerJQ.empty();

        var EmailContainer = $('<p class="EmailContainer"></p>');
        containerJQ.append(EmailContainer);

        this._txtEmail = $('<input type="text" size="20" />')[0];
        EmailContainer.append(this._txtEmail);

        var default_txtEmailValue = "Ingresar dirección de email";
        this._txtEmail.value = default_txtEmailValue;
        $addHandler(this._txtEmail, "focus", function (evt) {
            if (contexto._txtEmail.value == default_txtEmailValue)
                contexto._txtEmail.value = "";
        });

        var CommandContainer = $('<p class="CommandContainer"></p>');
        containerJQ.append(CommandContainer);

        var addCmd = $('<a href="#" title = "Suscribirse a nuestro Newsletter" class="Command SuscribirCmd"><span> Suscribirme </span></a>')[0];
        $addHandler(addCmd, "click", function (evt) {
            evt.preventDefault();

            contexto._BeginSuscribir();
        });
        CommandContainer.append(addCmd);

        var desuscribirCmd = $('<a href="#" title = "Eliminar la suscripción a nuestro Newsletter" class="Command DesuscribirCmd"><span> Desuscribirme </span></a>')[0];
        $addHandler(desuscribirCmd, "click", function (evt) {
            evt.preventDefault();

            contexto._BeginDeSuscribir();
        });
        CommandContainer.append(desuscribirCmd);
    },


    _getEmail: function () {
        var email = this._txtEmail.value;

        if (!email) {
            this._notificateError("Error", "Debe ingresar su dirección de email para continuar");
            return "";
        }

        if (!this._regex)
            this._regex = new RegExp("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$", 'i');

        if (!email.match(this._regex)) {
            this._notificateError("Error", "Debe ingresar una dirección de email válida para continuar");
            return "";
        }

        return email;
    },


    _BeginSuscribir: function () {
        var email = this._getEmail();
        if (!email) return;

        //Invocamos el servicio
        var ServiceData = new Array();
        ServiceData.Requester = this;

        Devy.Notifications.ShowLoading("Creando suscripción");

        this._ServicePortal.Suscribir(email,
            this._onNewsletterServiceSuccess, this._onNewsletterServiceError, ServiceData);

    },

    _BeginDeSuscribir: function () {
        var email = this._getEmail();
        if (!email) return;

        //Invocamos el servicio
        var ServiceData = new Array();
        ServiceData.Requester = this;

        Devy.Notifications.ShowLoading("Eliminando suscripción");

        this._ServicePortal.Desuscribir(email,
            this._onNewsletterServiceSuccess, this._onNewsletterServiceError, ServiceData);

    },


    _onNewsletterServiceSuccess: function (result, context, methodName) {
        Devy.Notifications.HideLoading();

        context.Requester._txtEmail.value = "";

        if (methodName == "Suscribir")
            context.Requester._notificateMessage("Newsletter", "Se le ha enviado un email para confirmar la suscripción");

        else if (methodName == "Desuscribir")
            context.Requester._notificateMessage("Newsletter", "La suscripción fué eliminada con éxito");

    },
    _onNewsletterServiceError: function (error, context, methodName) {
        Devy.Notifications.HideLoading();

        
        if (methodName == "Suscribir")
            context.Requester._notificateError("Error al intentar agregar la suscripción", error.get_message());

        else if (methodName == "Desuscribir")
            context.Requester._notificateError("Error al intentar eliminar la suscripción", error.get_message());
    },


    _notificateError: function (Title, Error) {
        if (this._DontUseDialogs) {
            var notif = this._getNotificationContainerJQ();
            notif.html('<p class="Notification Error"><strong>' + Title + '</strong><br />' + Error + '</p>');
        }
        else
            Devy.Notifications.ShowError(Title, error.Error);
    },

    _notificateMessage: function (Title, Message) {
        if (this._DontUseDialogs) {
            var notif = this._getNotificationContainerJQ();
            notif.html('<p class="Notification Message"><strong>' + Title + '</strong><br />' + Message + '</p>');
        }
        else
            Devy.Notifications.ShowMessage(Title, Message);
    },

    _getNotificationContainerJQ: function () {
        if (!this._NotificationContainerJQ) {
            this._NotificationContainerJQ = $('<div class="NotificationsContainer"></div>')
            $(this._Container).prepend(this._NotificationContainerJQ);
        }
        return this._NotificationContainerJQ;
    }
}

Devy.UI.Membership.SuscripcionNewsletter.registerClass('Devy.UI.Membership.SuscripcionNewsletter', Sys.Component);
