function InitializeGrid(gridId) {
  var grid = $(gridId);
  var singleSelect = $(gridId + "_SingleSelect").value == "1";
  var selId = $(gridId + "_SelectedID").value;
  
  Element.hide(grid.id + "_noResults");
  Element.hide(gridId + "_selItemClear");
  Element.hide(gridId + "_selItemDetail");
  
  document.onmousemove = RecordMousePos;
  
  ClearSorting(gridId);
  SetSelObjectName(gridId);  
  
  Element.hide('pleaseWait');
  Element.hide(grid.id + "_gridContainer");
  
  if (singleSelect) {
    Element.hide(grid.id + "_gridContainer");
    Element.hide(grid.id + "_searchBox");
    Element.show(grid.id + "_selItemContainer");
  } else { 
    Element.hide(grid.id + "_selItemContainer");
    FillGrid(gridId);
  }  
}

function GetPagedData(gridId) {
  var grid = document.getElementById(gridId);

  var objType = find(gridId + "_ObjType").value;
  var module = find(gridId + "_Module").value;
  var curPage = find(gridId + "_CurPage").value;
  var appRoot = find(gridId + "_AppRoot").value;
  var pageSize = find(gridId + "_PageSize").value;
  var freeQuery = find(gridId + "_FreeQuery").value;
  var sortCol = $(gridId + "_SortCol").value;
  var sortOrder = $(gridId + "_SortOrder").value;
  var isSelectedOnly = ($(gridId + "_SelectedOnly") != null && $(gridId + "_SelectedOnly").value == "1") ? true : false;
  var addToBin = ($(gridId + "_AddToBin") != null && $(gridId + "_AddToBin").value == "1") ? true : false;
  
  /*var bookmark = getCookie(gridId + "_bookmark");
  if (bookmark != null && bookmark != "" && curPage == 0) {
    $(gridId + "_CurPage").value = bookmark;
    curPage = bookmark;
    deleteCookie(gridId + "_bookmark");
  }*/
  
  var c = 0;
  var columns = "";
  while ($(gridId + "_col_" + c))
    columns += $(gridId + "_col_" + c++).value + ",";
   
  var response = DataGrid.GetGridPage(gridId, objType, module, curPage, pageSize, isSelectedOnly, columns, freeQuery, sortCol, sortOrder, appRoot, addToBin);
  if (response.error) {
    alert("Exception in FillGrid: " + response.error.Message);
    return;
  } 
  
  BuildGridTable(gridId, response.value);
}

function AddToBin(gridId) {
	$(gridId + "_AddToBin").value = "1";
	GetPagedData(gridId);
	$(gridId + "_AddToBin").value = "0";
}

function BuildGridTable(gridId, result) {
  var module = find(gridId + "_Module").value;
  var freeQuery = find(gridId + "_FreeQuery").value;
  var grid = $(gridId);
  if (!grid)
    alert('cant find: ' + gridId);
    
  ClearGrid(grid.id); 
  
  
  if (result.Rows.length > 0) {
    for (var i=0; result.Rows[i]; i++) {
        var gridRow = result.Rows[i];
        var htmlRow = grid.insertRow(grid.rows.length);
        htmlRow.id = grid.id + "_row_" + gridRow.ObjId;
                
        for(var c=0; gridRow.Cells[c]; c++) {
          var gridCell = gridRow.Cells[c];
          var htmlCell = htmlRow.insertCell(c);
          htmlCell.innerHTML = gridCell.Text;
          htmlCell.className = gridCell.CssClass;
        }
    }
    
    Element.show($(grid.id + "_pagerContainer"));
    Element.hide(grid.id + "_noResults");
    AlternateRows(grid.id);
    
    
    RenderPager(grid, result); 
    StopWait();
    
    Effect.BlindDown($(grid.id + "_gridContainer"), {duration: 0.0, from:1.0, to:1.0});
    Effect.Appear($(grid.id + "_gridContainer"), {duration:0.5, from: 0.5, to: 1.0});
    //  
  } else {
    StopWait();
    Element.hide(grid.id + "_gridContainer");
    Element.show(grid.id + "_noResults");
    var error = $(grid.id + "_noResults");
    
    if (trim(freeQuery) != "")
      error.innerHTML = "Search produced 0 results.";
    else
      error.innerHTML = "There are currently no " + module + " in the database.";
    
    Effect.Pulsate(error);
  }
  
  
  
}

function FillGrid(gridId) {

  StartWait();
  setTimeout("GetPagedData('" + gridId + "');");
}

function AlternateRows(gridId) {
  var grid = document.getElementById(gridId);
  if (grid && grid.rows) {
    var alt = true;
    for (var i=0; i<grid.rows.length; i++) {
      var row = grid.rows[i];
      
      if (row.className != "deleted") {
        row.className = alt ? "alt" : "";
        alt = !alt;      
      }      
    }
  }
}

