var popupGrid;

AJTGrid.prototype = new AW.UI.Grid;
AJTGrid.prototype.constructor = AJTGrid;


var MonYYYYFormat = new AW.Formats.Date(); 
MonYYYYFormat.setDataFormat("ISO8601"); 
MonYYYYFormat.setTextFormat("Mmm YYYY"); 
//MonYYYYFormat.setDataTimezone(0*3600000); // 
//MonYYYYFormat.setTextTimezone(0*3600000); // 

MonYYYYFormat.setDataTimezone(0); // 
MonYYYYFormat.setTextTimezone(0); // 

var currencyFormat = new AW.Formats.Number(); 
currencyFormat.setTextFormat("$#,###.##");

currencyFormat.dataToText1 = currencyFormat.dataToText; 
currencyFormat.dataToText = function(data){ 
    return data ? this.dataToText1(data) : ""; 
} ;

var percentFormat = new AW.Formats.Number(); 
percentFormat.setTextFormat("###.##%");

percentFormat.dataToText1 = percentFormat.dataToText; 
percentFormat.dataToText = function(data){ 
    return data ? this.dataToText1(data) : ""; 
} ;

function AWsetSumCols(myGrid,myCols) {

   myGrid.setFooterText(function(col, row){ 

      var format = this.getFooterFormat(col); 

      total = 0;

      var colList = ',' + myCols.toString() + ',';

      if (colList.indexOf(',' + col + ',')!==-1) {

         for (i=0; i < this.getRowCount(); i=i+1) { 
            total = total + parseFloat(this.getCellData(col, i));
         }

         return format ? format.dataToText(total) : total; 


      }

      return '';

   }); 
   
}

function ConvertAWGridToXML(myGrid,skipCols) { 

   var rows = new Array();
   var cols = myGrid.getColumnIndices();

   if (cols.length === 0) { 

      cols = new Array();
      for (colCounter=0; colCounter < myGrid.getColumnCount(); colCounter=colCounter+1) { 
         cols[colCounter] = colCounter;
      }

   }

   var skipColList = ',' + skipCols.toString() + ',';

   var XML=new XMLWriter();
   XML.BeginNode('data');

   if (isValidVariable(myGrid.groupColumn) && myGrid.groupColumn > 0) {
      XML.BeginNode('data');
      //XML.Node('groupBy', cols[myGrid.groupColumn]);
      XML.Node('groupBy',  'col' + 0);
      XML.EndNode();
   }

   XML.BeginNode('header');
   for (colcounter=0; colcounter < cols.length; colcounter=colcounter+1) {

      myCol = parseInt(cols[colcounter],10);

      if (skipColList.indexOf(',' + myCol + ',') ==-1) { 
         XML.BeginNode('col');
         XML.Node('value', myGrid.getHeaderText(myCol));
         XML.Node('width', String(myGrid.getColumnWidth(myCol)));
         XML.EndNode();
      }
   }
   XML.EndNode();

    

   for (rowCounter=0; rowCounter < myGrid.getRowCount(); rowCounter=rowCounter+1) { 
      rows[myGrid.getRowPosition(rowCounter)] = rowCounter;
   }

   for (rowCounter=0; rowCounter < myGrid.getRowCount(); rowCounter=rowCounter+1) { 

      XML.BeginNode('row');

      for (colcounter=0; colcounter < cols.length; colcounter=colcounter+1) { 
         myCol = parseInt(cols[colcounter],10);

         if (skipColList.indexOf(',' + myCol + ',') ==-1) { 
            
            XML.BeginNode('col');
            XML.Node('value', String(myGrid.getCellText(myCol,rows[rowCounter])));
            XML.Node('data', String(myGrid.getCellData(myCol,rows[rowCounter])));
            
            var format = myGrid.getCellFormat(myCol);
            if (format) { 
               XML.Node('excelFormat', String(format.getTextFormatForExcel()));               
            }
            
            XML.EndNode();
            
         }

      }

      XML.EndNode();

   }

   
   //if (isValidVariable(FooterArray) && isValidVariable(FooterArray[myGrid.getId()])) {

   if (isValidVariable(window.FooterArray) && isValidVariable(FooterArray[myGrid.getId()])) {
      
   
      XML.BeginNode('footer');
      
      for (colcounter=0; colcounter < cols.length; colcounter=colcounter+1) { 

         myCol = parseInt(cols[colcounter],10);
         
         if (skipColList.indexOf(',' + myCol + ',') ==-1) { 
            
            XML.BeginNode('col');
            
            if (isValidVariable(FooterArray[myGrid.getId()][myCol])) {
               
               XML.Node('value', String(FooterArray[myGrid.getId()][myCol]));
               
               var format = myGrid.getCellFormat(myCol);
               if (format) { 
                  XML.Node('excelFormat', String(format.getTextFormatForExcel()));               
               }
               
            }
            
            XML.EndNode();
            
         }
      }
      
      XML.EndNode();
      
   }
   
   XML.Close();

   return XML.ToString();

}



