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

(function ($) {


    Umbraco.Dialogs.SortDialog = base2.Base.extend({
        //private methods/variables
        _opts: null,

        _setupTableSorter: function () {
            //adds a custom sorter to the tablesorter based on the current cultures date/time format
            $.tablesorter.addParser({
                // use a unique id
                id: 'cultureDateParser',
                is: function(s, table, cell) {
                    //don't auto-detect this parser
                    return false;
                },
                format: function(s, table, cell, cellIndex) {
                    var c = table.config;

                    s = s.replace(/\-/g, "/");
                    //all of these basically transform the string into year-month-day since that
                    //is what JS understands when creating a Date object
                    if (c.dateFormat.indexOf("dd/MM/yyyy") == 0 || c.dateFormat.indexOf("dd-MM-yyyy") == 0) {
                        s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3-$2-$1");
                    }
                    else if (c.dateFormat.indexOf("dd/MM/yy") == 0 || c.dateFormat.indexOf("dd-MM-yy") == 0) {
                        s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$3-$2-$1");
                    }
                    else if (c.dateFormat.indexOf("MM/dd/yyyy") == 0 || c.dateFormat.indexOf("MM-dd-yyyy") == 0) {
                        s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3-$1-$2");
                    }
                    else if (c.dateFormat.indexOf("MM/dd/yy") == 0 || c.dateFormat.indexOf("MM-dd-yy") == 0) {
                        s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$3-$1-$2");
                    }
                    return $.tablesorter.formatFloat(new Date(s).getTime());
                },
                // set the type to either numeric or text (text uses a natural sort function
                // so it will work for everything, but numeric is faster for numbers
                type: 'numeric'
            });
        },

        _saveSort: function() {
            var rows = $('#sortableNodes tbody tr');
            var sortOrder = "";

            $.each(rows, function () {
                sortOrder += $(this).attr("id").replace("node_", "") + ",";
            });

            $("#sortingDone").hide();
            $("#sortArea").hide();
            $("#loading").show();
            
            var self = this;

            $.ajax({
                type: "POST",
                url: self._opts.serviceUrl,
                data: '{ "ParentId": "' + self._opts.currentId + '", "SortOrder": "' + sortOrder + '"}',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    self._showConfirm();
                }
            });
        },
        
        _showConfirm: function () {
            $(".umb-dialog-footer").hide();
            $("#loading").hide();
            $("#sortingDone").show();
            UmbClientMgr.mainTree().reloadActionNode();
        },

        // Constructor
        constructor: function (opts) {
            // Merge options with default
            this._opts = $.extend({
                // Default options go here
            }, opts);

            this._setupTableSorter();
        },

        //public methods/variables

        init: function () {
            var self = this;
            
            //create the sorter
            $("#sortableNodes").tablesorter({
                dateFormat: self._opts.dateTimeFormat,
                headers: {
                    0: { sorter: "text" },
                    1: { sorter: "cultureDateParser" }, //ensure to set our custom parser here
                    2: { sorter: "numeric" }
                }
            });
            
            //setup the drag/drop sorting
            $("#sortableNodes").tableDnD({ containment: $("#sortableFrame") });
            
            //wire up the submit button
            self._opts.submitButton.click(function() {
                self._saveSort();
            });
            
            //wire up the close button
            self._opts.closeWindowButton.click(function () {
                UmbClientMgr.closeModalWindow();
            });
        },
        
    });
    


})(jQuery);