//$Id: cg_exec.js,v 1.28 2007-08-20 02:43:42 thchuong Exp $
var cg_execaction = null;

function getCGExecuter()
{
   if (cg_execaction == null)
      cg_execaction = new cg_initexec();
   return cg_execaction;
}

function cg_initexec()
{
   this.resizeFlag = false;
   this.image = null;
   this.xmlHTTP = null;
   this.errorMessage = "";
   this.successfulMessage = "";

   this.gridUtilities = null;
   this.toolbarUtilities = null;
   this.tabUtilities = null;
   this.tempIFrame = null;

   this.dispose = function()
   {
      if (this.image)
         delete this.image;
      if (this.gridUtilities)
      {
         this.gridUtilities.dispose();
         delete this.gridUtilities;
      }

      if (this.toolbarUtilities)
         delete this.toolbarUtilities;

      if (this.tabUtilities)
      {
         this.tabUtilities.dispose();
         delete this.tabUtilities;
      }

      if (this.xmlHTTP)
         delete this.xmlHTTP;
   }

   this.init = function()
   {
      document.body.style.cursor = "wait";
      if (this.image != null)
         delete this.image;

      this.image = new Image();
      $(this.image).bind("readystatechange", null, actionCompleted);
      $(this.image).bind("error", null, actionFailed);
   }

   this.createXMLHTTPEx = function(eventref)
   {
      if (this.xmlHTTP != null)
      {
         delete this.xmlHTTP;
         this.xmlHTTP = null;
      }

      if (typeof window.ActiveXObject != 'undefined')
      {
         this.xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
         if (eventref != null)
            this.xmlHTTP.onreadystatechange = eventref;
      }
      else
      {
         this.xmlHTTP = new XMLHttpRequest();
         if (eventref != null)
            this.xmlHTTP.onload = eventref;
      }
      return this.xmlHTTP;
   }

   this.getXMLHTTP = function()
   {
      if (this.xmlHTTP == null)
      {
         if (typeof window.ActiveXObject != 'undefined')
            this.xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
         else
            this.xmlHTTP = new XMLHttpRequest();
      }

      return this.xmlHTTP;
   }

   this.createXMLHTTP = function(URL, asyn, eventref)//only for GET
   {
      if (this.xmlHTTP != null)
      {
         delete this.xmlHTTP;
         this.xmlHTTP = null;
      }

      if (typeof window.ActiveXObject != 'undefined')
      {
         this.xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
         this.xmlHTTP.onreadystatechange = eventref;
      }
      else
      {
         this.xmlHTTP = new XMLHttpRequest();
         this.xmlHTTP.onload = eventref;
      }

      this.xmlHTTP.open("GET", URL, asyn);
      this.xmlHTTP.send(null);

      return this.xmlHTTP;
   }

   this.deleteXMLHTTP = function()
   {
      if (this.xmlHTTP)
      {
         delete this.xmlHTTP;
         this.xmlHTTP = null;
      }
   }

   this.getGridUtilities = function()
   {
      if (this.gridUtilities == null)
         this.gridUtilities = new cg_grid();
      return this.gridUtilities;
   }

   this.getToolbarUtilities = function()
   {
      return this.toolbarUtilities; //null
   }

   this.getTabUtilities = function()
   {
      if (this.tabUtilities == null)
         this.tabUtilities = new cg_WebTab();
      return this.tabUtilities;
   }
   this.getTempIFrame = function()
   {
      if (this.tempIFrame == null)
      {
         var tag = "<iframe id=tempIFrame style='position:absolute;display:none;visibility:hidden'>";
         try //for IE
         {
            this.tempIFrame = document.createElement(tag);
         }
         catch (e) //for FF
         {
            this.tempIFrame = document.createElement("iframe");
            this.tempIFrame.setAttribute("id", "tempIFrame");
            this.tempIFrame.setAttribute("style", "position:absolute;display:none;visibility:hidden");
         }
         document.body.appendChild(this.tempIFrame);
      }
      return this.tempIFrame;
   }
}

function actionCompleted()
{
   if (getCGExecuter().image.readyState == "complete")
   {
      document.body.style.cursor = "auto";
      if (getCGExecuter().getGridUtilities() && getCGExecuter().getGridUtilities().deletedRow)
      {
         var gridID = getCGExecuter().getGridUtilities().deletedRow.Band.Grid.Id;
         getCGExecuter().getGridUtilities().deletedRow.deleteRow();
         getCGExecuter().getGridUtilities().deletedRow = null;
         getCGExecuter().getGridUtilities().rebuildAlt(gridID);
      }
      if (getCGExecuter().successfulMessage != "")
         alert(getCGExecuter().successfulMessage);
   }
}

function actionFailed()
{
   if (getCGExecuter().errorMessage != "")
      alert(getCGExecuter().errorMessage);
   document.body.style.cursor = "auto";
}

//-----------------------------GRID GRID GRID GRID -----------------

