Umbraco.Sys.registerNamespace("Umbraco.Dialogs");

(function ($) {

    Umbraco.Dialogs.PublishDialog = base2.Base.extend({
        
        //private methods/variables
        _opts: null,
        _koViewModel: null,
        
        // Constructor
        constructor: function () {
        },

        //public methods

        init: function (opts) {
            /// <summary>Initializes the class and any UI bindings</summary>

            // Merge options with default
            this._opts = $.extend({
                
            }, opts);

            var self = this;

            //The knockout js view model for the selected item
            self._koViewModel = {
                publishAll: ko.observable(false),
                includeUnpublished: ko.observable(false),
                processStatus: ko.observable("init"),
                isSuccessful: ko.observable(false),
                resultMessages: ko.observableArray(),
                resultMessage: ko.observable(""), //if there's only one result message
                closeDialog: function () {
                    UmbClientMgr.closeModalWindow();
                },
                startPublish: function() {
                    this.processStatus("publishing");

                    var includeUnpublished = self._koViewModel.includeUnpublished();
                    $.post(self._opts.restServiceLocation + "PublishDocument",
                    JSON.stringify({
                        documentId: self._opts.documentId,
                        publishDescendants: self._koViewModel.publishAll(),
                        includeUnpublished: includeUnpublished
                    }),
                    function (e) {
                        self._koViewModel.processStatus("complete");
                        self._koViewModel.isSuccessful(e.success);
                        var msgs = e.message.trim().split("\r\n");
                        if (msgs.length > 1) {
                            for (var m in msgs) {
                                self._koViewModel.resultMessages.push({ message: msgs[m] });
                            }
                        }
                        else {
                            self._koViewModel.resultMessage(msgs[0]);
                        }

                        //sync the tree
                        UmbClientMgr.mainTree().setActiveTreeType('content');
                        UmbClientMgr.mainTree().syncTree(self._opts.documentPath, true)
                        if (includeUnpublished) {
                            var node = UmbClientMgr.mainTree().getActionNode();
                            if (node.expanded === true) {
                                UmbClientMgr.mainTree().reloadActionNode();
                            }
                        }
                    });
                }
            };
            //ensure includeUnpublished is always false if publishAll is ever false
            self._koViewModel.publishAll.subscribe(function (newValue) {
                if (newValue === false) {
                    self._koViewModel.includeUnpublished(false);
                }
            });

            ko.applyBindings(self._koViewModel);
        }

        
    }, {
        //Static members

        //private methods/variables
        _instance: null,

        // Singleton accessor
        getInstance: function () {
            if (this._instance == null)
                this._instance = new Umbraco.Dialogs.PublishDialog();
            return this._instance;
        }
    });
    
    //Set defaults for jQuery ajax calls.
    $.ajaxSetup({
        dataType: 'json',
        cache: false,
        contentType: 'application/json; charset=utf-8'
    });

})(jQuery);