function ExportAWGridToXML(myGrid,skipCols) { 

   skipCols = (skipCols == null) ? new Array() : skipCols;

   xml = ConvertAWGridToXML(myGrid,skipCols);
   var xml_data = document.getElementById('xml_data');

   xml_data.value = xml;

}

function AWSetFooterCols(myGrid,myFooters) {

   myGrid.setFooterText(function(col){ 

      if (myFooters[col]) {
         return myFooters[col];
      }
      else {
         return '';
      }
   }); 
   
}


    
function AJTGrid(id) {

    if (arguments.length==2) { 
      // this.setURL(arguments[1]);
    }
    
   
    this.setEvent("onselectstart", "");
    
    this.setFixedLeft(0);
    
    this.columnNames = new Array();

    this.httpRequest = new AW.HTTP.Request;           
    this.httpRequest.parent = this;
    
    this.setVirtualMode(false);

    this.editRow = -1 ;
    this.editCell = -1;
    this.dividerRow = -1 ;
    this.dirtyRow = -1;
    this.sortEnabled = true;
    this.sumCols = new Array();
    this.footers = new Array();
    this.disabledSortHeaders = new Array();
    this.scrollToRow = -1;
    this.URL = '';
    this.editable = false;
    this.linkCols = new Array();
    this.popupRow = -1;

    this.previousParms = new Array();

   
    this.mouseUpRow = -1;
    
    this.dataTable = new AW.XML.Table();
    this.dataTable.setRows("//data/r");
    this.dataTable.setData = function(value, col, row){ 

       var node = this.getNode(col, row); 

       if (node) {
          if (AW.ie) { 
              node.text = value; 
          } 
          else { 
              node.textContent = value; 
          } 
       }
    } 

    this.columnTable = new AW.XML.Table();
    this.columnTable.grid = this

    if (id) { 
       this.setId(id);
       this.setSelectionMode("single-row");
       
       if (window.ScrollToRowArray && ScrollToRowArray[id]) { 
          this.scrollToRow = ScrollToRowArray[id];
          this.setTimeout(this.PerformScrollTo);
       }
        
    }
    
    this.setSelectorVisible(true);
    this.setSelectorText(
       function(i){
          
             return this.getRowPosition(i)+1             

       }
    );
    
    this.showWaitIcon = function(inShow){ 
       if (inShow) {
         this.setTopText('<img src="http://localhost/plantdetectives/images/icons/spinner.gif">');
//this.setTopText("<button>Click Me</button>");  
         this.getTopSelectorTemplate().refresh(); 
       }
       else {
         this.setTopText('');
         this.getTopSelectorTemplate().refresh();           
       }
       
    } 
    
    
    this.PerformScrollTo = function() { 
       if (this.scrollToRow == 'end') { 
          this.setCurrentRow(this.getRowCount() - 1);
       } 
       else {
          this.setSelectedRows([this.scrollToRow]); 
          this.setCurrentRow(this.scrollToRow);
       }

//       this.refresh();
    };
    
    this.clearErrorDiv = function() { 
       
      var gridErrors;

      gridErrors = document.getElementById(this.getId() + 'GridErrors'); 
      
      if (gridErrors) { 
         document.getElementById('body').removeChild(gridErrors);
      }
      
    }
    
    this.refreshFooters = function() {
      
      var colCnt;
       
      for(colCnt=0; colCnt < this.getColumnCount(); colCnt++ ) { 
         this.getFooterTemplate(colCnt).refresh(); 
      }    
      
    }
    
    
    this.columnTable.response = function(xml) { 

      
      if (typeof(xml) != 'object') { 
         alert(xml);
         return;
      }
      

      var headerText = new Array();
      
      var headerNodes = xml.selectNodes('//columninfo/column/heading'); 

      if (headerNodes) { 

         headerText = new Array(); 
         
         for( i=0; i< headerNodes.length; i++ ) { 
            headerText.push( headerNodes[i].text ); 
         } 
      
         this.grid.setHeaderText(headerText); 
         this.grid.setColumnCount(headerText.length);
     
      } 

      var colNameNodes = xml.selectNodes('//columninfo/column/name'); 
      if (colNameNodes) { 
        
         for( i=0; i< colNameNodes.length; i++ ) { 
            this.grid.columnNames.push( colNameNodes[i].text ); 
         } 
      
     
      } 

      var formatNodes = xml.selectNodes('//columninfo/column/format'); 
      if (formatNodes) { 
         for( i=0; i< formatNodes.length; i++ ) { 
            if (formatNodes[i].text.length > 0 ) {
               this.grid.setCellFormat(AWGridFormats[formatNodes[i].text],i);
            }
         } 
      } 
      
      var footerCount = 0;
      var footerNodes = xml.selectNodes('//columninfo/column/footer'); 
      if (footerNodes) { 
         for( i=0; i< footerNodes.length; i++ ) { 
            if (footerNodes[i].text.length > 0 ) {
               footerCount = footerCount + 1;
               this.grid.setFooter(i,footerNodes[i].text);
            }
         } 
      }
      
      if (footerCount > 0) {
        this.grid.setFooterHeight(25);
        this.grid.setFooterVisible(true);
      }
      
      var colOrderNodes = xml.selectNodes('//columninfo/column_order'); 
      if (colOrderNodes) { 
        
         if (colOrderNodes[0] && colOrderNodes[0].text) { 
            this.grid.setColumnIndices(eval(colOrderNodes[0].text)); 
         } 
     
      } 

      var editableNode = xml.selectNodes('//gridinfo/editable'); 
      if (editableNode.length > 0) { 
        
         if (editableNode[0].text == 'Y') { 
            this.grid.setEditable(true); 
         } 
     
      } 
      
      var linkNodes = xml.selectNodes('//columninfo/links/c'); 
      if (linkNodes) { 

         if (window.AWCellClicked) {
            
            this.grid.onCellClicked = function(event, col, row) {
               if (this.linkCols.indexOf(col) > -1) {
                  var rc = AWCellClicked(this,col,row);
                  return rc;
               }
            };
         }
            
         for( i=0; i< linkNodes.length; i++ ) { 

            this.grid.setCellLink("javascript:void(1);", linkNodes[i].text );
            this.grid.setCellTemplate(new AW.Templates.Link, linkNodes[i].text ); // and template 
            this.grid.linkCols.push( linkNodes[i].text); 
            
         } 
      
     
      } 
      
      this.grid.showWaitIcon(false);
           
    }
    
    this.setURL = function (myURL) {
       
         var extraParms = new Array();
         
         if (arguments.length > 1) {
            extraParms = arguments[1];
         }

         this.URL = myURL;
         this.retrieveData('N',true,-1,extraParms);
       
    }
    
    
    this.retrieveData = function() { 
        
        this.showWaitIcon(true);
        this.setRowCount(0);
        this.refresh();
       //this.retrieveDataWorkerThread();

        var dataOnly = 'N';
        var async = false;
        var row = -1;
         
        if (arguments.length > 0) {
            dataOnly = arguments[0];
        }
        
        if (arguments.length > 1) {
            async = arguments[1];
        }
        
        if (arguments.length > 2) {
            row = arguments[2];
        }
         

        if (arguments.length > 3) {
            params = arguments[3];
        }
        
       this.setTimeout(function(){this.retrieveDataWorkerThread(dataOnly,async,row,params)},0);
       
    }
    
    this.retrieveDataWorkerThread = function() { 

        var dataOnly = 'N';
        var async = false;
        var row = -1;
         
        if (arguments.length > 0) {
            dataOnly = arguments[0];
        }
        
        if (arguments.length > 1) {
            async = arguments[1];
        }
        
        if (arguments.length > 2) {
            row = arguments[2];
        }
        
        this.httpRequest.setParameter("getDataOnly", dataOnly);
           
         this.httpRequest = new AW.HTTP.Request();
         this.httpRequest.parent = this;
         this.httpRequest.setURL(this.URL);
         this.httpRequest.setRequestMethod("POST");
         

         if (eval('window.getAdditionalGridParms' + '_' + this.getId())) {
            eval('var extraParms = window.getAdditionalGridParms' + '_' + this.getId() + '(row);');
               
             for( i=0; i< extraParms.length; i++ ) { 
                this.httpRequest.setParameter(extraParms[i].name,extraParms[i].value);
             } 
               
         }

         if (arguments.length > 3) {
            
            var extraParms = arguments[3];
            
            this.previousParms = extraParms;
            
            for( i=0; i< extraParms.length; i++ ) { 
               this.httpRequest.setParameter(extraParms[i].name,extraParms[i].value);
            } 
            
         }
         

         if (row > -1) {
           uid = this.getCellValue(0,row);
           if (!uid) {
              row = -1;
           }
         }
         
         if (row > -1) {

           this.httpRequest.setParameter("uid", this.getCellValue(0,row));
           this.httpRequest.setParameter("updateRow", row );
           this.httpRequest.updateRow = row;

            this.httpRequest.response = function(xml) {

               if (typeof(xml) != 'object') { 
                 alert(xml);
                 return ;
               }
               
               var columnNodes = xml.selectNodes('//data/r/c'); 
               
               if (columnNodes) { 
                 for( i=0; i < columnNodes.length; i++ ) { 
                    this.parent.dataTable.setData(columnNodes[i].text,i,this.updateRow); 
                 } 
               } 
              
               this.parent.getRowTemplate(this.updateRow).refresh();
               this.parent.refreshFooters();               

               
            }

           
         }
         else {
            
            this.setCellModel(this.dataTable);

            this.httpRequest.response = function(xml) {
               
               if (typeof(xml) != 'object') { 
                  alert(xml);
                  return;
               }

               var errors = xml.selectNodes('//errors/message'); 

               if (errors.length > 0) {
                  alert(errors[0].text);
                  return;
               }

               this.parent.columnTable.response(xml);
               this.parent.dataTable.response(xml);

               
               if (eval('window.AWPostRetrive_' + this.parent.getId())) {
                   eval('var rc = window.AWPostRetrive_' + this.parent.getId() + '(xml);');
               }

               var scrollTo = xml.selectNodes('//additionalInfo/scrollToRow'); 
               if (scrollTo.length > 0) {

                  var scrollRow = parseInt(scrollTo[0].text);
                  this.parent.scrollToRow = scrollRow;
                  
                  this.parent.setSelectedRows([scrollRow]); 
                  this.parent.setTimeout(this.parent.PerformScrollTo,500);
                  //this.parent.setCurrentRow(scrollRow);
                  
               }
               
               this.parent.showWaitIcon(false);

               
            }
            
         }

         this.httpRequest.setAsync(async);
         this.httpRequest.request();
       
       
    }
    
    
    this.onHeaderClicked = function(event,index){
      if (!this.sortEnabled) {

         if (this.disabledSortHeaders.length > 0) { 
            if (this.disabledSortHeaders.indexOf(index) > -1) { 
               return 'disabled';
            }
         }
         else {
            return 'disabled';
         }
      }
      
      return "";
      
    };

    this.setSortEnabled = function(sortEnabled) { 

       if (arguments.length==2) { 
          if (sortEnabled===false) { 
             this.disabledSortHeaders = arguments[1];
          }
       }

       this.sortEnabled = sortEnabled;

    };

	 
           
       
}
    

function AjtHttpRequest() {
    
   this.parentsetParameter = this.setParameter;
    
   this.setParameter = function(name,value) {
        value = removeMSWordChars(value);
        this.parentsetParameter(name,value);
    }
    
    
}
AjtHttpRequest.prototype = new AW.HTTP.Request();
