function ga_jqGrid() {
 
  /**
   * Variabelen declaratie
   */
  this.id = '';
  this.grid = null;
  this.data = null;
  this.dataUrl = '';
  this.postData = '';
  this.colModel = null;
  this.indexName = '';
  this.filterArray = null;
  
  /**
   * Functie om de data in de grid te laden
   */
  this.loadData = function() {
    // Controleer of er een grid gekoppeld is
    if (this.grid != null) {
      // Evt. ophalen via opgegeven URL
      if (this.dataUrl != '') {
        this.getDataFromURL();
      } else {
        // Aanwezige data laden
        loadDataInGrid(this.grid, this.data, this.indexName, this.filterArray);
      }
    } else {
      //alert ("nee");
    }
  };
  
  this.getDataFromURL = function() {
    
    // Controleer of er een URL is opgegeven
    if (this.dataUrl != '') {
      
      $.ajax({  
        type:     "POST",
        url:      this.dataUrl,
        data:     this.postData,
        success:  this.dataLoadSucces,
        error:    this.dataLoadFailure,
        dataType: "json",
        async:    false,
        context:  this
       }
      );      
    }
  };
  
  /**
   * Verwerkt de data als het ophalen via de URL goed is verlopen
   */
  this.dataLoadSucces = function($p_result) {
    // Controleer of er een correct resultaat geretourneerd is 
    if ($p_result.result != undefined && $p_result.result == true) {
      // De data component overnemen
      this.data = $p_result.data;
    }
    loadDataInGrid(this.grid, this.data, this.indexName, this.filterArray);
  };
  
  /**
   * Handelt de foutmelding af als het ophalen van data via de URL niet goed verlopen is
   */
  this.dataLoadFailure = function($p_result) {
    var sInfo = '';
    if ($p_result.status != undefined) {
      sInfo = "\nFoutmelding: " + $p_result.status + " " + $p_result.statusText;
    }
    alert("Er is een fout opgetreden bij het ophalen van gegevens." + sInfo);
  };
  
  /**
   * Filter instellen dmv array met index en value; Index dient overeen te stemmen met index in data array;
   */
  this.setFilter = function($p_filterarray) {
    if ($p_filterarray == undefined || $p_filterarray == null || $p_filterarray == '') {
      this.filterArray = null;
    } else {
      this.filterArray = $p_filterarray;
    }
    
    loadDataInGrid(this.grid, this.data, this.indexName, this.filterArray);
  };
  
  /**
   * Filter resetten / opheffen
   */
  this.resetFilter = function() {
    this.filterArray = null;  
    loadDataInGrid(this.grid, this.data, this.indexName, this.filterArray);
  };
  
  /**
   * Private functie die de data overneemt naar de grid
   */
  function loadDataInGrid($p_grid, $p_data, $p_indexname, $p_filterarray) {

    // Controleer of er een grid gekoppeld is
    if ($p_grid != null) {
      var $row;
      var $index;
      var $bWeergeven;
      
      $p_grid.clearGridData();
      if ("rows" in $p_data) {
          $p_grid.addJSONData($p_data.rows);
      } else {
        for ( var nIndex = 0; nIndex < $p_data.length; nIndex++) {
          $row = $p_data[nIndex];
          // Bepaal de gewenste index voor de rijen in de grid
          if ($p_indexname != undefined && $p_indexname != '') {
            $index = $row[$p_indexname];
          } else {
            $index = nIndex + 1;
          }
          
          // Voer evt. filtering uit
          $bWeergeven = false;
          if ($p_filterarray != undefined && $p_filterarray != null && $p_filterarray.length > 0) {
            var sVeld;
            var sWaarde;
            for (nFilterIndex = 0; nFilterIndex < $p_filterarray.length; nFilterIndex++) {
              sVeld   = $p_filterarray[nFilterIndex].veld;
              sWaarde = $p_filterarray[nFilterIndex].waarde;
              
              if ($row[sVeld] != undefined) {
                if ($row[sVeld] == sWaarde) {
                  $bWeergeven = true;
                  break;
                }
              }
            }
          } else {
            $bWeergeven = true;
          }
          
          // Voeg het record toe aan de grid
          if ($bWeergeven == true) {
            $p_grid.addRowData($index, $row);
          }
        }
      }      
    }

  };
  
};

