/www/jssrc/blerg/Post.js
enyo.kind({
    name: "blerg.Post",
    kind: "FittableRows",
    classes: "blerg-post",
    handlers: {
        onPostVisibility: "postVisibilityUpdate",
        onLogin: "loggedIn",
        onLogout: "loggedOut",
        onkeydown: "keyHandler"
    },
    components: [
        {tag: "h2", content: "What's on your mind?"},
        {kind: "onyx.InputDecorator", alwaysLooksFocused: true, classes: "content-decorator", fit: true, components: [
            {name: "postContent", kind: "onyx.TextArea", classes: "content", onkeyup: "updatePreview", attributes: {tabindex: 4}}
        ]},
        {name: "toolbar", classes: "toolbar", components: [
            {classes: "buttons", fit: true, components: [
                {name: "loginReminder", tag: "span", classes: "blerg-error", style: "margin-right: 8px", content: "You must log in before posting."},
                {kind: "onyx.Button", content: "Close", onclick: "closePost", classes: "onyx-negative", attributes: {tabindex: 6}},
                {name: "postButton", kind: "onyx.Button", content: "Post", onclick: "doPost", classes: "onyx-affirmative", disabled: true, attributes: {tabindex: 5}}
            ]},
            {classes: "switcher", components: [
                {kind: "onyx.RadioGroup", onActivate: "switchBottomPanel", components: [
                    {name: "replyButton", content: "Replying to", showing: false},
                    {name: "previewButton", content: "Preview"},
                    {content: "Help"}
                ]}
            ]}
        ]},
        {name: "bottomPanel", kind: "Panels", classes: "bottom-panel", draggable: false, fit: true, components: [
            {kind: "Scroller", components: [
                {name: "replyView", classes: "record", allowHtml: true},
            ]},
            {kind: "Scroller", components: [
                {name: "preview", classes: "record", allowHtml: true},
            ]},
            {kind: "Scroller", components: [
                {name: "helpContent", allowHtml: true},
            ]}
        ]},
        {name: "api", kind: "blerg.API",
         onPostSuccessful: "postSuccessful",
         onPostFailed: "postFailed"}
    ],
    create: function() {
        this.inherited(arguments);
    },
    getData: function() {
        return this.$.postContent.getValue();
    },
    setData: function(inVal) {
        this.$.postContent.setValue(inVal);
    },
    closePost: function() {
        this.bubble('onPostVisibility', {showing: false});
    },
    doPost: function() {
        this.$.api.post(this.getData());
    },
    postSuccessful: function() {
        this.setData('');
        this.closePost();
        if (location.hash != '#' + blerg.API.username) {
            location.hash = '#' + blerg.API.username
            this.bubble('onNavigate');
        } else {
            this.bubble('onReload');
        }
    },
    postFailed: function() {
        alert('Could not post!');
    },
    postVisibilityUpdate: function(inSender, inEvent) {
        if (inEvent.showing) {
            this.show();
            this.$.postContent.focus();

            if (inEvent.data && this.getData() == "") {
                this.setData(inEvent.data);
                this.$.postContent.node.setSelectionRange(inEvent.data.length, inEvent.data.length);
                this.updatePreview();
            }

            if (inEvent.replyto) {
                this.$.replyButton.show();
                this.$.replyButton.setActive(true);
                this.$.replyView.setContent(inEvent.replyto);
            } else {
                this.$.replyButton.hide();
                this.$.previewButton.setActive(true);
            }

            // Need to reflow manually because this is hidden by default
            this.$.toolbar.reflow();
            this.reflow();
        } else {
            this.$.postContent.node.blur();
            setTimeout(function() {
                this.hide();
                this.removeClass('exit');
            }.bind(this), 500);
        }
        this.addRemoveClass('enter', inEvent.showing);
        this.addRemoveClass('exit', !inEvent.showing);
    },
    updatePreview: function(inSender, inEvent) {
        this.$.preview.setContent(blerg.Util.blergFormat(this.getData()));
    },
    loggedIn: function() {
        this.$.postButton.setDisabled(false);
        this.$.loginReminder.hide();
    },
    loggedOut: function() {
        this.$.postButton.setDisabled(true);
        this.$.loginReminder.show();
    },
    loadHelp: function() {
        if (this.$.helpContent.getContent() == '') {
            var req = new enyo.Ajax({
                url: baseURL + '/doc/post_help.html',
                handleAs: 'text'
            });
            req.response(function(inSender, inResponse) {
                this.$.helpContent.setContent(inResponse);
            }.bind(this));
            req.go();
        }
    },
    switchBottomPanel: function(inSender, inEvent) {
        var active = inSender.getActive();
        var index = inSender.children.indexOf(active);
        this.$.bottomPanel.setIndex(index);
        if (index == 2) {
            this.loadHelp();
        }
    },
    keyHandler: function(inSender, inEvent) {
        if (inEvent.which == 27) {
            this.closePost();
        }
    }
});