/www/jssrc/blerg/EmailForm.js
enyo.kind({
    name: 'blerg.EmailForm',
    handlers: {
        onLogin: "loginStatusChange"
    },
    components: [
        {name: 'emailRegisterForm', components: [
            {content: "Register an email address to get daily digest updates of your feed. We can also use this address to send you a password recovery link if you forget your password.", tag: 'p'},
            {tag: 'form', onsubmit: 'registerEmail', components: [
                {kind: 'onyx.InputDecorator', classes: 'recovery', components: [
                    {kind: 'onyx.Input', name: 'email'}
                ]},
                {kind: 'onyx.Button', content: 'Register', onclick: 'registerEmail'}
            ]}
        ]},
        {name: 'emailStatus', showing: false, components: [
            {tag: 'p', components: [
                {content: 'Registered email: ', tag: null},
                {name: 'emailOutput', tag: 'span', classes: 'email-address'},
            ]},
            {kind: 'onyx.Button', content: 'Deregister', onclick: 'deregisterEmail'}
        ]},
        {name: 'emailSent', showing: false, components: [
            {content: 'An email has been sent to ', tag: null},
            {name: 'emailSentAddress', tag: 'span', classes: 'email-address'},
            {content: '.', tag: null}
        ]}

    ],
    create: function() {
        this.inherited(arguments);

        this.fetchEmailStatus();
    },
    registerEmail: function(inSender, inEvent) {
        var email = this.$.email.getValue();
        this.$.email.setValue('');
        this.$.email.node.blur();

        var req = new enyo.Ajax({
            url: '/aux/email/register',
            method: 'POST',
            postBody: {
                email: email
            }
        });

        req.response(this, function(inSender, inResponse) {
            this.$.emailSentAddress.setContent(email);
            this.$.emailRegisterForm.hide();
            this.$.emailSent.show();
        });

        req.error(this, function(inSender, inResponse) {
            alert('Failed to register email.');
        });

        req.go();
    },
    fetchEmailStatus: function() {
        var req = new enyo.Ajax({
            url: '/aux/email/status'
        });

        req.response(this, function(inSender, inResponse) {
            if (inResponse.email) {
                this.$.emailRegisterForm.hide();
                this.$.emailStatus.show();
                this.$.emailOutput.setContent(inResponse.email);
            } else {
                this.$.emailRegisterForm.show();
            }
        });

        req.go();
    },
    deregisterEmail: function(inSender, inEvent) {
        var req = new enyo.Ajax({
            url: '/aux/email/cancel'
        });

        req.response(this, function(inSender, inResponse) {
            if (inResponse.status == 'success') {
                this.$.emailStatus.hide();
                this.$.emailRegisterForm.show();
                alert('Email notifications deregistered');
            } else {
                alert('Failed to deregister');
            }
        });

        req.error(this, function(inSender, inResponse) {
            alert('Failed to deregister');
        });

        req.go();
    },
    loginStatusChange: function(inSender, inEvent) {
        this.fetchEmailStatus();
    }
});