GUI Code refactor
[vnfsdk/refrepo.git] / openo-portal / portal-common / src / main / webapp / common / thirdparty / data-tables / DataTableSmartClientApp.js
index 8584aae..25cdb5f 100644 (file)
-/***
- Wrapper/Helper Class for datagrid based on jQuery Datatable Plugin
- ***/
-var DatatableICT = function () {
-
-    var tableOptions;  // main options
-    var dataTable; // datatable object
-    var table;    // actual table jquery object
-    var tableContainer;    // actual table container object
-    var tableWrapper; // actual table wrapper jquery object
-    var tableInitialized = false;
-    var ajaxParams = []; // set filter mode
-    var columns;
-    var xsHiddenColumns;
-    var smHiddenColumns;
-    var columnMaxLength = 30;
-    var columnsTooLong;
-    var hidden_xs_maxWidth = 768;
-    var hidden_sm_maxWidth = 991;
-
-    var openRowFlag = false;
-    var rowOverFlag = false;
-    var rowCheckable = false;
-
-    var aTargetsAll;
-    var sTotalRecordsSource;
-    var tableHeight;
-       
-       var callbackList = [];
-
-    var includedInXsHiddenColumns = function(columnId){
-        for(var i=0;i<xsHiddenColumns.length; i++ ){
-            var column = xsHiddenColumns[i];
-            if(columnId == column.columnId){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    var includedInSmHiddenColumns = function(columnId){
-        for(var i=0;i<smHiddenColumns.length; i++ ){
-            var column = smHiddenColumns[i];
-            if(columnId == column.columnId){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    var countSelectedRecords = function() {
-        var selected = $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();
-        var text = tableOptions.dataTable.oLanguage.sGroupActions;
-        if (selected > 0) {
-            $('.table-group-actions > span', tableWrapper).text(text.replace("_TOTAL_", selected));
-        } else {
-            $('.table-group-actions > span', tableWrapper).text("");
-        }
-    }
-
-    var jsonObjectToArray = function(json, columns, iDraw){
-        var jsonToDatatable = {aaData:[], sEcho:iDraw, iTotalRecords:0, iTotalDisplayRecords:0 };
-        for(var i=0; i<json.response.data.length; i++){
-            jsonToDatatable.aaData[i] = [];
-            var resRowObject = json.response.data[i];
-            if(rowCheckable){
-                jsonToDatatable.aaData[i].push("<input type=\"checkbox\" name=\"id[]\" value=\"1\">");
-            }
-            if(openRowFlag){
-                jsonToDatatable.aaData[i].push("<span class=\"row-details row-details-close\"></span>");
-            }
-            for(var j=0; j<columns.length; j++){
-
-                if($(window).width() >= hidden_xs_maxWidth && $(window).width() < hidden_sm_maxWidth && includedInSmHiddenColumns(columns[j].columnId )){
-                    /*隐藏pad尺寸需要隐藏的列*/
-                }else if($(window).width() < hidden_xs_maxWidth && includedInXsHiddenColumns(columns[j].columnId )){
-                    /*隐藏手机尺寸需要隐藏的列*/
-                }else{
-                    var currentColumnId = columns[j].columnId;
-                    if(jQuery.inArray(currentColumnId, columnsTooLong) > -1){
-                        var rawText = "";                        
-                        for(var k=0;k<columnsTooLong.length;k++){
-                            if(currentColumnId == columnsTooLong[k]){
-                                rawText = resRowObject[currentColumnId];
-                                break;
-                            }
-                        }
-                        if(rawText.length > columnMaxLength){
-                            jsonToDatatable.aaData[i].push(rawText.slice(0, columnMaxLength) + '...');
-                        }else{
-                            jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);
-                        }
-                    } else {
-                        jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);
-                    }
-
-                }
-            }
-        }
-        jsonToDatatable.sEcho++;
-        var totalRow = 0;
-        var totalRecordsSource = eval('json.' + sTotalRecordsSource);
-        if(totalRecordsSource && totalRecordsSource.length >0){
-            totalRow = parseInt(totalRecordsSource);
-        }
-        if(isNaN(totalRow)){
-            alert('All rows counting number got fail!');
-        }else{
-            jsonToDatatable.iTotalRecords = totalRow;
-            jsonToDatatable.iTotalDisplayRecords = totalRow;
-        }
-        return jsonToDatatable;
-    }
-
-    var singleAlarmDel = function(divOverlay){
-
-        //根据浮动框的当前id获取需要删除的行
-        var trId = divOverlay.attr('id_tr');
-        tr=$('tr#' + trId);
-        var tds =  $(tr).children();
-        var tdAlarmId = "";
-               if(rowCheckable){
-                       tdAlarmId = $(tds.eq(2)).text();
-               }else{
-                       tdAlarmId = $(tds.eq(1)).text();
-               }
-
-        var data= {
-            "alarmId":[parseInt(tdAlarmId)]
-        };
-
-        var sSource = "/web/rest/web/fm/curalarms?data=" + JSON.stringify(data) + "&_operationType=remove&_dataSource=isc_PageRestDataSource_0&isc_metaDataPrefix=_&isc_dataFormat=json";
-
-        $.ajax( {
-            "dataType": 'json',
-            "type": "DELETE",
-            "url": sSource,
-            "data" : null,
-            "contentType" : 'application/json; charset=utf-8',
-            "success": function(json) {
-                if(json.response.status == 0){
-                    var resRowObject = json.response.data[0];
-                    //alert('删除成功');
-                }
-                if(json.response.status == -1){
-                    //alert('删除失败');
-                }
-            },
-            "error": function() {
-                alert('Communication Error!');
-            }
-        } );
-    }
-
-    var singleAlarmAckUnAck = function(divOverlay, ackType){
-
-        //根据浮动框的当前id获取需要确认的行
-        var trId = divOverlay.attr('id_tr');
-        var tr = $('tr#' + trId);
-
-        //取得隐藏的头部表格的相应行
-        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');
-        //var trHead = $('tbody > tr:nth-child(' + trId + ')', $tableHead);
-        var trHead = $('tr#' + trId.replace('body', 'head'), $tableHead);
-        var tdDivs = $('td > div', trHead);
-
-        var tds =  $(tr).children();
-        var tdAlarmId = "";
-        if(rowCheckable){
-            tdAlarmId = $(tds.eq(2)).text();
-        }else{
-            tdAlarmId = $(tds.eq(1)).text();
-        }
-
-        var aoData =
-        {
-            "dataSource":"isc_PageRestDataSource_0",
-            "operationType":"update",
-            "componentId":"isc_com_zte_ums_aos_fm_view_eventview_table_AlarmTable_0",
-            "data":{
-                "viewType":1,
-                "state":ackType,
-                "alarmId":[
-                    parseInt(tdAlarmId)
-                ]
-            },
-            "oldValues":null
-        };
-
-        var sSource = "/web/rest/web/fm/curalarms?isc_dataFormat=json";
-
-        $.ajax( {
-            "dataType": 'json',
-            "type": "PUT",
-            "url": sSource,
-            "contentType": 'application/json; charset=utf-8',
-            "data": JSON.stringify(aoData),
-            "success": function(json) {
-                               /*for(var i=0;i<callbackList.length;i++){
-                                       if(getFnName(callbackList[i]).indexOf("transformFieldNames")>0){
-                                               json = callbackList[i](json);
-                                               break;
-                                       }
-                               }*/
-                               //json = AlarmLabels.transformFieldNames(json);
-                               if(callbackList[1]){
-                                       json = callbackList[1](json);
-                               }
-                if(json.response.status == 0){
-                    var resRowObject = json.response.data[0];
-                    var columnsCopy = $.extend(true, [], columns);
-                    //隐藏列的情况下需要特殊处理
-                    if($(window).width()>=hidden_xs_maxWidth && $(window).width()<hidden_sm_maxWidth){
-                        columnsCopy = [];
-                        for(var i=0;i<columns.length;i++){
-                            if(!includedInSmHiddenColumns(columns[i].columnId)){
-                                columnsCopy.push(columns[i]);
-                            }
-                        }
-                    } else if($(window).width()<hidden_xs_maxWidth){
-                        columnsCopy = [];
-                        for(var i=0;i<columns.length;i++){
-                            if(!includedInXsHiddenColumns(columns[i].columnId)){
-                                columnsCopy.push(columns[i]);
-                            }
-                        }
-                    }
-                    var iIndex = 1;
-                    if(rowCheckable){
-                        iIndex = 2;
-                    }
-                    for(var i=iIndex;i<tds.length && (i-iIndex)<columnsCopy.length;i++){
-                        var currentColumnId = columnsCopy[i-iIndex].columnId;
-                        if(jQuery.inArray(currentColumnId, columnsTooLong) > -1) {
-                            var rawText = "";                            
-                            for(var k=0;k<columnsTooLong.length;k++){
-                                if(currentColumnId == columnsTooLong[k]){
-                                    rawText = resRowObject[currentColumnId];
-                                    break;
-                                }
-                            }
-                            if(rawText.length > columnMaxLength){
-                                $(tds.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');
-                                $(tdDivs.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');
-                            }else{
-                                $(tds.eq(i)).html(resRowObject[currentColumnId]);
-                                $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);
-                            }
-                        } else {
-                            $(tds.eq(i)).html(resRowObject[currentColumnId]);
-                            $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);
-                        }
-                    }
-                    //更新缓存中的当前行数据
-                    for (var t = 0; t < dataTable.datas.length; t++) {
-                        var temp = dataTable.datas[t];
-                        if (temp.alarmId == resRowObject['alarmId']) {
-                            dataTable.datas[t] = resRowObject;
-                            break;
-                        }
-                    }
-                }
-                if(json.response.status == -1){
-                    $('div#myModalConfirm').modal({
-                        keyboard: false,
-                        backdrop: 'static'
-                    });
-                    $('span#alarm_number').html(tdAlarmId);
-                    //国际化信息
-                    if(ackType==1){
-                        $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_ok'));
-                    }else{
-                        $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_un'));
-                    }
-                }
-                               //填充单元格颜色
-                               var divColor = $("div.cellBackgroundColor", tr);
-                               $(divColor).parent().css("background", $(divColor).css("background-color"));
-            },
-            "error": function() {
-                alert('Communication Error!');
-            }
-        } );
-    }
-
-    var addRowOverlap = function(){
-        var $tableData = $('table#datatable_ajax');
-        //取得隐藏的头部表格的相应行
-        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');
-        var trHeads = $tableHead.find('tr').get();
-        $.each( trHeads, function( index, trHead ){
-            $(trHead).attr('id', 'headTableTR' + index);
-        });
-        //取得浮动div
-        var $divOverlay = $('div#divOverlay');
-        var divScrollHead = $('div.dataTables_scrollHead');
-        var divRightPadding = $('div#divRightPadding');
-        //取表头下边沿位置
-        var tableHeadBottomHeight = $(divScrollHead).position().top + $(divScrollHead).height();
-        var tableBottom = $tableData.position().top + $tableData.height() + 3;
-        //取表格右边沿位置
-        var tableRightEdgePosition = $(divRightPadding).position().left;
-        var trs = $tableData.find('tr').get();
-        $.each( trs, function( index, tr ){
-            var tdEmpty = $('td.dataTables_empty',tr);
-            if(!tdEmpty || tdEmpty.length ==0 ){
-                $(tr).attr('id', 'bodyTableTR' + index);
-                               //$divOverlay.attr('id_tr', 'bodyTableTR' + index);
-                $(tr).one('hover', function(){
-                    var rowPos = $(tr).position();
-                    var currentTrTop = rowPos.top;
-                    //var bottomLeft = rowPos.left;
-                    $divOverlay.attr('id_tr', 'bodyTableTR' + index);
-                    $divOverlay.css({
-                        display: 'block',
-                        position: 'absolute',
-                        'background-color': '#e5e5e5',
-                        //opacity: 0.7,
-                        border: 'solid 0px',
-                        top: currentTrTop + 6,
-                        left: tableRightEdgePosition - 308,
-                        width: 300,
-                        height: 30
-                    });
-                    //防止浮动框跳出表格内容区域
-                    if( $divOverlay.position().top < tableHeadBottomHeight || $divOverlay.position().top + $divOverlay.height() > tableBottom){
-                        $divOverlay.css('display', 'none');
-                    }                                  
-                    var buttonConfirm = $('div#buttonConfirm', $divOverlay);
-                    var buttonUnConfirm = $('div#buttonUnConfirm', $divOverlay);
-                                       //初始化悬浮按钮当前行的确认反确认状态
-                                       if($(tr).find('span.alarmAck') && $(tr).find('span.alarmAck').length >0){
-                                               var spanAck = $(tr).find('span.alarmAck');
-                                               var ackState = $(spanAck).attr('ack_id');
-                                               var buttonTDsConfirm = $(buttonConfirm).find('td');
-                                               var buttonTDsUnConfirm = $(buttonUnConfirm).find('td');
-                                               if(ackState=="2"){                                                      
-                                                       if(buttonTDsConfirm && buttonTDsConfirm.length > 0 && buttonTDsUnConfirm && buttonTDsUnConfirm.length > 0){
-                                                               $.each(buttonTDsConfirm, function(index, td){
-                                                                       $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');
-                                                               });
-                                                               $.each(buttonTDsUnConfirm, function(index, td){
-                                                                       $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');
-                                                               });
-                                                       }
-                                               }else{
-                                                       if(buttonTDsConfirm && buttonTDsConfirm.length > 0 && buttonTDsUnConfirm && buttonTDsUnConfirm.length > 0){
-                                                               $.each(buttonTDsConfirm, function(index, td){                                                                   
-                                                                       $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');
-                                                               });
-                                                               $.each(buttonTDsUnConfirm, function(index, td){
-                                                                       $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');
-                                                               });
-                                                       }
-                                               }
-                                       }
-                                       //添加确认反确认点击事件
-                    $(buttonConfirm).one('click', function(){
-                        var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRounded');
-                        var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRoundedDisabled');
-                        if(buttonRoundedTDsConfirm && buttonRoundedTDsConfirm.length > 0){
-                            $.each(buttonRoundedTDsConfirm, function(index, td){
-                                $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');
-                            });
-                            $.each(buttonRoundedTDsUnConfirm, function(index, td){
-                                $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');
-                            });
-                            $divOverlay.css('display', 'none');
-                            singleAlarmAckUnAck($divOverlay, 1);
-                        }
-                    });
-                    $(buttonUnConfirm).one('click', function(){
-                        var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRounded');
-                        var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRoundedDisabled');
-                        if(buttonRoundedTDsUnConfirm && buttonRoundedTDsUnConfirm.length > 0){
-                            $.each(buttonRoundedTDsUnConfirm, function(index, td){
-                                $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');
-                            });
-                            $.each(buttonRoundedTDsConfirm, function(index, td){
-                                $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');
-                            });
-                            $divOverlay.css('display', 'none');
-                            singleAlarmAckUnAck($divOverlay, 2);
-                        }
-                    });
-                    var buttonDelete = $('div#buttonDelete', $divOverlay);
-                    $(buttonDelete).die().live('click', function(){
-                                               $divOverlay.css('display', 'none');
-                                               var trIdToDelete = $divOverlay.attr('id_tr');
-                                               var toDeleteTr=$('tr#' + trIdToDelete);
-                                               $("td", toDeleteTr).addClass('dataTableTdSelected');
-                        //弹出删除确认对话框
-                        $('div#myModal').modal({
-                            keyboard: false,
-                            backdrop: 'static'
-                        });
-                        $('#delConfirm').die().live('click', function(){
-                            //$divOverlay.css('display', 'none');
-                            dataTable.fnClose(tr);
-                                                       //删除后端数据
-                            singleAlarmDel($divOverlay);
-                                                       //删除当前行
-                            $(tr).remove();
-                            //删除表头表格的相应行
-                            $('tr#' + $(tr).attr('id').replace('body', 'head'), $tableHead).remove();                            
-                            //刷新表格
-                            //dataTable.fnAdjustColumnSizing();
-                        });
-                                               $('#myModal').on('hidden.bs.modal', function (e) {
-                                                         $("td", toDeleteTr).removeClass('dataTableTdSelected');
-                                               })
-                    });
-                                       //展开行的情况隐藏
-                                       $('td.details > table.detailTable').on('hover', function(){
-                                               $divOverlay.css('display', 'none');
-                                       });
-                                       $('div#myModal').on('hover', function(){
-                                               $divOverlay.css('display', 'none');
-                                       });
-                               });                             
-            }
-        });            
-    }
-
-    return {
-
-        //main function to initiate the module
-        init: function (options, columnsDefined, xsHiddenColumnsDefined, smHiddenColumnsDefined) {
-
-            if (!$().dataTable) {
-                return;
-            }
-
-            var the = this;
-
-            //记录需要禁掉默认排序的列
-            var aTargets = [];
-            var targetsLength = columnsDefined.length;
-            if(rowCheckable)targetsLength++;
-            if(openRowFlag)targetsLength++;
-            for(var i=0;i<targetsLength;i++){
-                aTargets.push(i);
-            }
-            aTargetsAll = aTargets;
-
-            // default settings
-            options = $.extend(true, {
-                src: "",  // actual table 
-                filterApplyAction: "filter",
-                filterCancelAction: "filter_cancel",
-                resetGroupActionInputOnSuccess: true,
-                dataTable: {
-                    //"sDom" : "<'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'<'table-group-actions pull-right'>>r><'table-scrollable't><'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'>r>>", // datatable layout
-
-                    "aoColumnDefs" : [{  // define columns sorting options(by default all columns are sortable extept the first checkbox column)
-                        'bSortable' : false,
-                        'aTargets' : aTargets
-                    }],
-
-                    "bAutoWidth": false,   // disable fixed width and enable fluid table
-                    //"bSortCellsTop": true, // make sortable only the first row in thead
-                    "sPaginationType": "bootstrap_extended", // pagination type(bootstrap, bootstrap_full_number or bootstrap_extended)
-                    "bProcessing": true, // enable/disable display message box on record load
-                    "bServerSide": true, // enable/disable server side ajax loading
-                    "sAjaxSource": "", // define ajax source URL 
-                    //"sServerMethod": "GET",
-
-                    // handle ajax request
-                    "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
-                        //for ICT Paging
-                        //var startIndex = aoData[3].value;//"iDisplayStart"
-                        //var pageLength = aoData[4].value;//"iDisplayLength"
-                        var oPaging = oSettings.oInstance.fnPagingInfo();
-                        //var startIndex = oPaging.iStart;
-                        var pageLength = oPaging.iLength;
-                        var curPageNo = oPaging.iPage + 1;
-
-                        for(var k=aoData.length-1;k>=0;k--){
-                            var flag = -1;
-                            if(aoData[k].name=='pageSize'){
-                                aoData[k].value=pageLength;
-                                flag++;
-                            }
-                            if(aoData[k].name=='pageNo'){
-                                aoData[k].value=curPageNo;
-                                flag++
-                            }
-                            if(flag == 1)break;
-                        }
-
-                        oSettings.jqXHR = $.ajax( {
-                            "dataType": 'json',
-                            "type": "GET",
-                            "url": sSource,
-                            "data": aoData,
-                            "success": function(res, textStatus, jqXHR) {
-                                if (res.sMessage) {
-                                    openoFrameWork.alert({type: (res.sStatus == 'OK' ? 'success' : 'danger'), icon: (res.sStatus == 'OK' ? 'check' : 'warning'), message: res.sMessage, container: tableWrapper, place: 'prepend'});
-                                }
-                                if ($('.group-checkable', tableContainer).size() === 1) {
-                                    $('.group-checkable', tableContainer).attr("checked", false);
-                                    $.uniform.update($('.group-checkable', tableContainer));
-                                }
-                                if (tableOptions.onSuccess) {
-                                    tableOptions.onSuccess.call(the);
-                                }
-                                //保存数据在dataTable对象中给行详细信息面板用
-                                dataTable.datas = res.response.data;
-                                                               if(res.response.status < 0){
-                                                                       alert(res.response.data);
-                                                                       return;
-                                                               }
-                                                               
-                                                               //告警字段值转换
-                                                               //res = AlarmLabels.transformFieldNames(res);
-                                                               /*for(var i=0;i<callbackList.length;i++){
-                                                                       if(getFnName(callbackList[i]).indexOf("transformFieldNames")>0){
-                                                                               res = callbackList[i](res);
-                                                                               break;
-                                                                       }
-                                                               }*/
-                                                               if(callbackList[1]){
-                                                                       res = callbackList[1](res);
-                                                               }
-                                                               
-                                res = jsonObjectToArray(res, columns, oSettings.iDraw);
-                                
-                                //重绘表格
-                                fnCallback(res, textStatus, jqXHR);
-                            },
-                            "error": function() {
-                                if (tableOptions.onError) {
-                                    tableOptions.onError.call(the);
-                                }
-                                openoFrameWork.alert({type: 'danger', icon: 'warning', message: tableOptions.dataTable.oLanguage.sAjaxRequestGeneralError, container: tableWrapper, place: 'prepend'});
-                                $('.dataTables_processing', tableWrapper).remove();
-                            }
-                        } );
-
-                    },
-
-                    // pass additional parameter
-                    "fnServerParams": function ( aoData ) {
-                        //here can be added an external ajax request parameters.
-                        //for(var i in ajaxParams) { 
-                        for(var i=0; i<ajaxParams.length; i++){
-                            var param = ajaxParams[i];
-                            aoData.push({"name" : param.name, "value": param.value});
-                        }
-                    },
-
-                    "fnDrawCallback": function( oSettings ) { // run some code on table redraw
-                        if (tableInitialized === false) { // check if table has been initialized
-                            tableInitialized = true; // set table initialized
-                            table.show(); // display table
-                        }
-                        openoFrameWork.initUniform($('input[type="checkbox"]', tableContainer));  // reinitialize uniform checkboxes on each table reload
-                        countSelectedRecords(); // reset selected records indicator
-                        //所有td不换行
-                        $('table#datatable_ajax').find('td').css('white-space', 'nowrap');
-
-                        //自适应对齐表头
-                        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
-                        var tbodyHead = $('tbody', $tableHead);
-                        if(tbodyHead && tbodyHead.length >0){
-                            $(tbodyHead).remove();
-                        }
-
-                        var $tableBody = $('table#datatable_ajax', tableWrapper);
-                        var trIn = $('thead > tr:nth-child(1)', $tableHead);
-                        var trBodyHead = $('thead > tr:nth-child(1)', $tableBody);
-                        var tds = $(trIn).children();
-                        var ths = $(trBodyHead).children();
-                        for(var k=0;k<tds.length;k++){
-                            $(ths.eq(k)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(k).html() + '</div>');
-                        }
-                        var bodyRows = $('tbody > tr', $tableBody);
-                        for(var i=0;i<bodyRows.length;i++){
-                            var rowClone = $(bodyRows.eq(i)).clone();
-                            var tds = $(rowClone).children();
-                            for(var j=0;j<tds.length;j++){
-                                $(tds.eq(j)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(j).html() + '</div>');
-                                $(tds.eq(j)).height('0px');
-                                $(tds.eq(j)).css('padding-top','0px');
-                                $(tds.eq(j)).css('padding-bottom','0px');
-                                $(tds.eq(j)).css('border-top-width','0px');
-                                $(tds.eq(j)).css('border-bottom-width','0px');
-                            }
-                            $(rowClone).height('0px');
-                            $tableHead.append($(rowClone).prop("outerHTML"));
-                        }
-
-                        $('.dataTables_scrollBody').css('width','100%');
-                        $('.dataTables_scrollHead').css('width','98.5%');
-                        $('.dataTables_scrollHeadInner').css('padding-right', 0);
-
-                        //添加浮动确认反确认按钮
-                        if(rowOverFlag){
-                            addRowOverlap();
-                        }
-                                               
-                                               //填充单元格颜色
-                                               var divColors = $("div.cellBackgroundColor", $tableBody);
-                                               $.each( divColors, function( index, divColor ){
-                                                       $(divColor).parent().css("background", $(divColor).css("background-color"));
-                                               });
-                        
-                        //设置表格本体高度
-                        $('div.dataTables_scrollBody').css('height', tableHeight);
-                    }
-                }
-            }, options);
-
-            tableOptions = options;
-
-            columns = columnsDefined;
-            xsHiddenColumns = xsHiddenColumnsDefined;
-            smHiddenColumns = smHiddenColumnsDefined;
-            // create table's jquery object
-            table = $(options.src);
-            tableContainer = table.parents(".table-container");
-            // apply the special class that used to restyle the default datatable
-
-            $.fn.dataTableExt.oStdClasses.sWrapper = $.fn.dataTableExt.oStdClasses.sWrapper + " dataTables_extended_wrapper";
-
-            // initialize a datatable
-            dataTable = table.dataTable(options.dataTable);
-
-            tableWrapper = table.parents('.dataTables_wrapper');
-
-            // modify table per page dropdown input by appliying some classes
-            $('.dataTables_length select', tableWrapper).addClass("form-control input-xsmall input-sm");
-
-            // handle group checkboxes check/uncheck
-            $('.group-checkable', tableContainer).change(function () {
-                var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);
-                var checked = $(this).is(":checked");
-                $(set).each(function () {
-                    $(this).attr("checked", checked);
-                });
-                $.uniform.update(set);
-                countSelectedRecords();
-            });
-
-            // handle row's checkbox click
-            table.on('change', 'tbody > tr > td:nth-child(1) input[type="checkbox"]', function(){
-                countSelectedRecords();
-            });
-
-            //填充表头右边界
-            $('.dataTables_scrollHead').css('display','inline-block');
-            //var dataTables_scrollHead_height = $('.dataTables_scrollHead').css( "height" );
-            $(".dataTables_scrollHead").after("<div id='divRightPadding' style='overflow: hidden; background:#eee; position: relative; float:right; border: 1px solid #ddd; height:" + 38 + "px; width: 1.4%;'></div>");
-            if($.browser.mozilla){
-                $('#divRightPadding').css('height', '40');
-            }
-
-            //隐藏掉某些列
-            var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
-            var $tableBody = $('table#datatable_ajax', tableWrapper);
-
-            for(var i=0;i<xsHiddenColumns.length;i++){
-                for(var j=0;j<columns.length;j++){
-                    if(xsHiddenColumns[i].columnId == columns[j].columnId){
-                        $('thead >  tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-xs');
-                        $('thead >  tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-xs');
-                        break;
-                    }
-                }
-            }
-
-            for(var i=0;i<smHiddenColumns.length;i++){
-                for(var j=0;j<columns.length;j++){
-                    if(smHiddenColumns[i].columnId == columns[j].columnId){
-                        $('thead >  tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-sm');
-                        $('thead >  tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-sm');
-                        break;
-                    }
-                }
-            }
-        },//end init------------------------------------------------------------------------------------
-
-        getSelectedRowsCount: function() {
-            return $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();
-        },
-
-        getSelectedRows: function() {
-            var rows = [];
-            $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).each(function(){
-                rows.push({name: $(this).attr("name"), value: $(this).val()});
-            });
-
-            return rows;
-        },
-
-        addAjaxParam: function(name, value) {
-            ajaxParams.push({"name": name, "value": value});
-        },
-
-        clearAjaxParams: function(name, value) {
-            ajaxParams = [];
-        },
-
-        getDataTable: function() {
-            return dataTable;
-        },
-
-        getTableWrapper: function() {
-            return tableWrapper;
-        },
-
-        gettableContainer: function() {
-            return tableContainer;
-        },
-
-        getTable: function() {
-            return table;
-        },
-
-        setOpenRowFlag: function(openRowFlagInput) {
-            openRowFlag = openRowFlagInput;
-        },
-
-        setRowOverFlag: function(rowOverFlagInput) {
-            rowOverFlag = rowOverFlagInput;
-        },
-
-        setRowCheckable: function(rowCheckableInput) {
-            rowCheckable = rowCheckableInput;
-        },
-
-        setColumnsTooLong: function(columnsTooLongInput) {
-            columnsTooLong = columnsTooLongInput;
-        },
-
-        setSTotalRecordsSource: function(sTotalRecordsSourceInput){
-            sTotalRecordsSource = sTotalRecordsSourceInput;
-        },
-
-        setTableHeight: function(tableHeightInput){
-            tableHeight = tableHeightInput;
-        },
-               
-               setCallbackList: function(list){
-                       if($.isArray(list)){
-                               callbackList = list;
-                       }
-               }
-
-    };
-
-};
-
-var TableAjaxICT = function () {
-
-    var initPickers = function () {
-        //init date pickers
-        $('.date-picker').datepicker({
-            //rtl: App.isRTL(),
-            autoclose: true
-        });
-    }
-
-    //判断a数组是否包含b数组
-    function isContained(largeArray, smallArray){
-        if(!(largeArray instanceof Array) || !(smallArray instanceof Array))
-            return false;
-        if(largeArray.length < smallArray.length)
-            return false;
-        for(var i = 0; i < smallArray.length; i++){
-            var flag = false;
-            for(j=0;j<largeArray.length;j++){
-                if(largeArray[j].columnId == smallArray[i].columnId){
-                    flag = true;
-                    break;
-                }
-            }
-            if(flag==false)return false;
-        }
-        return true;
-    }
-
-    var grid = new DatatableICT();
-       
-       var detailTableId = "alarmDetailInfo";
-
-    /* Formatting function for row details */
-    function fnFormatDetails(oTable, nTr, columns, rowCheckable) {
-        //取得当前行显示数据
-        var tds = $(nTr).children();
-        var alarmId="";
-        if(rowCheckable){
-            alarmId = $(tds.eq(2)).html();
-        }else{
-            alarmId = $(tds.eq(1)).html();
-        }
-        //取得当前行完整数据
-        var systemType = 0;
-        var code = 0;
-        //所有字段
-        var resDisplayName="";
-        var moc="";
-        var alarmRaisedTime="";
-        var perceivedSeverity="";
-        var probableCauseDesc="";
-        var neip="";
-        var alarmType="";
-        var ackState="";
-        var ackTime="";
-        var ackUserId="";
-        var ackSystemId="";
-        var alarmChangedTime="";
-        var componentname="";
-        var position1="";
-        var specificproblem="";
-        var additionalText="";
-        for (var i = 0; i < oTable.datas.length; i++) {
-            var temp = oTable.datas[i];
-            if (temp.alarmId == alarmId) {
-                alarmId = temp.alarmId;
-                resDisplayName = temp.resDisplayName;
-                alarmRaisedTime = temp.alarmRaisedTime;
-                perceivedSeverity = temp.perceivedSeverity;
-                probableCauseDesc = temp.probableCauseDesc;
-                neip = temp.neip;
-                alarmType = temp.alarmType;
-                ackState = temp.ackState;
-                ackTime = temp.ackTime;
-                ackUserId = temp.ackUserId;
-                ackSystemId = temp.ackSystemId;
-                alarmChangedTime = temp.alarmChangedTime;
-
-                systemType = temp.systemType;
-                code = temp.probableCauseCode;
-                moc = temp.moc;
-                componentname = temp.componentname;
-                position1 = temp.position1;
-                specificproblem = temp.specificproblem;
-                additionalText = temp.additionalText;
-                break;
-            }
-        }
-
-        var id = alarmId;
-               //获取所有展开的详细信息面板生成当前的面板id用于定位
-               var detailTables = $('[class_id=detailTableAlarm]');
-               if(detailTables && detailTables.length > 0){
-                       detailTableId = "alarmDetailInfo" + detailTables.length;
-               }
-        var sOut = '<table id="' + detailTableId + '" class_id="detailTableAlarm" class = "detailTable" width = "800" style="table-layout: fixed;">';
-        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[0].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmId + '</td>';
-        sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[4].columnTitle + '</span></td><td class = "detailCellStyle" width = 130>' + perceivedSeverity + '</td>';
-        sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[9].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmType + '</td>';
-        sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[3].columnTitle + '</span></td><td class = "detailCellStyle" width = 160 colspan = 2>' + alarmRaisedTime + '</td></tr>';
-
-        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[5].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + probableCauseDesc + '</td>';
-        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[15].columnTitle + '</span></td><td class = "detailCellStyle">' + alarmChangedTime + '</td>';
-        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[11].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 2>' + ackState + '</td></tr>';
-
-        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[12].columnTitle + '</span></td><td class = "detailCellStyle">' + ackTime + '</td>';
-        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[13].columnTitle + '</span></td><td class = "detailCellStyle">' + ackUserId + '</td>';
-        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[14].columnTitle + '</span></td><td class = "detailCellStyle">' + ackSystemId + '</td>';
-        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[7].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 2>' + neip + '</td></tr>';
-
-        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[2].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + moc + '</td>';
-        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[1].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 4>' + resDisplayName + '</td></tr>';
-
-        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[8].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + componentname + '</td>';
-        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[16].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 4>' + position1 + '</td></tr>';
-
-        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[10].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 8>' + specificproblem + '</td></tr>';
-
-        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[6].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 8>' + additionalText + '</td></tr>';
-
-        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + $.i18n.prop('aos_fm_SuggestionSetting_view_DefaultSuggestionGroupTitle').replace(';', '').replace(/\"/g,'') + '</span></td><td id = "defaulInfo' + id + '" class = "detailCellStyle" colspan = 8>' + '</td></tr>';
-
-        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + $.i18n.prop('aos_fm_SuggestionSetting_view_SettingSuggestionGroupTitle').replace(';', '').replace(/\"/g,'') + '</span></td><td id = "customInfo' + id + '" class = "detailCellStyle" colspan = 6><td style="width:80px" align="right"><button id = "customInfoModify' + id + '" class="btn-toolbar" type="button"><span  id = "modifyBtnSpan' + id + '"class="fa fa-pencil-square-o"></span></button></td><td style="width:80px" id="cancelDiv' + id + '"></td></tr>';
-
-        sOut += '</table>';
-
-        /*
-         var systemType = 0;
-         var code = 0;
-         for (var i = 0; i < oTable.datas.length; i++) {
-         var temp = oTable.datas[i];
-         if (temp.alarmId == oTr['alarmId'].value) {
-         systemType = temp.systemType;
-         code = temp.probableCauseCode;
-         }
-         }*/
-        var data = {
-            "systemType" : systemType,
-            "code" : code
-        };
-        var sendData = JSON.stringify(data);
-        $.ajax({
-            "dataType" : 'json',
-            "type" : "GET",
-            "url" : "/web/rest/web/fm/Maintenance" + "?" + "data=" + sendData,
-            "contentType" : 'application/json; charset=utf-8',
-            "data" : null,
-            "success" : function (json) {
-                $('tr').find('td#defaulInfo' + id).text(json.defaulInfo);
-                $('tr').find('td#customInfo' + id).text(json.customInfo);
-                var modify = $('#customInfoModify' + id);
-                modify.on('click', function () {
-                    var span = $('#modifyBtnSpan' + id);
-                    var customInfo = $('tr').find('td#customInfo' + id);
-                    var cancel = $('#cancelDiv' + id);
-                    if (span['0'].className === 'fa fa-pencil-square-o') {
-                        var value = customInfo['0'].textContent;
-                        customInfo['0'].textContent = '';
-                        customInfo['0'].innerHTML = '<textarea  id="customInfoInput' + id + '" type="textarea" cols=110 rows=4 onKeyUp="if(this.value.length > 700) this.value=this.value.substr(0,700)">' + value + '</textarea>';
-                        span['0'].className = 'fa fa-floppy-o';
-                        cancel['0'].innerHTML = '<button id = "cancelBtn' + id + '" class="btn-toolbar" type="button"><span class="fa fa-sign-out"></span></button>';
-                        $('#cancelBtn' + id).on('click', function () {
-                            customInfo['0'].innerHTML = '';
-                            customInfo['0'].textContent = value;
-                            cancel['0'].innerHTML = '';
-                            span['0'].className = 'fa fa-pencil-square-o';
-                        });
-                    } else {
-                        var inputValue = $('#customInfoInput' + id)['0'].value;
-                        customInfo['0'].innerHTML = '';
-                        customInfo['0'].textContent = inputValue;
-                        span['0'].className = 'fa fa-pencil-square-o';
-                        cancel['0'].innerHTML = '';
-                        var modifyData = {
-                            "systemType" : systemType,
-                            "code" : code,
-                            "defaulInfo" : json.defaulInfo,
-                            "customInfo" : inputValue
-                        };
-                        $.ajax({
-                            "dataType" : 'json',
-                            "type" : "PUT",
-                            "url" : "/web/rest/web/fm/Maintenance",
-                            "contentType" : 'application/json; charset=utf-8',
-                            "data" : JSON.stringify(modifyData),
-                            "error" : function () {
-                                alert('Modify Error!');
-                            }
-                        });
-                    }
-                });
-            },
-            "error" : function () {
-                alert('Communication Error!');
-            }
-        });
-
-        return sOut;
-    }
-
-    var generateColumns = function(columns, openRowFlag, rowCheckable){
-        var $tableData = $('table#datatable_ajax');
-        var theadTR = $('thead > tr', $tableData);
-        if(rowCheckable){
-            theadTR.append('<th><input type="checkbox" class="group-checkable"></th>');
-        }
-        if(openRowFlag){
-            theadTR.append('<th>&nbsp;&nbsp;</th>');
-        }
-        for(var i=0;i<columns.length;i++){
-            theadTR.append('<TH id="' + columns[i].columnId + '" style="white-space: nowrap;">' + columns[i].columnTitle + '</TH>');
-        }
-    }
-
-    var sortHandling = function(oTable, openRowFlag, rowCheckable){
-        var indexSkip = -1;
-        if(openRowFlag&&rowCheckable){
-            indexSkip = 1;
-        }else if(openRowFlag&&!rowCheckable||!openRowFlag&&rowCheckable){
-            indexSkip = 0;
-        }
-        var $sortOrder = 0;   //排序类型 1表示升序,0表示降序
-        var tableWrapper = $('div#datatable_ajax_wrapper');
-        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
-        var $tableData = $('table#datatable_ajax');
-        var clearSort = function(currentTh){
-            var ths = $tableHead.find('th').get();
-            var tableDataHeadTHs = $tableData.find('th').get();
-            $.each( ths, function( index, th ){
-                if(index > indexSkip){
-                    if($(th).text() != currentTh.text()){
-                        if($(th).is('.sorting_disabled')){
-                            //do nothing;
-                        }else if($(th).is('.sorting_asc')){
-                            $(th).removeClass('sorting_asc').addClass('sorting_disabled');
-                            $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');
-                        }else if($(th).is('.sorting_desc')){
-                            $(th).removeClass('sorting_desc').addClass('sorting_disabled');
-                            $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');
-                        }
-                    }
-                }
-            });
-        }
-
-        $('th', $tableHead).each(function( column )
-        {
-            if(column>indexSkip){
-                //处理三种有可能存在的排序字段,比较方法
-                var findSortKey;
-                if( $(this).is('.sort-title') || $(this).is('.sorting_disabled') )
-                {
-                    findSortKey = function( $cell )
-                    {
-                        var cellText = $cell.text();
-                        if(isNaN(cellText)){
-                            return $cell.text().toUpperCase();
-                        }else{
-                            return parseFloat(cellText);
-                        }
-                        //return $cell.text().toUpperCase();
-                    }
-                }
-                else if( $(this).is('.sort-date') )
-                {
-                    findSortKey = function( $cell )
-                    {
-                        return Date.parse('1' + $cell.text());
-                    }
-                }
-                else if( $(this).is('.sort-price') )
-                {
-                    findSortKey = function( $cell )
-                    {
-                        var key =  parseFloat($cell.text().replace(/^[^\d.]*/, ''))
-                        return isNaN(key) ? 0 : key;
-                    }
-                }
-
-                //排序
-                if( findSortKey )
-                {
-                    $(this).click(function()
-                    {
-                        $sortOrder = $sortOrder == 0 ? 1 : 0;
-                        var tableDataHeadTHs = $tableData.find('th').get();
-
-                        if($sortOrder == 1){
-                            if($(this).is('.sorting_disabled')){
-                                $(this).removeClass('sorting_disabled').addClass('sorting_asc');
-                                $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_asc');
-                            }else if($(this).is('.sorting_asc')){
-                                $(this).removeClass('sorting_asc').addClass('sorting_desc');
-                                $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');
-                            }else if($(this).is('.sorting_desc')){
-                                $(this).removeClass('sorting_desc').addClass('sorting_asc');
-                                $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');
-                            }
-                        }else{
-                            if($(this).is('.sorting_disabled')){
-                                $(this).removeClass('sorting_disabled').addClass('sorting_desc');
-                                $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_desc');
-                            }else if($(this).is('.sorting_asc')){
-                                $(this).removeClass('sorting_asc').addClass('sorting_desc');
-                                $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');
-                            }else if($(this).is('.sorting_desc')){
-                                $(this).removeClass('sorting_desc').addClass('sorting_asc');
-                                $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');
-                            }
-                        }
-                        clearSort($(this));
-
-                        var rows = $tableData.find('tbody > tr').get();
-
-                        $.each( rows, function( index, row )
-                        {
-                            //先关掉所有行
-                            if ( oTable.fnIsOpen(row) )
-                            {
-                                $(row).find('.row-details').click();
-                            }
-                        });
-
-                        //重新取得所有行,否则排序后表格显示异常
-                        rows = $tableData.find('tbody > tr').get();
-
-                        $.each( rows, function( index, row )
-                        {
-                            row.sortKey = findSortKey($(row).children('td').eq(column));
-                        });
-                        //排序方法
-                        rows.sort(function( a, b )
-                        {
-                            if( $sortOrder == 1 )
-                            {
-                                //升序
-                                if(a.sortKey < b.sortKey)   return -1;
-                                if(a.sortKey > b.sortKey)   return  1;
-                                return 0;
-                            }
-                            else
-                            {
-                                //降序
-                                if(a.sortKey < b.sortKey)   return  1;
-                                if(a.sortKey > b.sortKey)   return -1;
-                                return 0;
-                            }
-                        });
-                        //排序后的对象添加给$table
-                        $.each( rows, function( index, row )
-                        {
-                            $tableData.children('tbody').append(row);
-                            row.sortKey = null;
-                        });
-                    });
-                }
-            }
-        });
-    }
-
-    var handleRecords = function(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource, callbackList) {
-
-        /*
-         jQuery.getJSON('/web/newict/framework/thirdparty/data-tables/app-universal-i18n-datatable-' + lang + '.json',
-         function(data) {
-         oLanguage = data;
-         });
-         */
-               grid.setCallbackList(callbackList);
-        grid.setOpenRowFlag(openRowFlag);
-        grid.setRowCheckable(rowCheckable);
-        grid.setRowOverFlag(rowOverFlag);
-        grid.setColumnsTooLong(columnsTooLong);
-        grid.setSTotalRecordsSource(sTotalRecordsSource);
-        grid.setTableHeight(tableHeight);
-        //取得查询条件
-//        if(!requestStr || requestStr.length == 0){
-//            requestStr = JSON.stringify(requestAllData);
-//        }
-               grid.clearAjaxParams();
-        grid.addAjaxParam('data', requestStr);
-        //取得其他参数
-        for(var i=0;i<requestParameters.length;i++){
-            grid.addAjaxParam(requestParameters[i].paraId,requestParameters[i].paraValue);
-        }
-
-        grid.init({
-            src: $("#datatable_ajax"),
-            onSuccess: function(grid) {
-                // execute some code after table records loaded
-                var tableWrapper = $('div#datatable_ajax_wrapper');
-                var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);
-                var ths = $tableHead.find('th').get();
-                var $tableData = $('table#datatable_ajax');
-                var tableDataHeadTHs = $tableData.find('th').get();
-                $.each( ths, function( index, th ){
-                    //clear all sort direction
-                    if($(th).is('.sorting_disabled')){
-                        //do nothing;
-                    }else if($(th).is('.sorting_asc')){
-                        $(th).removeClass('sorting_asc').addClass('sorting_disabled');
-                        $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');
-                    }else if($(th).is('.sorting_desc')){
-                        $(th).removeClass('sorting_desc').addClass('sorting_disabled');
-                        $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');
-                    }
-                });
-
-            },
-            onError: function(grid) {
-                // execute some code on network or other general error
-            },
-            dataTable: {
-                "sDom" : "tr<'row'<'col-md-6 col-sm-12'><'col-md-6 col-sm-12'pli>>", // datatable layout
-                "oLanguage": oLanguage,
-                //"bAutoWidth": true,
-                "sScrollY": tableHeight,
-                "bScrollCollapse": true,
-                "sScrollX": "100%",
-                //"sScrollXInner": "110%",
-                "aLengthMenu": [
-                    [20, 50, 100],
-                    [20, 50, 100] // change per page values here
-                ],
-                "iDisplayLength": 20, // default record count per page
-                "bServerSide": true, // server side processing
-                "sAjaxSource": requestURL // ajax source
-            }
-        }, columns, xsHiddenColumns, smHiddenColumns, openRowFlag, rowCheckable);
-    }
-
-    /*
-     * Insert a 'details' column to the table
-     */
-    var insertDetails = function (oTable, columns, rowCheckable) {
-
-        var $tableData = $('table#datatable_ajax');
-
-        $tableData.on('click', ' tbody td .row-details', function () {
-            var nTr = $(this).parents('tr')[0];
-            if (oTable.fnIsOpen(nTr)) {
-                /* This row is already open - close it */
-                $(this).addClass("row-details-close").removeClass("row-details-open");
-                oTable.fnClose(nTr);
-            } else {
-                /* Open this row */
-                $(this).addClass("row-details-open").removeClass("row-details-close");
-                oTable.fnOpen(nTr, fnFormatDetails(oTable, nTr, columns, rowCheckable), 'details');
-                               //填充单元格颜色
-                               var divColor = $("div.cellBackgroundColor", $("table#" + detailTableId));
-                               $(divColor).parent().css("background", $(divColor).css("background-color"));
-            }                  
-        });
-    }
-
-    return {
-
-        //main function to initiate the module
-        init: function (requestStr, lang, configPathPrefix, callbackList) {
-
-            var oLanguage;
-            var columns;
-            var xsHiddenColumns;
-            var smHiddenColumns;
-            var columnsAll;
-
-            var openRowFlag = false;
-            var rowOverFlag = false;
-            var rowCheckable = false;
-            var requestURL="";
-            var requestAllData;
-            var requestParameters;
-
-            var tableHeight;
-            var tableWidth;
-
-            var columnsTooLong;
-            var sTotalRecordsSource="";
-
-            //取得当前配置及国际化信息
-            $.ajax({
-                dataType:   'json',
-                url:        configPathPrefix + '-' + lang + '.json',
-                async:      false,
-                contentType:'application/json; charset=utf-8',
-                "success":  function(data) {
-                    oLanguage = data.language;
-                    columns = data.columns;
-                    xsHiddenColumns = data.xsHiddenColumns;
-                    smHiddenColumns = data.smHiddenColumns;
-                    columnsAll = data.columnsAll;
-                    openRowFlag = data.openRowFlag == 'true'? true: false;
-                    rowOverFlag = data.rowOverFlag == 'true'? true: false;
-                    rowCheckable = data.rowCheckable == 'true'? true: false;
-                    requestURL = data.requestURL;
-                    //requestAllData = data.requestAllData;
-                    requestParameters = data.requestParameters;
-                    tableHeight = data.tableHeight;
-                    tableWidth = data.tableWidth;
-                    columnsTooLong = data.columnsTooLong;
-                    sTotalRecordsSource = data.sTotalRecordsSource;
-                },
-                "error" : function (xhr, info) {
-                    alert('Communication Error! Error reason:' + info);
-                }
-            });
-
-            $('#dataTableWrapperDiv').css('width', tableWidth);
-
-            if(!isContained(xsHiddenColumns, smHiddenColumns) || !isContained(columns, xsHiddenColumns) || !isContained(columnsAll, columns)){
-                alert('Columns claim error: (smHiddenColumns <= xsHiddenColumns <= columns <= columnsAll) Please!');
-                return;
-            }
-
-            generateColumns(columns, openRowFlag, rowCheckable);
-            //initPickers();
-            handleRecords(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource, callbackList);
-            //获得初始化完毕的DataTable对象
-            var oTable = grid.getDataTable();
-            if(openRowFlag){
-                insertDetails(oTable, columnsAll, rowCheckable);
-            }
-            sortHandling(oTable, openRowFlag, rowCheckable);
-            //oTable.fnAdjustColumnSizing(true);
-            return oTable;
-        }
-
-    };
-
-}();
-
-var DataTableSmartClientApp = function(datas, configPathPrefix, callbackList){
-
-    var requestStr = "";
-    if(datas){
-        requestStr = JSON.stringify(datas);
-    }
-       
-       var lang = getLanguage();
-       //lang = 'en-US';
-       /*for(var i=0;i<callbackList.length;i++){
-               if(getFnName(callbackList[i]).indexOf("i18n")>0){
-                       callbackList[i](lang);
-                       break;
-               }
-       }*/
-       if(callbackList && callbackList[0]){
-               callbackList[0](lang);
-       }
-       //requestStr = "";
-       var oTable = TableAjaxICT.init(requestStr, lang, configPathPrefix, callbackList);
-
-       //重新调节列宽以适应window resize
-       $(window).one('resize', function () {
-               //oTable.DataTable.models.oSettings.bAjaxDataGet = false;
-               oTable.fnAdjustColumnSizing(false);
-       } );
-}
+/***\r
+ Wrapper/Helper Class for datagrid based on jQuery Datatable Plugin\r
+ ***/\r
+var DatatableICT = function () {\r
+\r
+    var tableOptions;  // main options\r
+    var dataTable; // datatable object\r
+    var table;    // actual table jquery object\r
+    var tableContainer;    // actual table container object\r
+    var tableWrapper; // actual table wrapper jquery object\r
+    var tableInitialized = false;\r
+    var ajaxParams = []; // set filter mode\r
+    var columns;\r
+    var xsHiddenColumns;\r
+    var smHiddenColumns;\r
+    var columnMaxLength = 30;\r
+    var columnsTooLong;\r
+    var hidden_xs_maxWidth = 768;\r
+    var hidden_sm_maxWidth = 991;\r
+\r
+    var openRowFlag = false;\r
+    var rowOverFlag = false;\r
+    var rowCheckable = false;\r
+\r
+    var aTargetsAll;\r
+    var sTotalRecordsSource;\r
+    var tableHeight;\r
+       \r
+       var callbackList = [];\r
+\r
+    var includedInXsHiddenColumns = function(columnId){\r
+        for(var i=0;i<xsHiddenColumns.length; i++ ){\r
+            var column = xsHiddenColumns[i];\r
+            if(columnId == column.columnId){\r
+                return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+\r
+    var includedInSmHiddenColumns = function(columnId){\r
+        for(var i=0;i<smHiddenColumns.length; i++ ){\r
+            var column = smHiddenColumns[i];\r
+            if(columnId == column.columnId){\r
+                return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+\r
+    var countSelectedRecords = function() {\r
+        var selected = $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();\r
+        var text = tableOptions.dataTable.oLanguage.sGroupActions;\r
+        if (selected > 0) {\r
+            $('.table-group-actions > span', tableWrapper).text(text.replace("_TOTAL_", selected));\r
+        } else {\r
+            $('.table-group-actions > span', tableWrapper).text("");\r
+        }\r
+    }\r
+\r
+    var jsonObjectToArray = function(json, columns, iDraw){\r
+        var jsonToDatatable = {aaData:[], sEcho:iDraw, iTotalRecords:0, iTotalDisplayRecords:0 };\r
+        for(var i=0; i<json.response.data.length; i++){\r
+            jsonToDatatable.aaData[i] = [];\r
+            var resRowObject = json.response.data[i];\r
+            if(rowCheckable){\r
+                jsonToDatatable.aaData[i].push("<input type=\"checkbox\" name=\"id[]\" value=\"1\">");\r
+            }\r
+            if(openRowFlag){\r
+                jsonToDatatable.aaData[i].push("<span class=\"row-details row-details-close\"></span>");\r
+            }\r
+            for(var j=0; j<columns.length; j++){\r
+\r
+                if($(window).width() >= hidden_xs_maxWidth && $(window).width() < hidden_sm_maxWidth && includedInSmHiddenColumns(columns[j].columnId )){\r
+                    /*隐藏pad尺寸需要隐藏的列*/\r
+                }else if($(window).width() < hidden_xs_maxWidth && includedInXsHiddenColumns(columns[j].columnId )){\r
+                    /*隐藏手机尺寸需要隐藏的列*/\r
+                }else{\r
+                    var currentColumnId = columns[j].columnId;\r
+                    if(jQuery.inArray(currentColumnId, columnsTooLong) > -1){\r
+                        var rawText = "";                        \r
+                        for(var k=0;k<columnsTooLong.length;k++){\r
+                            if(currentColumnId == columnsTooLong[k]){\r
+                                rawText = resRowObject[currentColumnId];\r
+                                break;\r
+                            }\r
+                        }\r
+                        if(rawText.length > columnMaxLength){\r
+                            jsonToDatatable.aaData[i].push(rawText.slice(0, columnMaxLength) + '...');\r
+                        }else{\r
+                            jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);\r
+                        }\r
+                    } else {\r
+                        jsonToDatatable.aaData[i].push(resRowObject[currentColumnId]);\r
+                    }\r
+\r
+                }\r
+            }\r
+        }\r
+        jsonToDatatable.sEcho++;\r
+        var totalRow = 0;\r
+        var totalRecordsSource = eval('json.' + sTotalRecordsSource);\r
+        if(totalRecordsSource && totalRecordsSource.length >0){\r
+            totalRow = parseInt(totalRecordsSource);\r
+        }\r
+        if(isNaN(totalRow)){\r
+            alert('All rows counting number got fail!');\r
+        }else{\r
+            jsonToDatatable.iTotalRecords = totalRow;\r
+            jsonToDatatable.iTotalDisplayRecords = totalRow;\r
+        }\r
+        return jsonToDatatable;\r
+    }\r
+\r
+    var singleAlarmDel = function(divOverlay){\r
+\r
+        //根据浮动框的当前id获取需要删除的行\r
+        var trId = divOverlay.attr('id_tr');\r
+        tr=$('tr#' + trId);\r
+        var tds =  $(tr).children();\r
+        var tdAlarmId = "";\r
+               if(rowCheckable){\r
+                       tdAlarmId = $(tds.eq(2)).text();\r
+               }else{\r
+                       tdAlarmId = $(tds.eq(1)).text();\r
+               }\r
+\r
+        var data= {\r
+            "alarmId":[parseInt(tdAlarmId)]\r
+        };\r
+\r
+        var sSource = "/web/rest/web/fm/curalarms?data=" + JSON.stringify(data) + "&_operationType=remove&_dataSource=isc_PageRestDataSource_0&isc_metaDataPrefix=_&isc_dataFormat=json";\r
+\r
+        $.ajax( {\r
+            "dataType": 'json',\r
+            "type": "DELETE",\r
+            "url": sSource,\r
+            "data" : null,\r
+            "contentType" : 'application/json; charset=utf-8',\r
+            "success": function(json) {\r
+                if(json.response.status == 0){\r
+                    var resRowObject = json.response.data[0];\r
+                    //alert('删除成功');\r
+                }\r
+                if(json.response.status == -1){\r
+                    //alert('删除失败');\r
+                }\r
+            },\r
+            "error": function() {\r
+                alert('Communication Error!');\r
+            }\r
+        } );\r
+    }\r
+\r
+    var singleAlarmAckUnAck = function(divOverlay, ackType){\r
+\r
+        //根据浮动框的当前id获取需要确认的行\r
+        var trId = divOverlay.attr('id_tr');\r
+        var tr = $('tr#' + trId);\r
+\r
+        //取得隐藏的头部表格的相应行\r
+        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');\r
+        //var trHead = $('tbody > tr:nth-child(' + trId + ')', $tableHead);\r
+        var trHead = $('tr#' + trId.replace('body', 'head'), $tableHead);\r
+        var tdDivs = $('td > div', trHead);\r
+\r
+        var tds =  $(tr).children();\r
+        var tdAlarmId = "";\r
+        if(rowCheckable){\r
+            tdAlarmId = $(tds.eq(2)).text();\r
+        }else{\r
+            tdAlarmId = $(tds.eq(1)).text();\r
+        }\r
+\r
+        var aoData =\r
+        {\r
+            "dataSource":"isc_PageRestDataSource_0",\r
+            "operationType":"update",\r
+            "componentId":"isc_com_zte_ums_aos_fm_view_eventview_table_AlarmTable_0",\r
+            "data":{\r
+                "viewType":1,\r
+                "state":ackType,\r
+                "alarmId":[\r
+                    parseInt(tdAlarmId)\r
+                ]\r
+            },\r
+            "oldValues":null\r
+        };\r
+\r
+        var sSource = "/web/rest/web/fm/curalarms?isc_dataFormat=json";\r
+\r
+        $.ajax( {\r
+            "dataType": 'json',\r
+            "type": "PUT",\r
+            "url": sSource,\r
+            "contentType": 'application/json; charset=utf-8',\r
+            "data": JSON.stringify(aoData),\r
+            "success": function(json) {\r
+                               /*for(var i=0;i<callbackList.length;i++){\r
+                                       if(getFnName(callbackList[i]).indexOf("transformFieldNames")>0){\r
+                                               json = callbackList[i](json);\r
+                                               break;\r
+                                       }\r
+                               }*/\r
+                               //json = AlarmLabels.transformFieldNames(json);\r
+                               if(callbackList[1]){\r
+                                       json = callbackList[1](json);\r
+                               }\r
+                if(json.response.status == 0){\r
+                    var resRowObject = json.response.data[0];\r
+                    var columnsCopy = $.extend(true, [], columns);\r
+                    //隐藏列的情况下需要特殊处理\r
+                    if($(window).width()>=hidden_xs_maxWidth && $(window).width()<hidden_sm_maxWidth){\r
+                        columnsCopy = [];\r
+                        for(var i=0;i<columns.length;i++){\r
+                            if(!includedInSmHiddenColumns(columns[i].columnId)){\r
+                                columnsCopy.push(columns[i]);\r
+                            }\r
+                        }\r
+                    } else if($(window).width()<hidden_xs_maxWidth){\r
+                        columnsCopy = [];\r
+                        for(var i=0;i<columns.length;i++){\r
+                            if(!includedInXsHiddenColumns(columns[i].columnId)){\r
+                                columnsCopy.push(columns[i]);\r
+                            }\r
+                        }\r
+                    }\r
+                    var iIndex = 1;\r
+                    if(rowCheckable){\r
+                        iIndex = 2;\r
+                    }\r
+                    for(var i=iIndex;i<tds.length && (i-iIndex)<columnsCopy.length;i++){\r
+                        var currentColumnId = columnsCopy[i-iIndex].columnId;\r
+                        if(jQuery.inArray(currentColumnId, columnsTooLong) > -1) {\r
+                            var rawText = "";                            \r
+                            for(var k=0;k<columnsTooLong.length;k++){\r
+                                if(currentColumnId == columnsTooLong[k]){\r
+                                    rawText = resRowObject[currentColumnId];\r
+                                    break;\r
+                                }\r
+                            }\r
+                            if(rawText.length > columnMaxLength){\r
+                                $(tds.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');\r
+                                $(tdDivs.eq(i)).html(rawText.slice(0, columnMaxLength) + '...');\r
+                            }else{\r
+                                $(tds.eq(i)).html(resRowObject[currentColumnId]);\r
+                                $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);\r
+                            }\r
+                        } else {\r
+                            $(tds.eq(i)).html(resRowObject[currentColumnId]);\r
+                            $(tdDivs.eq(i)).html(resRowObject[currentColumnId]);\r
+                        }\r
+                    }\r
+                    //更新缓存中的当前行数据\r
+                    for (var t = 0; t < dataTable.datas.length; t++) {\r
+                        var temp = dataTable.datas[t];\r
+                        if (temp.alarmId == resRowObject['alarmId']) {\r
+                            dataTable.datas[t] = resRowObject;\r
+                            break;\r
+                        }\r
+                    }\r
+                }\r
+                if(json.response.status == -1){\r
+                    $('div#myModalConfirm').modal({\r
+                        keyboard: false,\r
+                        backdrop: 'static'\r
+                    });\r
+                    $('span#alarm_number').html(tdAlarmId);\r
+                    //国际化信息\r
+                    if(ackType==1){\r
+                        $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_ok'));\r
+                    }else{\r
+                        $('span#aos_fm_alarm_opeater_ack_already').html($.i18n.prop('aos_fm_alarm_opeater_ack_already_un'));\r
+                    }\r
+                }\r
+                               //填充单元格颜色\r
+                               var divColor = $("div.cellBackgroundColor", tr);\r
+                               $(divColor).parent().css("background", $(divColor).css("background-color"));\r
+            },\r
+            "error": function() {\r
+                alert('Communication Error!');\r
+            }\r
+        } );\r
+    }\r
+\r
+    var addRowOverlap = function(){\r
+        var $tableData = $('table#datatable_ajax');\r
+        //取得隐藏的头部表格的相应行\r
+        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable');\r
+        var trHeads = $tableHead.find('tr').get();\r
+        $.each( trHeads, function( index, trHead ){\r
+            $(trHead).attr('id', 'headTableTR' + index);\r
+        });\r
+        //取得浮动div\r
+        var $divOverlay = $('div#divOverlay');\r
+        var divScrollHead = $('div.dataTables_scrollHead');\r
+        var divRightPadding = $('div#divRightPadding');\r
+        //取表头下边沿位置\r
+        var tableHeadBottomHeight = $(divScrollHead).position().top + $(divScrollHead).height();\r
+        var tableBottom = $tableData.position().top + $tableData.height() + 3;\r
+        //取表格右边沿位置\r
+        var tableRightEdgePosition = $(divRightPadding).position().left;\r
+        var trs = $tableData.find('tr').get();\r
+        $.each( trs, function( index, tr ){\r
+            var tdEmpty = $('td.dataTables_empty',tr);\r
+            if(!tdEmpty || tdEmpty.length ==0 ){\r
+                $(tr).attr('id', 'bodyTableTR' + index);\r
+                               //$divOverlay.attr('id_tr', 'bodyTableTR' + index);\r
+                $(tr).one('hover', function(){\r
+                    var rowPos = $(tr).position();\r
+                    var currentTrTop = rowPos.top;\r
+                    //var bottomLeft = rowPos.left;\r
+                    $divOverlay.attr('id_tr', 'bodyTableTR' + index);\r
+                    $divOverlay.css({\r
+                        display: 'block',\r
+                        position: 'absolute',\r
+                        'background-color': '#e5e5e5',\r
+                        //opacity: 0.7,\r
+                        border: 'solid 0px',\r
+                        top: currentTrTop + 6,\r
+                        left: tableRightEdgePosition - 308,\r
+                        width: 300,\r
+                        height: 30\r
+                    });\r
+                    //防止浮动框跳出表格内容区域\r
+                    if( $divOverlay.position().top < tableHeadBottomHeight || $divOverlay.position().top + $divOverlay.height() > tableBottom){\r
+                        $divOverlay.css('display', 'none');\r
+                    }                                  \r
+                    var buttonConfirm = $('div#buttonConfirm', $divOverlay);\r
+                    var buttonUnConfirm = $('div#buttonUnConfirm', $divOverlay);\r
+                                       //初始化悬浮按钮当前行的确认反确认状态\r
+                                       if($(tr).find('span.alarmAck') && $(tr).find('span.alarmAck').length >0){\r
+                                               var spanAck = $(tr).find('span.alarmAck');\r
+                                               var ackState = $(spanAck).attr('ack_id');\r
+                                               var buttonTDsConfirm = $(buttonConfirm).find('td');\r
+                                               var buttonTDsUnConfirm = $(buttonUnConfirm).find('td');\r
+                                               if(ackState=="2"){                                                      \r
+                                                       if(buttonTDsConfirm && buttonTDsConfirm.length > 0 && buttonTDsUnConfirm && buttonTDsUnConfirm.length > 0){\r
+                                                               $.each(buttonTDsConfirm, function(index, td){\r
+                                                                       $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
+                                                               });\r
+                                                               $.each(buttonTDsUnConfirm, function(index, td){\r
+                                                                       $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
+                                                               });\r
+                                                       }\r
+                                               }else{\r
+                                                       if(buttonTDsConfirm && buttonTDsConfirm.length > 0 && buttonTDsUnConfirm && buttonTDsUnConfirm.length > 0){\r
+                                                               $.each(buttonTDsConfirm, function(index, td){                                                                   \r
+                                                                       $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
+                                                               });\r
+                                                               $.each(buttonTDsUnConfirm, function(index, td){\r
+                                                                       $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
+                                                               });\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                                       //添加确认反确认点击事件\r
+                    $(buttonConfirm).one('click', function(){\r
+                        var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRounded');\r
+                        var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRoundedDisabled');\r
+                        if(buttonRoundedTDsConfirm && buttonRoundedTDsConfirm.length > 0){\r
+                            $.each(buttonRoundedTDsConfirm, function(index, td){\r
+                                $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
+                            });\r
+                            $.each(buttonRoundedTDsUnConfirm, function(index, td){\r
+                                $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
+                            });\r
+                            $divOverlay.css('display', 'none');\r
+                            singleAlarmAckUnAck($divOverlay, 1);\r
+                        }\r
+                    });\r
+                    $(buttonUnConfirm).one('click', function(){\r
+                        var buttonRoundedTDsUnConfirm = $(buttonUnConfirm).find('td.buttonRounded');\r
+                        var buttonRoundedTDsConfirm = $(buttonConfirm).find('td.buttonRoundedDisabled');\r
+                        if(buttonRoundedTDsUnConfirm && buttonRoundedTDsUnConfirm.length > 0){\r
+                            $.each(buttonRoundedTDsUnConfirm, function(index, td){\r
+                                $(td).removeClass('buttonRounded').addClass('buttonRoundedDisabled');\r
+                            });\r
+                            $.each(buttonRoundedTDsConfirm, function(index, td){\r
+                                $(td).removeClass('buttonRoundedDisabled').addClass('buttonRounded');\r
+                            });\r
+                            $divOverlay.css('display', 'none');\r
+                            singleAlarmAckUnAck($divOverlay, 2);\r
+                        }\r
+                    });\r
+                    var buttonDelete = $('div#buttonDelete', $divOverlay);\r
+                    $(buttonDelete).die().live('click', function(){\r
+                                               $divOverlay.css('display', 'none');\r
+                                               var trIdToDelete = $divOverlay.attr('id_tr');\r
+                                               var toDeleteTr=$('tr#' + trIdToDelete);\r
+                                               $("td", toDeleteTr).addClass('dataTableTdSelected');\r
+                        //弹出删除确认对话框\r
+                        $('div#myModal').modal({\r
+                            keyboard: false,\r
+                            backdrop: 'static'\r
+                        });\r
+                        $('#delConfirm').die().live('click', function(){\r
+                            //$divOverlay.css('display', 'none');\r
+                            dataTable.fnClose(tr);\r
+                                                       //删除后端数据\r
+                            singleAlarmDel($divOverlay);\r
+                                                       //删除当前行\r
+                            $(tr).remove();\r
+                            //删除表头表格的相应行\r
+                            $('tr#' + $(tr).attr('id').replace('body', 'head'), $tableHead).remove();                            \r
+                            //刷新表格\r
+                            //dataTable.fnAdjustColumnSizing();\r
+                        });\r
+                                               $('#myModal').on('hidden.bs.modal', function (e) {\r
+                                                         $("td", toDeleteTr).removeClass('dataTableTdSelected');\r
+                                               })\r
+                    });\r
+                                       //展开行的情况隐藏\r
+                                       $('td.details > table.detailTable').on('hover', function(){\r
+                                               $divOverlay.css('display', 'none');\r
+                                       });\r
+                                       $('div#myModal').on('hover', function(){\r
+                                               $divOverlay.css('display', 'none');\r
+                                       });\r
+                               });                             \r
+            }\r
+        });            \r
+    }\r
+\r
+    return {\r
+\r
+        //main function to initiate the module\r
+        init: function (options, columnsDefined, xsHiddenColumnsDefined, smHiddenColumnsDefined) {\r
+\r
+            if (!$().dataTable) {\r
+                return;\r
+            }\r
+\r
+            var the = this;\r
+\r
+            //记录需要禁掉默认排序的列\r
+            var aTargets = [];\r
+            var targetsLength = columnsDefined.length;\r
+            if(rowCheckable)targetsLength++;\r
+            if(openRowFlag)targetsLength++;\r
+            for(var i=0;i<targetsLength;i++){\r
+                aTargets.push(i);\r
+            }\r
+            aTargetsAll = aTargets;\r
+\r
+            // default settings\r
+            options = $.extend(true, {\r
+                src: "",  // actual table \r
+                filterApplyAction: "filter",\r
+                filterCancelAction: "filter_cancel",\r
+                resetGroupActionInputOnSuccess: true,\r
+                dataTable: {\r
+                    //"sDom" : "<'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'<'table-group-actions pull-right'>>r><'table-scrollable't><'row'<'col-md-8 col-sm-12'pli><'col-md-4 col-sm-12'>r>>", // datatable layout\r
+\r
+                    "aoColumnDefs" : [{  // define columns sorting options(by default all columns are sortable extept the first checkbox column)\r
+                        'bSortable' : false,\r
+                        'aTargets' : aTargets\r
+                    }],\r
+\r
+                    "bAutoWidth": false,   // disable fixed width and enable fluid table\r
+                    //"bSortCellsTop": true, // make sortable only the first row in thead\r
+                    "sPaginationType": "bootstrap_extended", // pagination type(bootstrap, bootstrap_full_number or bootstrap_extended)\r
+                    "bProcessing": true, // enable/disable display message box on record load\r
+                    "bServerSide": true, // enable/disable server side ajax loading\r
+                    "sAjaxSource": "", // define ajax source URL \r
+                    //"sServerMethod": "GET",\r
+\r
+                    // handle ajax request\r
+                    "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {\r
+                        //for ICT Paging\r
+                        //var startIndex = aoData[3].value;//"iDisplayStart"\r
+                        //var pageLength = aoData[4].value;//"iDisplayLength"\r
+                        var oPaging = oSettings.oInstance.fnPagingInfo();\r
+                        //var startIndex = oPaging.iStart;\r
+                        var pageLength = oPaging.iLength;\r
+                        var curPageNo = oPaging.iPage + 1;\r
+\r
+                        for(var k=aoData.length-1;k>=0;k--){\r
+                            var flag = -1;\r
+                            if(aoData[k].name=='pageSize'){\r
+                                aoData[k].value=pageLength;\r
+                                flag++;\r
+                            }\r
+                            if(aoData[k].name=='pageNo'){\r
+                                aoData[k].value=curPageNo;\r
+                                flag++\r
+                            }\r
+                            if(flag == 1)break;\r
+                        }\r
+\r
+                        oSettings.jqXHR = $.ajax( {\r
+                            "dataType": 'json',\r
+                            "type": "GET",\r
+                            "url": sSource,\r
+                            "data": aoData,\r
+                            "success": function(res, textStatus, jqXHR) {\r
+                                if (res.sMessage) {\r
+                                    openoFrameWork.alert({type: (res.sStatus == 'OK' ? 'success' : 'danger'), icon: (res.sStatus == 'OK' ? 'check' : 'warning'), message: res.sMessage, container: tableWrapper, place: 'prepend'});\r
+                                }\r
+                                if ($('.group-checkable', tableContainer).size() === 1) {\r
+                                    $('.group-checkable', tableContainer).attr("checked", false);\r
+                                    $.uniform.update($('.group-checkable', tableContainer));\r
+                                }\r
+                                if (tableOptions.onSuccess) {\r
+                                    tableOptions.onSuccess.call(the);\r
+                                }\r
+                                //保存数据在dataTable对象中给行详细信息面板用\r
+                                dataTable.datas = res.response.data;\r
+                                                               if(res.response.status < 0){\r
+                                                                       alert(res.response.data);\r
+                                                                       return;\r
+                                                               }\r
+                                                               \r
+                                                               //告警字段值转换\r
+                                                               //res = AlarmLabels.transformFieldNames(res);\r
+                                                               /*for(var i=0;i<callbackList.length;i++){\r
+                                                                       if(getFnName(callbackList[i]).indexOf("transformFieldNames")>0){\r
+                                                                               res = callbackList[i](res);\r
+                                                                               break;\r
+                                                                       }\r
+                                                               }*/\r
+                                                               if(callbackList[1]){\r
+                                                                       res = callbackList[1](res);\r
+                                                               }\r
+                                                               \r
+                                res = jsonObjectToArray(res, columns, oSettings.iDraw);\r
+                                \r
+                                //重绘表格\r
+                                fnCallback(res, textStatus, jqXHR);\r
+                            },\r
+                            "error": function() {\r
+                                if (tableOptions.onError) {\r
+                                    tableOptions.onError.call(the);\r
+                                }\r
+                                openoFrameWork.alert({type: 'danger', icon: 'warning', message: tableOptions.dataTable.oLanguage.sAjaxRequestGeneralError, container: tableWrapper, place: 'prepend'});\r
+                                $('.dataTables_processing', tableWrapper).remove();\r
+                            }\r
+                        } );\r
+\r
+                    },\r
+\r
+                    // pass additional parameter\r
+                    "fnServerParams": function ( aoData ) {\r
+                        //here can be added an external ajax request parameters.\r
+                        //for(var i in ajaxParams) { \r
+                        for(var i=0; i<ajaxParams.length; i++){\r
+                            var param = ajaxParams[i];\r
+                            aoData.push({"name" : param.name, "value": param.value});\r
+                        }\r
+                    },\r
+\r
+                    "fnDrawCallback": function( oSettings ) { // run some code on table redraw\r
+                        if (tableInitialized === false) { // check if table has been initialized\r
+                            tableInitialized = true; // set table initialized\r
+                            table.show(); // display table\r
+                        }\r
+                        openoFrameWork.initUniform($('input[type="checkbox"]', tableContainer));  // reinitialize uniform checkboxes on each table reload\r
+                        countSelectedRecords(); // reset selected records indicator\r
+                        //所有td不换行\r
+                        $('table#datatable_ajax').find('td').css('white-space', 'nowrap');\r
+\r
+                        //自适应对齐表头\r
+                        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
+                        var tbodyHead = $('tbody', $tableHead);\r
+                        if(tbodyHead && tbodyHead.length >0){\r
+                            $(tbodyHead).remove();\r
+                        }\r
+\r
+                        var $tableBody = $('table#datatable_ajax', tableWrapper);\r
+                        var trIn = $('thead > tr:nth-child(1)', $tableHead);\r
+                        var trBodyHead = $('thead > tr:nth-child(1)', $tableBody);\r
+                        var tds = $(trIn).children();\r
+                        var ths = $(trBodyHead).children();\r
+                        for(var k=0;k<tds.length;k++){\r
+                            $(ths.eq(k)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(k).html() + '</div>');\r
+                        }\r
+                        var bodyRows = $('tbody > tr', $tableBody);\r
+                        for(var i=0;i<bodyRows.length;i++){\r
+                            var rowClone = $(bodyRows.eq(i)).clone();\r
+                            var tds = $(rowClone).children();\r
+                            for(var j=0;j<tds.length;j++){\r
+                                $(tds.eq(j)).html('<div style="height: 0;overflow: hidden;">' + tds.eq(j).html() + '</div>');\r
+                                $(tds.eq(j)).height('0px');\r
+                                $(tds.eq(j)).css('padding-top','0px');\r
+                                $(tds.eq(j)).css('padding-bottom','0px');\r
+                                $(tds.eq(j)).css('border-top-width','0px');\r
+                                $(tds.eq(j)).css('border-bottom-width','0px');\r
+                            }\r
+                            $(rowClone).height('0px');\r
+                            $tableHead.append($(rowClone).prop("outerHTML"));\r
+                        }\r
+\r
+                        $('.dataTables_scrollBody').css('width','100%');\r
+                        $('.dataTables_scrollHead').css('width','98.5%');\r
+                        $('.dataTables_scrollHeadInner').css('padding-right', 0);\r
+\r
+                        //添加浮动确认反确认按钮\r
+                        if(rowOverFlag){\r
+                            addRowOverlap();\r
+                        }\r
+                                               \r
+                                               //填充单元格颜色\r
+                                               var divColors = $("div.cellBackgroundColor", $tableBody);\r
+                                               $.each( divColors, function( index, divColor ){\r
+                                                       $(divColor).parent().css("background", $(divColor).css("background-color"));\r
+                                               });\r
+                        \r
+                        //设置表格本体高度\r
+                        $('div.dataTables_scrollBody').css('height', tableHeight);\r
+                    }\r
+                }\r
+            }, options);\r
+\r
+            tableOptions = options;\r
+\r
+            columns = columnsDefined;\r
+            xsHiddenColumns = xsHiddenColumnsDefined;\r
+            smHiddenColumns = smHiddenColumnsDefined;\r
+            // create table's jquery object\r
+            table = $(options.src);\r
+            tableContainer = table.parents(".table-container");\r
+            // apply the special class that used to restyle the default datatable\r
+\r
+            $.fn.dataTableExt.oStdClasses.sWrapper = $.fn.dataTableExt.oStdClasses.sWrapper + " dataTables_extended_wrapper";\r
+\r
+            // initialize a datatable\r
+            dataTable = table.dataTable(options.dataTable);\r
+\r
+            tableWrapper = table.parents('.dataTables_wrapper');\r
+\r
+            // modify table per page dropdown input by appliying some classes\r
+            $('.dataTables_length select', tableWrapper).addClass("form-control input-xsmall input-sm");\r
+\r
+            // handle group checkboxes check/uncheck\r
+            $('.group-checkable', tableContainer).change(function () {\r
+                var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);\r
+                var checked = $(this).is(":checked");\r
+                $(set).each(function () {\r
+                    $(this).attr("checked", checked);\r
+                });\r
+                $.uniform.update(set);\r
+                countSelectedRecords();\r
+            });\r
+\r
+            // handle row's checkbox click\r
+            table.on('change', 'tbody > tr > td:nth-child(1) input[type="checkbox"]', function(){\r
+                countSelectedRecords();\r
+            });\r
+\r
+            //填充表头右边界\r
+            $('.dataTables_scrollHead').css('display','inline-block');\r
+            //var dataTables_scrollHead_height = $('.dataTables_scrollHead').css( "height" );\r
+            $(".dataTables_scrollHead").after("<div id='divRightPadding' style='overflow: hidden; background:#eee; position: relative; float:right; border: 1px solid #ddd; height:" + 38 + "px; width: 1.4%;'></div>");\r
+            if($.browser.mozilla){\r
+                $('#divRightPadding').css('height', '40');\r
+            }\r
+\r
+            //隐藏掉某些列\r
+            var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
+            var $tableBody = $('table#datatable_ajax', tableWrapper);\r
+\r
+            for(var i=0;i<xsHiddenColumns.length;i++){\r
+                for(var j=0;j<columns.length;j++){\r
+                    if(xsHiddenColumns[i].columnId == columns[j].columnId){\r
+                        $('thead >  tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-xs');\r
+                        $('thead >  tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-xs');\r
+                        break;\r
+                    }\r
+                }\r
+            }\r
+\r
+            for(var i=0;i<smHiddenColumns.length;i++){\r
+                for(var j=0;j<columns.length;j++){\r
+                    if(smHiddenColumns[i].columnId == columns[j].columnId){\r
+                        $('thead >  tr > th#' + columns[j].columnId, $tableHead).addClass('hidden-sm');\r
+                        $('thead >  tr > th#' + columns[j].columnId, $tableBody).addClass('hidden-sm');\r
+                        break;\r
+                    }\r
+                }\r
+            }\r
+        },//end init------------------------------------------------------------------------------------\r
+\r
+        getSelectedRowsCount: function() {\r
+            return $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();\r
+        },\r
+\r
+        getSelectedRows: function() {\r
+            var rows = [];\r
+            $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).each(function(){\r
+                rows.push({name: $(this).attr("name"), value: $(this).val()});\r
+            });\r
+\r
+            return rows;\r
+        },\r
+\r
+        addAjaxParam: function(name, value) {\r
+            ajaxParams.push({"name": name, "value": value});\r
+        },\r
+\r
+        clearAjaxParams: function(name, value) {\r
+            ajaxParams = [];\r
+        },\r
+\r
+        getDataTable: function() {\r
+            return dataTable;\r
+        },\r
+\r
+        getTableWrapper: function() {\r
+            return tableWrapper;\r
+        },\r
+\r
+        gettableContainer: function() {\r
+            return tableContainer;\r
+        },\r
+\r
+        getTable: function() {\r
+            return table;\r
+        },\r
+\r
+        setOpenRowFlag: function(openRowFlagInput) {\r
+            openRowFlag = openRowFlagInput;\r
+        },\r
+\r
+        setRowOverFlag: function(rowOverFlagInput) {\r
+            rowOverFlag = rowOverFlagInput;\r
+        },\r
+\r
+        setRowCheckable: function(rowCheckableInput) {\r
+            rowCheckable = rowCheckableInput;\r
+        },\r
+\r
+        setColumnsTooLong: function(columnsTooLongInput) {\r
+            columnsTooLong = columnsTooLongInput;\r
+        },\r
+\r
+        setSTotalRecordsSource: function(sTotalRecordsSourceInput){\r
+            sTotalRecordsSource = sTotalRecordsSourceInput;\r
+        },\r
+\r
+        setTableHeight: function(tableHeightInput){\r
+            tableHeight = tableHeightInput;\r
+        },\r
+               \r
+               setCallbackList: function(list){\r
+                       if($.isArray(list)){\r
+                               callbackList = list;\r
+                       }\r
+               }\r
+\r
+    };\r
+\r
+};\r
+\r
+var TableAjaxICT = function () {\r
+\r
+    var initPickers = function () {\r
+        //init date pickers\r
+        $('.date-picker').datepicker({\r
+            //rtl: App.isRTL(),\r
+            autoclose: true\r
+        });\r
+    }\r
+\r
+    //判断a数组是否包含b数组\r
+    function isContained(largeArray, smallArray){\r
+        if(!(largeArray instanceof Array) || !(smallArray instanceof Array))\r
+            return false;\r
+        if(largeArray.length < smallArray.length)\r
+            return false;\r
+        for(var i = 0; i < smallArray.length; i++){\r
+            var flag = false;\r
+            for(j=0;j<largeArray.length;j++){\r
+                if(largeArray[j].columnId == smallArray[i].columnId){\r
+                    flag = true;\r
+                    break;\r
+                }\r
+            }\r
+            if(flag==false)return false;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    var grid = new DatatableICT();\r
+       \r
+       var detailTableId = "alarmDetailInfo";\r
+\r
+    /* Formatting function for row details */\r
+    function fnFormatDetails(oTable, nTr, columns, rowCheckable) {\r
+        //取得当前行显示数据\r
+        var tds = $(nTr).children();\r
+        var alarmId="";\r
+        if(rowCheckable){\r
+            alarmId = $(tds.eq(2)).html();\r
+        }else{\r
+            alarmId = $(tds.eq(1)).html();\r
+        }\r
+        //取得当前行完整数据\r
+        var systemType = 0;\r
+        var code = 0;\r
+        //所有字段\r
+        var resDisplayName="";\r
+        var moc="";\r
+        var alarmRaisedTime="";\r
+        var perceivedSeverity="";\r
+        var probableCauseDesc="";\r
+        var neip="";\r
+        var alarmType="";\r
+        var ackState="";\r
+        var ackTime="";\r
+        var ackUserId="";\r
+        var ackSystemId="";\r
+        var alarmChangedTime="";\r
+        var componentname="";\r
+        var position1="";\r
+        var specificproblem="";\r
+        var additionalText="";\r
+        for (var i = 0; i < oTable.datas.length; i++) {\r
+            var temp = oTable.datas[i];\r
+            if (temp.alarmId == alarmId) {\r
+                alarmId = temp.alarmId;\r
+                resDisplayName = temp.resDisplayName;\r
+                alarmRaisedTime = temp.alarmRaisedTime;\r
+                perceivedSeverity = temp.perceivedSeverity;\r
+                probableCauseDesc = temp.probableCauseDesc;\r
+                neip = temp.neip;\r
+                alarmType = temp.alarmType;\r
+                ackState = temp.ackState;\r
+                ackTime = temp.ackTime;\r
+                ackUserId = temp.ackUserId;\r
+                ackSystemId = temp.ackSystemId;\r
+                alarmChangedTime = temp.alarmChangedTime;\r
+\r
+                systemType = temp.systemType;\r
+                code = temp.probableCauseCode;\r
+                moc = temp.moc;\r
+                componentname = temp.componentname;\r
+                position1 = temp.position1;\r
+                specificproblem = temp.specificproblem;\r
+                additionalText = temp.additionalText;\r
+                break;\r
+            }\r
+        }\r
+\r
+        var id = alarmId;\r
+               //获取所有展开的详细信息面板生成当前的面板id用于定位\r
+               var detailTables = $('[class_id=detailTableAlarm]');\r
+               if(detailTables && detailTables.length > 0){\r
+                       detailTableId = "alarmDetailInfo" + detailTables.length;\r
+               }\r
+        var sOut = '<table id="' + detailTableId + '" class_id="detailTableAlarm" class = "detailTable" width = "800" style="table-layout: fixed;">';\r
+        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[0].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmId + '</td>';\r
+        sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[4].columnTitle + '</span></td><td class = "detailCellStyle" width = 130>' + perceivedSeverity + '</td>';\r
+        sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[9].columnTitle + '</span></td><td class = "detailCellStyle" width = 160>' + alarmType + '</td>';\r
+        sOut += '<td class = "detailTitleStyle" width = 130><span class = "labelDetailTable">' + columns[3].columnTitle + '</span></td><td class = "detailCellStyle" width = 160 colspan = 2>' + alarmRaisedTime + '</td></tr>';\r
+\r
+        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[5].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + probableCauseDesc + '</td>';\r
+        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[15].columnTitle + '</span></td><td class = "detailCellStyle">' + alarmChangedTime + '</td>';\r
+        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[11].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 2>' + ackState + '</td></tr>';\r
+\r
+        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[12].columnTitle + '</span></td><td class = "detailCellStyle">' + ackTime + '</td>';\r
+        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[13].columnTitle + '</span></td><td class = "detailCellStyle">' + ackUserId + '</td>';\r
+        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[14].columnTitle + '</span></td><td class = "detailCellStyle">' + ackSystemId + '</td>';\r
+        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[7].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 2>' + neip + '</td></tr>';\r
+\r
+        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[2].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + moc + '</td>';\r
+        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[1].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 4>' + resDisplayName + '</td></tr>';\r
+\r
+        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[8].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 3>' + componentname + '</td>';\r
+        sOut += '<td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[16].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 4>' + position1 + '</td></tr>';\r
+\r
+        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[10].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 8>' + specificproblem + '</td></tr>';\r
+\r
+        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + columns[6].columnTitle + '</span></td><td class = "detailCellStyle" colspan = 8>' + additionalText + '</td></tr>';\r
+\r
+        sOut += '<tr class="evenDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + $.i18n.prop('aos_fm_SuggestionSetting_view_DefaultSuggestionGroupTitle').replace(';', '').replace(/\"/g,'') + '</span></td><td id = "defaulInfo' + id + '" class = "detailCellStyle" colspan = 8>' + '</td></tr>';\r
+\r
+        sOut += '<tr class="oddDetailTable"><td class = "detailTitleStyle"><span class = "labelDetailTable">' + $.i18n.prop('aos_fm_SuggestionSetting_view_SettingSuggestionGroupTitle').replace(';', '').replace(/\"/g,'') + '</span></td><td id = "customInfo' + id + '" class = "detailCellStyle" colspan = 6><td style="width:80px" align="right"><button id = "customInfoModify' + id + '" class="btn-toolbar" type="button"><span  id = "modifyBtnSpan' + id + '"class="fa fa-pencil-square-o"></span></button></td><td style="width:80px" id="cancelDiv' + id + '"></td></tr>';\r
+\r
+        sOut += '</table>';\r
+\r
+        /*\r
+         var systemType = 0;\r
+         var code = 0;\r
+         for (var i = 0; i < oTable.datas.length; i++) {\r
+         var temp = oTable.datas[i];\r
+         if (temp.alarmId == oTr['alarmId'].value) {\r
+         systemType = temp.systemType;\r
+         code = temp.probableCauseCode;\r
+         }\r
+         }*/\r
+        var data = {\r
+            "systemType" : systemType,\r
+            "code" : code\r
+        };\r
+        var sendData = JSON.stringify(data);\r
+        $.ajax({\r
+            "dataType" : 'json',\r
+            "type" : "GET",\r
+            "url" : "/web/rest/web/fm/Maintenance" + "?" + "data=" + sendData,\r
+            "contentType" : 'application/json; charset=utf-8',\r
+            "data" : null,\r
+            "success" : function (json) {\r
+                $('tr').find('td#defaulInfo' + id).text(json.defaulInfo);\r
+                $('tr').find('td#customInfo' + id).text(json.customInfo);\r
+                var modify = $('#customInfoModify' + id);\r
+                modify.on('click', function () {\r
+                    var span = $('#modifyBtnSpan' + id);\r
+                    var customInfo = $('tr').find('td#customInfo' + id);\r
+                    var cancel = $('#cancelDiv' + id);\r
+                    if (span['0'].className === 'fa fa-pencil-square-o') {\r
+                        var value = customInfo['0'].textContent;\r
+                        customInfo['0'].textContent = '';\r
+                        customInfo['0'].innerHTML = '<textarea  id="customInfoInput' + id + '" type="textarea" cols=110 rows=4 onKeyUp="if(this.value.length > 700) this.value=this.value.substr(0,700)">' + value + '</textarea>';\r
+                        span['0'].className = 'fa fa-floppy-o';\r
+                        cancel['0'].innerHTML = '<button id = "cancelBtn' + id + '" class="btn-toolbar" type="button"><span class="fa fa-sign-out"></span></button>';\r
+                        $('#cancelBtn' + id).on('click', function () {\r
+                            customInfo['0'].innerHTML = '';\r
+                            customInfo['0'].textContent = value;\r
+                            cancel['0'].innerHTML = '';\r
+                            span['0'].className = 'fa fa-pencil-square-o';\r
+                        });\r
+                    } else {\r
+                        var inputValue = $('#customInfoInput' + id)['0'].value;\r
+                        customInfo['0'].innerHTML = '';\r
+                        customInfo['0'].textContent = inputValue;\r
+                        span['0'].className = 'fa fa-pencil-square-o';\r
+                        cancel['0'].innerHTML = '';\r
+                        var modifyData = {\r
+                            "systemType" : systemType,\r
+                            "code" : code,\r
+                            "defaulInfo" : json.defaulInfo,\r
+                            "customInfo" : inputValue\r
+                        };\r
+                        $.ajax({\r
+                            "dataType" : 'json',\r
+                            "type" : "PUT",\r
+                            "url" : "/web/rest/web/fm/Maintenance",\r
+                            "contentType" : 'application/json; charset=utf-8',\r
+                            "data" : JSON.stringify(modifyData),\r
+                            "error" : function () {\r
+                                alert('Modify Error!');\r
+                            }\r
+                        });\r
+                    }\r
+                });\r
+            },\r
+            "error" : function () {\r
+                alert('Communication Error!');\r
+            }\r
+        });\r
+\r
+        return sOut;\r
+    }\r
+\r
+    var generateColumns = function(columns, openRowFlag, rowCheckable){\r
+        var $tableData = $('table#datatable_ajax');\r
+        var theadTR = $('thead > tr', $tableData);\r
+        if(rowCheckable){\r
+            theadTR.append('<th><input type="checkbox" class="group-checkable"></th>');\r
+        }\r
+        if(openRowFlag){\r
+            theadTR.append('<th>&nbsp;&nbsp;</th>');\r
+        }\r
+        for(var i=0;i<columns.length;i++){\r
+            theadTR.append('<TH id="' + columns[i].columnId + '" style="white-space: nowrap;">' + columns[i].columnTitle + '</TH>');\r
+        }\r
+    }\r
+\r
+    var sortHandling = function(oTable, openRowFlag, rowCheckable){\r
+        var indexSkip = -1;\r
+        if(openRowFlag&&rowCheckable){\r
+            indexSkip = 1;\r
+        }else if(openRowFlag&&!rowCheckable||!openRowFlag&&rowCheckable){\r
+            indexSkip = 0;\r
+        }\r
+        var $sortOrder = 0;   //排序类型 1表示升序,0表示降序\r
+        var tableWrapper = $('div#datatable_ajax_wrapper');\r
+        var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
+        var $tableData = $('table#datatable_ajax');\r
+        var clearSort = function(currentTh){\r
+            var ths = $tableHead.find('th').get();\r
+            var tableDataHeadTHs = $tableData.find('th').get();\r
+            $.each( ths, function( index, th ){\r
+                if(index > indexSkip){\r
+                    if($(th).text() != currentTh.text()){\r
+                        if($(th).is('.sorting_disabled')){\r
+                            //do nothing;\r
+                        }else if($(th).is('.sorting_asc')){\r
+                            $(th).removeClass('sorting_asc').addClass('sorting_disabled');\r
+                            $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');\r
+                        }else if($(th).is('.sorting_desc')){\r
+                            $(th).removeClass('sorting_desc').addClass('sorting_disabled');\r
+                            $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');\r
+                        }\r
+                    }\r
+                }\r
+            });\r
+        }\r
+\r
+        $('th', $tableHead).each(function( column )\r
+        {\r
+            if(column>indexSkip){\r
+                //处理三种有可能存在的排序字段,比较方法\r
+                var findSortKey;\r
+                if( $(this).is('.sort-title') || $(this).is('.sorting_disabled') )\r
+                {\r
+                    findSortKey = function( $cell )\r
+                    {\r
+                        var cellText = $cell.text();\r
+                        if(isNaN(cellText)){\r
+                            return $cell.text().toUpperCase();\r
+                        }else{\r
+                            return parseFloat(cellText);\r
+                        }\r
+                        //return $cell.text().toUpperCase();\r
+                    }\r
+                }\r
+                else if( $(this).is('.sort-date') )\r
+                {\r
+                    findSortKey = function( $cell )\r
+                    {\r
+                        return Date.parse('1' + $cell.text());\r
+                    }\r
+                }\r
+                else if( $(this).is('.sort-price') )\r
+                {\r
+                    findSortKey = function( $cell )\r
+                    {\r
+                        var key =  parseFloat($cell.text().replace(/^[^\d.]*/, ''))\r
+                        return isNaN(key) ? 0 : key;\r
+                    }\r
+                }\r
+\r
+                //排序\r
+                if( findSortKey )\r
+                {\r
+                    $(this).click(function()\r
+                    {\r
+                        $sortOrder = $sortOrder == 0 ? 1 : 0;\r
+                        var tableDataHeadTHs = $tableData.find('th').get();\r
+\r
+                        if($sortOrder == 1){\r
+                            if($(this).is('.sorting_disabled')){\r
+                                $(this).removeClass('sorting_disabled').addClass('sorting_asc');\r
+                                $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_asc');\r
+                            }else if($(this).is('.sorting_asc')){\r
+                                $(this).removeClass('sorting_asc').addClass('sorting_desc');\r
+                                $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');\r
+                            }else if($(this).is('.sorting_desc')){\r
+                                $(this).removeClass('sorting_desc').addClass('sorting_asc');\r
+                                $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');\r
+                            }\r
+                        }else{\r
+                            if($(this).is('.sorting_disabled')){\r
+                                $(this).removeClass('sorting_disabled').addClass('sorting_desc');\r
+                                $(tableDataHeadTHs[column]).removeClass('sorting_disabled').addClass('sorting_desc');\r
+                            }else if($(this).is('.sorting_asc')){\r
+                                $(this).removeClass('sorting_asc').addClass('sorting_desc');\r
+                                $(tableDataHeadTHs[column]).removeClass('sorting_asc').addClass('sorting_desc');\r
+                            }else if($(this).is('.sorting_desc')){\r
+                                $(this).removeClass('sorting_desc').addClass('sorting_asc');\r
+                                $(tableDataHeadTHs[column]).removeClass('sorting_desc').addClass('sorting_asc');\r
+                            }\r
+                        }\r
+                        clearSort($(this));\r
+\r
+                        var rows = $tableData.find('tbody > tr').get();\r
+\r
+                        $.each( rows, function( index, row )\r
+                        {\r
+                            //先关掉所有行\r
+                            if ( oTable.fnIsOpen(row) )\r
+                            {\r
+                                $(row).find('.row-details').click();\r
+                            }\r
+                        });\r
+\r
+                        //重新取得所有行,否则排序后表格显示异常\r
+                        rows = $tableData.find('tbody > tr').get();\r
+\r
+                        $.each( rows, function( index, row )\r
+                        {\r
+                            row.sortKey = findSortKey($(row).children('td').eq(column));\r
+                        });\r
+                        //排序方法\r
+                        rows.sort(function( a, b )\r
+                        {\r
+                            if( $sortOrder == 1 )\r
+                            {\r
+                                //升序\r
+                                if(a.sortKey < b.sortKey)   return -1;\r
+                                if(a.sortKey > b.sortKey)   return  1;\r
+                                return 0;\r
+                            }\r
+                            else\r
+                            {\r
+                                //降序\r
+                                if(a.sortKey < b.sortKey)   return  1;\r
+                                if(a.sortKey > b.sortKey)   return -1;\r
+                                return 0;\r
+                            }\r
+                        });\r
+                        //排序后的对象添加给$table\r
+                        $.each( rows, function( index, row )\r
+                        {\r
+                            $tableData.children('tbody').append(row);\r
+                            row.sortKey = null;\r
+                        });\r
+                    });\r
+                }\r
+            }\r
+        });\r
+    }\r
+\r
+    var handleRecords = function(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource, callbackList) {\r
+\r
+        /*\r
+         jQuery.getJSON('/web/newict/framework/thirdparty/data-tables/app-universal-i18n-datatable-' + lang + '.json',\r
+         function(data) {\r
+         oLanguage = data;\r
+         });\r
+         */\r
+               grid.setCallbackList(callbackList);\r
+        grid.setOpenRowFlag(openRowFlag);\r
+        grid.setRowCheckable(rowCheckable);\r
+        grid.setRowOverFlag(rowOverFlag);\r
+        grid.setColumnsTooLong(columnsTooLong);\r
+        grid.setSTotalRecordsSource(sTotalRecordsSource);\r
+        grid.setTableHeight(tableHeight);\r
+        //取得查询条件\r
+//        if(!requestStr || requestStr.length == 0){\r
+//            requestStr = JSON.stringify(requestAllData);\r
+//        }\r
+               grid.clearAjaxParams();\r
+        grid.addAjaxParam('data', requestStr);\r
+        //取得其他参数\r
+        for(var i=0;i<requestParameters.length;i++){\r
+            grid.addAjaxParam(requestParameters[i].paraId,requestParameters[i].paraValue);\r
+        }\r
+\r
+        grid.init({\r
+            src: $("#datatable_ajax"),\r
+            onSuccess: function(grid) {\r
+                // execute some code after table records loaded\r
+                var tableWrapper = $('div#datatable_ajax_wrapper');\r
+                var $tableHead = $('div.dataTables_scrollHeadInner > table.dataTable', tableWrapper);\r
+                var ths = $tableHead.find('th').get();\r
+                var $tableData = $('table#datatable_ajax');\r
+                var tableDataHeadTHs = $tableData.find('th').get();\r
+                $.each( ths, function( index, th ){\r
+                    //clear all sort direction\r
+                    if($(th).is('.sorting_disabled')){\r
+                        //do nothing;\r
+                    }else if($(th).is('.sorting_asc')){\r
+                        $(th).removeClass('sorting_asc').addClass('sorting_disabled');\r
+                        $(tableDataHeadTHs[index]).removeClass('sorting_asc').addClass('sorting_disabled');\r
+                    }else if($(th).is('.sorting_desc')){\r
+                        $(th).removeClass('sorting_desc').addClass('sorting_disabled');\r
+                        $(tableDataHeadTHs[index]).removeClass('sorting_desc').addClass('sorting_disabled');\r
+                    }\r
+                });\r
+\r
+            },\r
+            onError: function(grid) {\r
+                // execute some code on network or other general error\r
+            },\r
+            dataTable: {\r
+                "sDom" : "tr<'row'<'col-md-6 col-sm-12'><'col-md-6 col-sm-12'pli>>", // datatable layout\r
+                "oLanguage": oLanguage,\r
+                //"bAutoWidth": true,\r
+                "sScrollY": tableHeight,\r
+                "bScrollCollapse": true,\r
+                "sScrollX": "100%",\r
+                //"sScrollXInner": "110%",\r
+                "aLengthMenu": [\r
+                    [20, 50, 100],\r
+                    [20, 50, 100] // change per page values here\r
+                ],\r
+                "iDisplayLength": 20, // default record count per page\r
+                "bServerSide": true, // server side processing\r
+                "sAjaxSource": requestURL // ajax source\r
+            }\r
+        }, columns, xsHiddenColumns, smHiddenColumns, openRowFlag, rowCheckable);\r
+    }\r
+\r
+    /*\r
+     * Insert a 'details' column to the table\r
+     */\r
+    var insertDetails = function (oTable, columns, rowCheckable) {\r
+\r
+        var $tableData = $('table#datatable_ajax');\r
+\r
+        $tableData.on('click', ' tbody td .row-details', function () {\r
+            var nTr = $(this).parents('tr')[0];\r
+            if (oTable.fnIsOpen(nTr)) {\r
+                /* This row is already open - close it */\r
+                $(this).addClass("row-details-close").removeClass("row-details-open");\r
+                oTable.fnClose(nTr);\r
+            } else {\r
+                /* Open this row */\r
+                $(this).addClass("row-details-open").removeClass("row-details-close");\r
+                oTable.fnOpen(nTr, fnFormatDetails(oTable, nTr, columns, rowCheckable), 'details');\r
+                               //填充单元格颜色\r
+                               var divColor = $("div.cellBackgroundColor", $("table#" + detailTableId));\r
+                               $(divColor).parent().css("background", $(divColor).css("background-color"));\r
+            }                  \r
+        });\r
+    }\r
+\r
+    return {\r
+\r
+        //main function to initiate the module\r
+        init: function (requestStr, lang, configPathPrefix, callbackList) {\r
+\r
+            var oLanguage;\r
+            var columns;\r
+            var xsHiddenColumns;\r
+            var smHiddenColumns;\r
+            var columnsAll;\r
+\r
+            var openRowFlag = false;\r
+            var rowOverFlag = false;\r
+            var rowCheckable = false;\r
+            var requestURL="";\r
+            var requestAllData;\r
+            var requestParameters;\r
+\r
+            var tableHeight;\r
+            var tableWidth;\r
+\r
+            var columnsTooLong;\r
+            var sTotalRecordsSource="";\r
+\r
+            //取得当前配置及国际化信息\r
+            $.ajax({\r
+                dataType:   'json',\r
+                url:        configPathPrefix + '-' + lang + '.json',\r
+                async:      false,\r
+                contentType:'application/json; charset=utf-8',\r
+                "success":  function(data) {\r
+                    oLanguage = data.language;\r
+                    columns = data.columns;\r
+                    xsHiddenColumns = data.xsHiddenColumns;\r
+                    smHiddenColumns = data.smHiddenColumns;\r
+                    columnsAll = data.columnsAll;\r
+                    openRowFlag = data.openRowFlag == 'true'? true: false;\r
+                    rowOverFlag = data.rowOverFlag == 'true'? true: false;\r
+                    rowCheckable = data.rowCheckable == 'true'? true: false;\r
+                    requestURL = data.requestURL;\r
+                    //requestAllData = data.requestAllData;\r
+                    requestParameters = data.requestParameters;\r
+                    tableHeight = data.tableHeight;\r
+                    tableWidth = data.tableWidth;\r
+                    columnsTooLong = data.columnsTooLong;\r
+                    sTotalRecordsSource = data.sTotalRecordsSource;\r
+                },\r
+                "error" : function (xhr, info) {\r
+                    alert('Communication Error! Error reason:' + info);\r
+                }\r
+            });\r
+\r
+            $('#dataTableWrapperDiv').css('width', tableWidth);\r
+\r
+            if(!isContained(xsHiddenColumns, smHiddenColumns) || !isContained(columns, xsHiddenColumns) || !isContained(columnsAll, columns)){\r
+                alert('Columns claim error: (smHiddenColumns <= xsHiddenColumns <= columns <= columnsAll) Please!');\r
+                return;\r
+            }\r
+\r
+            generateColumns(columns, openRowFlag, rowCheckable);\r
+            //initPickers();\r
+            handleRecords(requestStr, columns, xsHiddenColumns, smHiddenColumns, oLanguage, openRowFlag, rowCheckable, rowOverFlag, requestURL, requestParameters, tableHeight, columnsTooLong, sTotalRecordsSource, callbackList);\r
+            //获得初始化完毕的DataTable对象\r
+            var oTable = grid.getDataTable();\r
+            if(openRowFlag){\r
+                insertDetails(oTable, columnsAll, rowCheckable);\r
+            }\r
+            sortHandling(oTable, openRowFlag, rowCheckable);\r
+            //oTable.fnAdjustColumnSizing(true);\r
+            return oTable;\r
+        }\r
+\r
+    };\r
+\r
+}();\r
+\r
+var DataTableSmartClientApp = function(datas, configPathPrefix, callbackList){\r
+\r
+    var requestStr = "";\r
+    if(datas){\r
+        requestStr = JSON.stringify(datas);\r
+    }\r
+       \r
+       var lang = getLanguage();\r
+       //lang = 'en-US';\r
+       /*for(var i=0;i<callbackList.length;i++){\r
+               if(getFnName(callbackList[i]).indexOf("i18n")>0){\r
+                       callbackList[i](lang);\r
+                       break;\r
+               }\r
+       }*/\r
+       if(callbackList && callbackList[0]){\r
+               callbackList[0](lang);\r
+       }\r
+       //requestStr = "";\r
+       var oTable = TableAjaxICT.init(requestStr, lang, configPathPrefix, callbackList);\r
+\r
+       //重新调节列宽以适应window resize\r
+       $(window).one('resize', function () {\r
+               //oTable.DataTable.models.oSettings.bAjaxDataGet = false;\r
+               oTable.fnAdjustColumnSizing(false);\r
+       } );\r
+}\r