function ClearGrid(gridId) {
  var grid = find(gridId);
  if (grid && grid.rows) {
    while (grid.rows.length > 1)
      grid.deleteRow(1);
  }
  
  
}

function RenderPager(grid, result) {
  var curPage = $(grid.id + "_CurPage").value;
  var imgRoot = $(grid.id + "_AppRoot").value + "/Images/Pager/";
  var totPages = result.TotalPages;
  
  $(grid.id + "_pagerContainer").style.display = totPages > 1 ? "block" : "none";

  $(grid.id + "_pager_curPage").innerHTML = curPage;
  $(grid.id + "_pager_totalPages").innerHTML = totPages;
  
  var names = new Array("first","prev2","prev","next","next2","last");
  var offsets = new Array(-9999, -10, -1, 1, 10, 9999);
  var buttons = new Array();
  for (var i = 0; i < 6; i++)
    buttons.push($(grid.id + "_pagerbtn_" + names[i]));
    
  for (var b = 0; b < 6; b++) {
    var link = buttons[b];
    var img = link.firstChild;
    
    
    var enabled = true;
    var page = parseInt(curPage) + offsets[b];
    page = Math.min(totPages, page);
    page = Math.max(1, page);
    
    if ((b < 3 && curPage == 1) || (b > 2 && curPage == totPages))
      enabled = false;
      
    img.src = imgRoot + names[b] + (enabled ? "" : "_light") + ".gif";
    link.href = enabled ? ("javascript:ChangePage('" + grid.id + "', " + page + ");void(0);") : "javascript:void(0);";
  }  
}

function ChangeSelection(gridId) {
  Effect.BlindDown($(gridId + "_searchBox"), {duration:0.4});
}

function Search(gridId) {
  var grid = $(gridId);
  $(grid.id + "_FreeQuery").value = $(grid.id + "_txtQuery").value;;
  $(gridId + "_CurPage").value = 1;
  
  FillGrid(gridId);
}

function SetSelObjectName(gridId) {
  var nameDiv = $(gridId + "_selItemName");
  var objId = $(gridId + "_SelectedID").value;
  var objName = "";
  
  nameDiv.innerHTML = "";
  
  if (objId && objId != "" && objId != "0") {
    var response = DataGrid.GetObjectDescription(objId);
    if (response.error) {
      alert(response.error);
      return;
    }
    nameDiv.innerHTML = response.value;
    Effect.Appear($(gridId + "_selItemClear"), {duration: 0.5});
    Effect.Appear($(gridId + "_selItemDetail"), {duration: 0.5});
    
  } else {
    nameDiv.innerHTML = "No object selected."
  }
}

function ClearSelection(gridId) {
  $(gridId + "_SelectedID").value = "0";
  $(gridId + "_selItemName").innerHTML = "No object selected.";
  Effect.Fade($(gridId + "_selItemClear"), {duration: 0.5});
  Effect.Fade($(gridId + "_selItemDetail"), {duration: 0.5});
}

function SelectionDetail(gridId) {
  if (confirm("Are you sure you would like to navigate away from this page?")) {
    window.location.href = $(gridId + "_AppRoot").value + "/Manage/" + $(gridId + "_Module").value + "/Detail.aspx?id=" + $(gridId + "_SelectedID").value;
  }
}

function SelectObject(gridId, objId) {
  var image = $(gridId + "_selimg_" + objId);
  var appRoot = find(gridId + "_AppRoot").value;
  var singleSelect = $(gridId + "_SingleSelect").value == "1";
  var select = image.src.indexOf('unchecked.gif') >= 0;
  
  if (singleSelect) {
    $(gridId + "_SelectedID").value = objId;
    SetSelObjectName(gridId);
    
    Effect.BlindUp($(gridId + "_gridContainer"), {
      afterFinish: function(effect) {
        Element.hide(gridId + "_gridContainer");
        Effect.BlindUp($(gridId + "_searchBox"));        
      }
    });
    
  } else {
    image.src = appRoot + "/Images/Icons/" + (select ? "" : "un") + "checked.gif";
    setTimeout("r=DataGrid.SetSelectState(" + objId + ", " + select + "); if(r.error!=null) alert(r.error);");  
  }
}

function CheckIn(gridId, objId) {
  var grid = $(gridId);
  var image = $(grid.id + "_checkimg_" + objId);
  var appRoot = $(grid.id + "_AppRoot").value;
  var row = $(grid.id + "_row_" + objId);
  
  image.src = appRoot + "/Images/Icons/unlock.gif";
  new Effect.Pulsate(row, { duration: 1.0 });
  
  setTimeout("DataGrid.CheckIn(" + objId + ")",1000);
}