function cg_grid()
{
   this.deletedRow = null;
   this.grids = new Array();
   this.resizeGrids = new Array();

   this.dispose = function()
   {
      delete this.grids;
      delete this.resizeGrids;
   }

   this.addGrid = function(key, gridId)
   {
      this.grids[key] = gridId;
      //      this.adjustFirstColumn(gridId);
   }

   this.getGrid = function(key)
   {
      return igtbl_getGridById(this.grids[key]);
   }

   this.addResizeGrid = function(key, extradec)
   {
      var grid = igtbl_getGridById(this.grids[key]);
      if (grid)
      {
         grid.setHeightExpression(function(grid) { return document.body.offsetHeight - grid.MainGrid.offsetTop - extradec; });
      }
      /*      
      this.resizeGrids[this.resizeGrids.length] = [key, extradec];
      if(!getCGExecuter().resizeFlag)
      {
      window.attachEvent("onresize", cgexec_windowResize);
      }
      getCGExecuter().resizeFlag = true;*/
   }

   this.addRow = function(gn, values, index)//GridName and cell's values
   {
      var grid = igtbl_getGridById(gn);
      grid.clearSelectionAll();
      var row = igtbl_addNew(grid.Id, 0);
      if (index != null)
      {
         if (grid.Rows.length - 1 > 0)
         {
            grid.Rows.remove(grid.Rows.length - 1);
            grid.Rows.insert(row, index);
         }
      }
      if (values != null)
      {
         for (var id = 0; id < values.length; id++)
            row.getCell(id).setValue(values[id], false);
      }

      if (!cg_shared.IsFireFox)
         row.select(true, true);

      //row.scrollToView();
      return row;
   }

   this.adjustFirstColumn = function(gn)
   {
      var grid = igtbl_getGridById(gn);
      var abc = grid.SelectedColumns;
      for (var band = 0; band < grid.Bands.length; band++)
      {
         var columns = grid.Bands[band].Columns;
         for (var idx = 0; idx < columns.length; idx++)
         {
            var column = columns[idx];
            if (column.Hidden == false)
            {
               document.getElementById(column.Id).style.borderLeftWidth = 1;
               break;
            }
         }
      }
   }

   this.addRowEx = function()//GridName, Band, and cell's values
   {
      var grid = igtbl_getGridById(arguments[0]);
      grid.clearSelectionAll();
      var row = igtbl_addNew(grid.Id, arguments[1]);
      igtbl_activate(grid.Id);
      for (var id = 0; id < arguments[2].length; id++)
         row.getCell(id).setValue(arguments[2][id], false);
      row.select(true, true);
      row.scrollToView();
      return row;
   }
   this.updateRow = function()//oRow and cell's values
   {
      var row = arguments[0];
      for (var id = 0; id < arguments[1].length; id++)
         row.getCell(id).setValue(arguments[1][id], false);
   }
   this.rebuildAlt = function(gn)
   {
      var grid = igtbl_getGridById(gn);
      grid.clearSelectionAll();
      grid.setActiveCell(null);
      grid.setActiveRow(null);
      var rows = grid.Rows;
      if (rows.Node == null)
         grid.Rows.reapplyRowStyles();
      else
         grid.Rows.repaint();
   }

   this.swapRow = function(gridname, from, to)
   {
      var grid = igtbl_getGridById(gridname);
      var row = grid.Rows.getRow(from);
      grid.Rows.remove(from);
      if (from > to)
         grid.Rows.insert(row, to);
      else
         grid.Rows.insert(row, to - 1);
   }
}
//----------------------------- TOOLBAR ----------------------------
function initializeToolbar(oToolbar)
{
}

//----------------------------- WEB TAB ----------------------------
function cg_WebTab()
{
   this.resize = false;
   this.tabs = new Array();
   this.resizeTabs = new Array();

   this.dispose = function()
   {
      delete this.tabs;
      delete this.resizeTabs;
   }

   this.addResizeTab = function(key, extradec)
   {
      var webtab = igtab_getTabById(this.tabs[key]);
      if (webtab)
      {
         if (cg_shared.IsFireFox && key == "SettingTab")// for My Quick Link of my My setting
            $(webtab.element).setHeightExpression(function(element) { return setWebTabHeight(webtab, 55); });
         else if (cg_shared.IsFireFox && key == "MassSettingTab")
            $(webtab.element).setHeightExpression(function(element) { return setWebTabHeight(webtab, 150); });
         else
            $(webtab.element).setHeightExpression(function(element) { return document.body.offsetHeight - element.offsetTop - extradec; });
      }
   }

   this.addTab = function(key, tabID)
   {
      this.tabs[key] = tabID;
   }
   this.getTab = function(key)
   {
      return igtab_getTabById(this.tabs[key]);
   }
   this.initializeTabs = function(owner)
   {
      var offsetWidth = 0;
      var tabs = owner.Tabs;
      for (var id = 0; id < tabs.length; id++)
      {
         var tab = tabs[id];
         if (tab.getElement().offsetWidth > offsetWidth)
            offsetWidth = tab.getElement().offsetWidth;
      }

      if (typeof (owner.rows) != 'undefined')
         offsetWidth = Math.round(document.body.offsetWidth / 5 - 50);

      if (offsetWidth > 0)
      {
         for (var id = 0; id < tabs.length; id++)
         {
            var tab = tabs[id];
            tab.getElement().style.width = offsetWidth;
         }
      }

      if (typeof (owner.rows) == 'undefined')
      {
         var oldE = owner.getEnabled();
         owner.setEnabled(!oldE);
         owner.setEnabled(oldE);
      }
   }
}

function setWebTabHeight(tabKey, extradec)
{
   var webtab = igtab_getTabById(tabKey.ID);
   webtab.Tabs[0].elemDiv.style.height = document.body.clientHeight - webtab.element.offsetTop - extradec;
   if (webtab.ID == "cGWizard_webtab_step2_ctl00_settingTab")
      webtab.Tabs[1].elemDiv.style.width = document.body.clientWidth - webtab.element.offsetLeft - 20;
}
