text: var TableAdvanced = function () {
  
      var initTable1 = function () {
          var table = $('#sample_1');
  
          /* Table tools samples: https://www.datatables.net/release-datatables/extras/TableTools/ */
  
          /* Set tabletools buttons and button container */
  
          $.extend(true, $.fn.DataTable.TableTools.classes, {
              "container": "btn-group tabletools-dropdown-on-portlet",
              "buttons": {
                  "normal": "btn btn-sm default",
                  "disabled": "btn btn-sm default disabled"
              },
              "collection": {
                  "container": "DTTT_dropdown dropdown-menu tabletools-dropdown-menu"
              }
          });
  
          var oTable = table.dataTable({
              "aaSorting": [
                  [0, 'asc']
              ],
              "aLengthMenu": [
                  [5, 15, 20, -1],
                  [5, 15, 20, "All"] // change per page values here
              ],
              // set the initial value
              "iDisplayLength": 10,
              "sDom": "<'row' <'col-md-12'T>><'row'<'col-md-6 col-sm-12'l><'col-md-6 col-sm-12'f>r><'table-scrollable't><'row'<'col-md-5 col-sm-12'i><'col-md-7 col-sm-12'p>>", // horizobtal scrollable datatable
  
              "oTableTools": {
                  "sSwfPath": "../assets/assets/global/plugins/data-tables/tabletools/swf/copy_csv_xls_pdf.swf",
                  "aButtons": [{
                      "sExtends": "pdf",
                      "sButtonText": "PDF"
                  }, {
                      "sExtends": "csv",
                      "sButtonText": "CSV"
                  }, {
                      "sExtends": "xls",
                      "sButtonText": "Excel"
                  }, {
                      "sExtends": "print",
                      "sButtonText": "Print",
                      "sInfo": 'Please press "CTRL+P" to print or "ESC" to quit',
                      "sMessage": "Generated by DataTables"
                  }]
              }
          });
  
          var tableWrapper = $('#sample_1_wrapper'); // datatable creates the table wrapper by adding with id {your_table_jd}_wrapper
  
          jQuery('.dataTables_filter input', tableWrapper).addClass("form-control input-small input-inline"); // modify table search input
          jQuery('.dataTables_length select', tableWrapper).addClass("form-control input-small"); // modify table per page dropdown
          jQuery('.dataTables_length select', tableWrapper).select2(); // initialize select2 dropdown
      }
  
      var initTable2 = function () {
          var table = $('#sample_2');
  
          /* Table tools samples: https://www.datatables.net/release-datatables/extras/TableTools/ */
  
          /* Set tabletools buttons and button container */
  
          $.extend(true, $.fn.DataTable.TableTools.classes, {
              "container": "btn-group tabletools-btn-group pull-right",
              "buttons": {
                  "normal": "btn btn-sm default",
                  "disabled": "btn btn-sm default disabled"
              }
          });
  
          var oTable = table.dataTable({
              "aaSorting": [
                  [0, 'asc']
              ],
              "aLengthMenu": [
                  [5, 15, 20, -1],
                  [5, 15, 20, "All"] // change per page values here
              ],
  
              // set the initial value
              "iDisplayLength": 10,
              "sDom": "<'row' <'col-md-12'T>><'row'<'col-md-6 col-sm-12'l><'col-md-6 col-sm-12'f>r><'table-scrollable't><'row'<'col-md-5 col-sm-12'i><'col-md-7 col-sm-12'p>>", // horizobtal scrollable datatable
  
              "oTableTools": {
                  "sSwfPath": "../assets/assets/global/plugins/data-tables/tabletools/swf/copy_csv_xls_pdf.swf",
                  "aButtons": [{
                      "sExtends": "pdf",
                      "sButtonText": "PDF"
                  }, {
                      "sExtends": "csv",
                      "sButtonText": "CSV"
                  }, {
                      "sExtends": "xls",
                      "sButtonText": "Excel"
                  }, {
                      "sExtends": "print",
                      "sButtonText": "Print",
                      "sInfo": 'Please press "CTRL+P" to print or "ESC" to quit',
                      "sMessage": "Generated by DataTables"
                  }, {
                      "sExtends": "copy",
                      "sButtonText": "Copy"
                  }]
              }
          });
  
          var tableWrapper = $('#sample_2_wrapper'); // datatable creates the table wrapper by adding with id {your_table_jd}_wrapper
  
          jQuery('.dataTables_filter input', tableWrapper).addClass("form-control input-small input-inline"); // modify table search input
          jQuery('.dataTables_length select', tableWrapper).addClass("form-control input-small"); // modify table per page dropdown
          jQuery('.dataTables_length select', tableWrapper).select2(); // initialize select2 dropdown
      }
  
      var initTable3 = function () {
          var table = $('#sample_3');
  
          /* Formatting function for row details */
          function fnFormatDetails(oTable, nTr) {
              var aData = oTable.fnGetData(nTr);
              var sOut = '<table>';
              sOut += '<tr><td>Platform(s):</td><td>' + aData[2] + '</td></tr>';
              sOut += '<tr><td>Engine version:</td><td>' + aData[3] + '</td></tr>';
              sOut += '<tr><td>CSS grade:</td><td>' + aData[4] + '</td></tr>';
              sOut += '<tr><td>Others:</td><td>Could provide a link here</td></tr>';
              sOut += '</table>';
              return sOut;
          }
  
          /*
           * Insert a 'details' column to the table
           */
          var nCloneTh = document.createElement('th');
          var nCloneTd = document.createElement('td');
          nCloneTd.innerHTML = '<span class="row-details row-details-close"></span>';
  
          $('thead tr', table).each(function () {
              this.insertBefore(nCloneTh, this.childNodes[0]);
          });
  
          $('tbody tr', table).each(function () {
              this.insertBefore(nCloneTd.cloneNode(true), this.childNodes[0]);
          });
  
          /*
           * Initialize DataTables, with no sorting on the 'details' column
           */
          var oTable = table.dataTable({
              "aoColumnDefs": [{
                  "bSortable": false,
                  "aTargets": [0]
              }],
              "aaSorting": [
                  [1, 'asc']
              ],
              "aLengthMenu": [
                  [5, 15, 20, -1],
                  [5, 15, 20, "All"] // change per page values here
              ],
              // set the initial value
              "iDisplayLength": 10,
          });
          var tableWrapper = $('#sample_3_wrapper'); // datatable creates the table wrapper by adding with id {your_table_jd}_wrapper
  
          jQuery('.dataTables_filter input', tableWrapper).addClass("form-control input-small input-inline"); // modify table search input
          jQuery('.dataTables_length select', tableWrapper).addClass("form-control input-small"); // modify table per page dropdown
          jQuery('.dataTables_length select', tableWrapper).select2(); // initialize select2 dropdown
  
          /* Add event listener for opening and closing details
           * Note that the indicator for showing which row is open is not controlled by DataTables,
           * rather it is done here
           */
          table.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), 'details');
              }
          });
      }
  
      var initTable4 = function () {
          var table = $('#sample_4');
  
          /* Formatting function for row expanded details */
          function fnFormatDetails(oTable, nTr) {
              var aData = oTable.fnGetData(nTr);
              var sOut = '<table>';
              sOut += '<tr><td>Platform(s):</td><td>' + aData[2] + '</td></tr>';
              sOut += '<tr><td>Engine version:</td><td>' + aData[3] + '</td></tr>';
              sOut += '<tr><td>CSS grade:</td><td>' + aData[4] + '</td></tr>';
              sOut += '<tr><td>Others:</td><td>Could provide a link here</td></tr>';
              sOut += '</table>';
  
              return sOut;
          }
  
          /*
           * Insert a 'details' column to the table
           */
          var nCloneTh = document.createElement('th');
          var nCloneTd = document.createElement('td');
          nCloneTd.innerHTML = '<span class="row-details row-details-close"></span>';
  
          $('thead tr', table).each(function () {
              this.insertBefore(nCloneTh, this.childNodes[0]);
          });
  
          $('tbody tr', table).each(function () {
              this.insertBefore(nCloneTd.cloneNode(true), this.childNodes[0]);
          });
  
          var oTable = table.dataTable({
              "aoColumnDefs": [{
                  "aTargets": [0]
              }],
              "aaSorting": [
                  [1, 'asc']
              ],
              "aLengthMenu": [
                  [5, 15, 20, -1],
                  [5, 15, 20, "All"] // change per page values here
              ],
              // set the initial value
              "iDisplayLength": 10,
          });
  
          var tableWrapper = $('#sample_4_wrapper'); // datatable creates the table wrapper by adding with id {your_table_jd}_wrapper
          var tableColumnToggler = $('#sample_4_column_toggler');
  
          /* modify datatable control inputs */
          jQuery('.dataTables_filter input', tableWrapper).addClass("form-control input-small input-inline"); // modify table search input
          jQuery('.dataTables_length select', tableWrapper).addClass("form-control input-small"); // modify table per page dropdown
          jQuery('.dataTables_length select', tableWrapper).select2(); // initialize select2 dropdown
  
          /* Add event listener for opening and closing details
           * Note that the indicator for showing which row is open is not controlled by DataTables,
           * rather it is done here
           */
          table.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), 'details');
              }
          });
  
          /* handle show/hide columns*/
          $('input[type="checkbox"]', tableColumnToggler).change(function () {
              /* Get the DataTables object again - this is not a recreation, just a get of the object */
              var iCol = parseInt($(this).attr("data-column"));
              var bVis = oTable.fnSettings().aoColumns[iCol].bVisible;
              oTable.fnSetColumnVis(iCol, (bVis ? false : true));
          });
      }
  
      return {
  
          //main function to initiate the module
          init: function () {
  
              if (!jQuery().dataTable) {
                  return;
              }
  
              initTable1();
              initTable2();
              initTable3();
              initTable4();
          }
  
      };
  
  }();