/// <reference path="jquery-vsdoc.js" />

$.extend({
    applicationsGroup: new function() {
        var _self = this;

        _self.dialogID = null;

        var uniqueControlID = ''
        var _groupID = null;

        _self.initialize = function(uniqueID, groupID) {
            _groupID = groupID == '' ? null : groupID;

            uniqueControlID = uniqueID;
            _self.dialogID = uniqueID + '-applications-group-dialog';

            $('#' + _self.dialogID).dialog({
                autoOpen: false,
                width: 'auto',
                resizable: false,
                close: function() {
                    $('#' + _self.dialogID).dialog("destroy");
                }
            });

            $('#' + _self.dialogID).dialog('option', 'title', 'Application Grouping');

            if (_groupID == null) {
                $('#' + uniqueControlID + '-delete-application-group-apply').hide();
            }
            else {
                $('#' + uniqueControlID + '-delete-application-group-apply').show();
            }

            $('#' + uniqueControlID + '-delete-application-group-apply').click(function() {
                displayLoadingIndicator();

                $.post(appPath + 'dashboard/DeleteApplicationsGroup', { groupID: _groupID }, function() {
                    refreshTable(11, function() {
                        hideLoadingIndicator();
                        $.groupHoverOver.initialize();
                    });

                    $('#' + _self.dialogID).dialog('close');
                });
            });

            $('#' + uniqueControlID + '-create-application-group-apply').click(function() {
                var selectedApplicationIDs = new Array();
                var loopCounter = 0;

                $("input." + uniqueControlID + "-application-checkbox:checked").each(function() {
                    selectedApplicationIDs[loopCounter] = $(this).attr('applicationID');
                    loopCounter += 1;
                });

                var groupName = $.trim($('#' + uniqueControlID + '-group-name-input').val());

                if (groupName != '' && selectedApplicationIDs.length > 1) {
                    displayLoadingIndicator();

                    jQuery.ajaxSettings.traditional = true;
                    if (_groupID == null) {
                        $.post(appPath + 'dashboard/CreateApplicationsGroup', { groupName: $('#' + uniqueControlID + '-group-name-input').val(), applicationIDs: selectedApplicationIDs }, function() {
                            refreshTable(11, function() {
                                hideLoadingIndicator();
                                $.groupHoverOver.initialize();
                            });

                            $('#' + _self.dialogID).dialog('close');
                        });
                    }
                    else {
                        $.post(appPath + 'dashboard/UpdateApplicationsGroup', { groupID: groupID, groupName: $('#' + uniqueControlID + '-group-name-input').val(), applicationIDs: selectedApplicationIDs }, function() {
                            refreshTable(11, function() {
                                hideLoadingIndicator();
                                $.groupHoverOver.initialize();
                                $('#' + groupID + '-' + uniqueControlID + '-applications-table-container').removeAttr('loaded');
                            });

                            $('#' + _self.dialogID).dialog('close');

                        });
                    }
                }
                else {
                    alert('Group Name is required. At least two Applications must be selected to create a Group.');
                }
            });

            $('#' + uniqueControlID + '-create-application-group-cancel').click(function() {
                $('#' + _self.dialogID).dialog('close');
            });
        }

        _self.showDialog = function() {
            drawTableList(uniqueControlID, _groupID, function() {
                $('#' + _self.dialogID).dialog('open');
            });
        }

        function drawTableList(uniqueControlID, groupID, callbackFunction) {
            $.getJSON(appPath + "dashboard/GetApplicationsGroupJson",
                { timestamp: new Date().getTime(), groupID: groupID },
                function(data, status) {

                    var dataTable = new google.visualization.DataTable();

                    var columnModel = []
                    columnModel[0] = { headerText: '', format: { format: 'string', formatter: null, parse: function(value) { return value + ''; } } };
                    columnModel[1] = { headerText: 'Application Name', format: { format: 'string', formatter: null, parse: function(value) { return value + ''; } } };
                    columnModel[2] = { headerText: '', format: { format: 'string', formatter: null, parse: function(value) { return value ? 'checked="checked"' : ''; } } };
                    columnModel[3] = { headerText: 'Application ID', format: { format: 'string', formatter: null, parse: function(value) { return value + ''; } } };

                    setupTable(dataTable, data, columnModel, function(dataArray, rowIndex, item, columnModel) {
                        dataArray[0][rowIndex] = columnModel[0].format.parse(item.ApplicationID);
                        dataArray[1][rowIndex] = columnModel[1].format.parse(item.Name);
                        dataArray[2][rowIndex] = columnModel[2].format.parse(item.Selected);
                        dataArray[3][rowIndex] = columnModel[3].format.parse(item.ApplicationID);
                    });

                    if (data.length == 0) {
                        $('#' + uniqueControlID + '-applications-no-data').show();
                    }

                    var table = new google.visualization.Table(document.getElementById(uniqueControlID + '-applications-table-container'));
                    google.visualization.events.addListener(table, 'ready',
                        function(event) {
                            hideLoadingIndicator();
                            if (callbackFunction) {
                                callbackFunction();
                            }
                        });

                    var formatter = new google.visualization.PatternFormat('<input type="checkbox" applicationID="{0}" class="' + uniqueControlID + '-application-checkbox" {1}/>');
                    formatter.format(dataTable, [0, 2]);

                    var view = new google.visualization.DataView(dataTable);
                    view.setColumns([0, 1, 3]);

                    table.draw(view, { allowHtml: true });
                });
        }
    }
});