function ChangePage(gridId, page) {
  $(gridId + "_CurPage").value = page;
  FillGrid(gridId); 
  deleteCookie(gridId + "_bookmark");
  setCookie(gridId + "_bookmark", page);
}

function ChangePageSize(gridId, pageSize) {
  var grid = $(gridId);
  $(grid.id + "_PageSize").value = pageSize;
  $(grid.id + "_CurPage").value = 0;
  deleteCookie(grid.id + "_bookmark");
  FillGrid(grid.id);  
}

function ClearSorting(gridId) {
  for (var col = 0; $(gridId + "_col_" + col); col++)
    if ($(gridId + "_col_" + col).value.indexOf("x_") < 0)
      if ($(gridId + "_arrow_" + col))
        Element.hide(gridId + "_arrow_" + col);
}

function SortGrid(gridId, col) {
  var colProp = $(gridId + "_col_" + col).value;
  var sortCol = $(gridId + "_SortCol");
  var sortOrder = $(gridId + "_SortOrder");
  var root = $(gridId + "_AppRoot").value + "/Images/";
  $(gridId + "_CurPage").value = "1";
  
  sortCol.value = colProp;
  sortOrder.value = sortOrder.value == "asc" ? "desc" : "asc";
  
  var arrow = $(gridId + "_arrow_" + col);
  arrow.src = root + (sortOrder.value == "asc" ? "down" : "up") + ".gif";
  ClearSorting(gridId);
  Element.show(arrow);
  
  ////setTimeout("FillGrid('" + gridId + "');");
  FillGrid(gridId);
}

/* Recycle or Delete */
function Recycle(gridId, objId) {
  if (!confirm("Are you sure you would like to trash this item?"))
    return;
    
  var row = $(gridId + "_row_" + objId);
  row.className = "deleted";
  
  setTimeout("Effect.DropOut($('" + row.id + "'));", 200);
  AlternateRows(gridId);
  setTimeout("r=DataGrid.Recycle(" + objId + ");if(r.error!=null)alert(r.error);", 300);
}

/* Notes */
var curNoteId;
function ShowNotes(gridId, objId) {
  $('noteText').value = "";
  var cont = $('noteContainer');
  var ulContainer = $('notes');
  var noteImg = $(gridId + "_noteimg_" + objId);
  
  response = DataGrid.GetNotes(objId);
  if (response.error != null) {
    alert(response.error);
    return;
  }
  
  ulContainer.innerHTML = "";
  if (response.value.length > 0) {
    var ul = document.createElement("ul");
    ul.id = "noteList";
    
    for (var i=0; response.value[i]; i++) {
        var note = response.value[i];
        var li = document.createElement("li");
        
        li.innerHTML = "<a href=\"javascript:DeleteNote('" + gridId + "', " + objId + ", " + note.ID + ");\">X</a><strong>" + note.User + "<strong>" + note.Text; 
        ul.appendChild(li);
    }
    ulContainer.appendChild(ul);
  }
  
  cont.style.left = (getLeftPos(noteImg)+18) + "px";
  cont.style.top = (getTopPos(noteImg)-4) + "px";
  cont.style.width = "200px";
  
  $('noteAddLink').href = "javascript:AddNote('" + gridId + "', " + objId + ");";
  Effect.Appear(cont, {duration: 0.5});
}

function AddNote(gridId, objId) {
  tb = $('noteText');
  if (trim(tb.value) != "") {
    response = DataGrid.AddNote(objId, tb.value);
    if (response.error != null) {
      alert(response.error);
      return;
    }
  }
  
  var row = $(gridId + "_row_" + objId);
  new Effect.Pulsate(row, { duration: 1.0 });
  
  
  $(gridId + "_noteimg_" + objId).src = $(gridId + "_AppRoot").value + "/images/icons/comment_exists.gif";
  CloseNotes();
}

function DeleteNote(gridId, objId, noteId) {
    if (confirm("Are you sure you would like to delete this note?")) {
      response = DataGrid.DeleteNote(objId, noteId);
      if (response.error != null) {
        alert(response.error);
        return;
      }
      
      if (response.value == false) {
        $(gridId + "_noteimg_" + objId).src = $(gridId + "_AppRoot").value + "/images/icons/comment.gif";
      }
      
      var row = $(gridId + "_row_" + objId);
  new Effect.Pulsate(row, { duration: 1.0 });
      
      ShowNotes(gridId, objId);
    }        
}

function CloseNotes() {
  Effect.Fade($('noteContainer'), {duration: 0.5});
  $('noteText').value = "";
}

function StartWait() {
  var div = $('pleaseWait');
  
  div.style.top = (mousey - 30) + "px";
  div.style.left = (mousex - 65) + "px";
  Element.show($('pleaseWait'));
}

function StopWait() {
  Effect.Fade($('pleaseWait'), {duration: 0.3});
}

