/**
 *  smoothy.datagrid class with datagrid utility functions for smoothy
 */
   
smoothy.datagrid = 
{ 
  _prefix : 'smoothy_header_',
  
  /**
   * smoothy.datagrid._extractColumnNameFromId(cellId)
   */
  _extractColumnNameFromId : function(cellId)
  {
    if (cellId.substring(0, smoothy.datagrid._prefix.length) == smoothy.datagrid._prefix)
      return cellId.substring(smoothy.datagrid._prefix.length);
      
    return '';
  },
  
  /**
   * smoothy.datagrid.sortTable(headerTableData, columnName)
   */
  sortTable : function(headerTableData, columnName) 
  {
    lastPath = smoothy.getCookie('prev_path'); // prev_path cookie set by server
    if (lastPath)
      smoothy.ajax.postParams( { path: lastPath, smoothySortColumn: columnName } );
    else
      alert('lastPath undefined: ' + document.cookie);
    
    return false;
  },
  
  /**
   * smoothy.datagrid.search(tableId)
   */
  search : function(tableId)
  {
    var searchBoxesRow = document.getElementById(tableId + 'SearchBoxes');
    if (!searchBoxesRow)
      return;
      
    // fetch search values from inputs and find matching columnNames
    
    var headerRow = document.getElementById(tableId + 'HeaderRow');
    var headerCells = headerRow.getElementsByTagName('td');
    var headerInputs = searchBoxesRow.getElementsByTagName('input');
    
    var searchColumnValues = new Object();
    for (var i = 0; i < headerCells.length; i++) 
    {
      var columnName = smoothy.datagrid._extractColumnNameFromId(headerCells[i].id);
      if (columnName.length)
      {
        var searchExpression = headerInputs[i].value.trim();
        if (searchExpression.length)
          searchColumnValues[columnName] = searchExpression;
      }
    }
    // send search request to server
    
    lastPath = smoothy.getCookie('prev_path'); // prev_path cookie set by server
    if (lastPath)
      smoothy.ajax.postParams( { path: lastPath, smoothySearchColumns: dojo.toJson(searchColumnValues) } );
    else
      alert('lastPath undefined: ' + document.cookie);
  },
  
  /**
   * smoothy.datagrid.addSearchBoxes(tableId, searchColumnValuesJson)
   */
  addSearchBoxes : function(tableId, searchColumnValuesJson)
  {
    var table = document.getElementById(tableId);
    if (!table)
      return;
        
    var searchColumnValues = dojo.fromJson(searchColumnValuesJson);
    
    var headerRow = document.getElementById(tableId + 'HeaderRow'); 
    var headerCells = headerRow.getElementsByTagName('td');
    
    var searchBoxesRow = table.insertRow(1);
    searchBoxesRow.setAttribute('id', tableId + 'SearchBoxes');
    for (var i = 0; i < headerCells.length - 1; i++) 
    {
      var searchBoxCell = searchBoxesRow.insertCell(i);
      searchBoxCell.className = 'waf_search_box_cell';
        
      var searchBoxInput = document.createElement('input');		
      searchBoxInput.setAttribute('id', 'searchInput' + i + '-' + tableId); // will be split on - to retrieve tableId
      searchBoxInput.setAttribute('type', 'text');
      searchBoxInput.className = 'waf_search_box';
      searchBoxInput.onkeypress = smoothy.datagrid.keyPressSearchBox;
      
      var columnName = smoothy.datagrid._extractColumnNameFromId(headerCells[i].id);
      if (columnName in searchColumnValues)
        searchBoxInput.value = searchColumnValues[columnName];
      
      searchBoxCell.appendChild(searchBoxInput);		
    }
  },  
  
  /**
   * smoothy.datagrid.addSearchButton(tableId, title, src)
   */
  addSearchButton : function(tableId, title, src)
  {
    var searchBoxesRow = document.getElementById(tableId + 'SearchBoxes');
    if (!searchBoxesRow)
      return;
    
    var searchButtonCell = searchBoxesRow.insertCell(searchBoxesRow.cells.length);
    searchButtonCell.className = 'waf_search_box_button';
    var img = document.createElement('img');
    img.setAttribute('src', src);
    img.setAttribute('onclick', "smoothy.datagrid.search('" + tableId + "');");
    img.setAttribute('title', title);
    searchButtonCell.appendChild(img);
  },
  
  /**
   * smoothy.datagrid.keyPressSearchBox(event)
   */
  keyPressSearchBox : function(e)
  {
    var event = (e ? e : window.event);
    if (event)
    {
      var key = (event.charCode ? event.charCode : (event.keyCode ? event.keyCode : event.which));
      if (key == 13)
      {
        var parts = this.getAttribute('id').split('-');
        var tableId = parts[1];
        smoothy.datagrid.search(tableId);
        return false;
      }
    }	
    return true;
  }
}

