function DataGrid(data) {
    this.prefixDataGrid = data.prefixDataGrid;
    this.popupLabel = this.prefixDataGrid + 'DataGrid' + 'PopupLabel';
    this.lang = data.lang;
    this.popupModalInstance = new PopupModal({
//        tplAlert: '#' + this.prefixDataGrid + 'DataGridAlert',
//        tplConfirm: '#' + this.prefixDataGrid + 'DataGridConfirm'
    });

    var DataGridInstance = this;
    $('.' + DataGridInstance.prefixDataGrid + 'DGCtrlRows').live('click', function (e) {
        var id = '';
        var errorMessage = $(this).attr('error');
        $('#' + DataGridInstance.prefixDataGrid + 'DataGrid .dg01ItemCheckbox:checked').each(function () {
            if (id) {
                id += ',';
            }
            id += $(this).val();
        });
        if (id) {
            $(this).removeAttr('disableFollow');
            $(this).attr('href', $(this).attr('href').replace(encodeURIComponent('{DATA_GRID_ID}'), encodeURIComponent(id)));
        }
        else if (errorMessage) {
            // $.popupModalAlert(errorMessage, DataGridInstance.lang.dialogOk);
            DataGridInstance.popupModalInstance.alert(errorMessage);
            $(this).attr('disableFollow', 'disableFollow');
            return false;
        }
    });
    $(
        'a.' + DataGridInstance.prefixDataGrid + 'DGCtrlRow' +
        ', a.' + DataGridInstance.prefixDataGrid + 'DGCtrlRows' +
        ', a.' + DataGridInstance.prefixDataGrid + 'DGCtrlOther'
    ).live('click', function (e) {
        e.preventDefault();
        var confirmMessage = $(this).attr('confirm');
        var href = this;
        if (confirmMessage) {
            DataGridInstance.popupModalInstance.confirm(
                confirmMessage,
                function () {
                    DataGridInstance.handleHref(href);
                }
            );
        }
        else {
            DataGridInstance.handleHref(href);
        }
    });

    $('#' + DataGridInstance.prefixDataGrid + 'DataGridCheckAll').live('click', function () {
        if ($(this).attr('checked')) {
            $('#' + DataGridInstance.prefixDataGrid + 'DataGrid .dg01ItemCheckbox').attr('checked', 'checked').trigger('change');
        }
        else {
            $('#' + DataGridInstance.prefixDataGrid + 'DataGrid .dg01ItemCheckbox').removeAttr('checked').trigger('change');
        }
    });
}

DataGrid.prototype.handleHref = function (href) {
    var DataGridInstance = this;
    var $href = $(href);
    if ($href.hasClass(DataGridInstance.prefixDataGrid + 'DGCtrlPopup') || $href.hasClass(DataGridInstance.prefixDataGrid + 'DGCtrlAjax')) {
        DataGridInstance.loadContent($href.attr('href'));
    }
    else {
        window.location.href = $href.attr('href');
    }
}

DataGrid.prototype.loadContent = function (link, container) {
    var DataGridInstance = this;
    if (!container) {
        container = false;
    }
    DataGridInstance.popupModalInstance.popupShow('#' + DataGridInstance.prefixDataGrid + 'DataGridLoading', {}, DataGridInstance.popupLabel);
    $.ajax({
        type: "POST",
        url: link,
        success: function(responseText) {
// alert(responseText.type);
            DataGridInstance.parseAjaxResponse(responseText, container);
        },
        error: function(msg) {
            // alert('modDataGrid: AJAX error: ' + msg.responseText);
            DataGridInstance.popupModalInstance.popupHide(DataGridInstance.popupLabel);
        }
    });
}

DataGrid.prototype.handleAjax = function (responseText, Form) {
    if (responseText.type == 'html') {
        Form.handleAjax(responseText.content);
    }
    else if (responseText.type == 'popup') {
        Form.handleAjax(responseText.content);
        this.popupModalInstance.popupCenter(this.popupLabel);
    }
    else {
        this.parseAjaxResponse(responseText);
    }
}

DataGrid.prototype.parseAjaxResponse = function (responseText, container) {
    var DataGridInstance = this;
    if (!container) {
        if (responseText.type == 'popup') {
            container = '#' + DataGridInstance.prefixDataGrid + 'DataGridPopup';
        }
        else if (responseText.type == 'html') {
            container = '#' + DataGridInstance.prefixDataGrid + 'DataGrid';
        }
    }
    if (responseText.type == 'popup') {
        $(container).html(responseText.content);
        DataGridInstance.popupModalInstance.popupShow(container, {}, DataGridInstance.popupLabel);
    }
    else if (responseText.type == 'html') {
        $(container).html(responseText.content);
        DataGridInstance.popupModalInstance.popupHide(DataGridInstance.popupLabel);
    }
    else if (responseText.type == 'js') {
        eval(responseText.content);
    }
    else if (responseText.type == 'link') {
        window.location.href = responseText.content;
    }
    else {
        // alert('modDataGrid: AJAX returned unknown result');
        // alert(responseText);
        DataGridInstance.popupModalInstance.popupHide(DataGridInstance.popupLabel);
    }
}

DataGrid.prototype.popupModalHide = function () {
    this.popupModalInstance.popupHide(this.popupLabel);
}



