var dataGridData = new Object();
var Grid = new Object();

Grid.Datagrid = function Datagrid(in_property,statestring,headerstring) {
  this.property = in_property;
  this.array;
  this.header;
  this.grid;
  this.propertyArray;
  this.deletedArray;
  this.stateString=statestring;
  this.headerString=headerstring;
  this.statusCell;
  this.comboArray=new Array();

  Grid.Datagrid.prototype.setStateString = function(str){
    this.stateString=str;
  }

  Grid.Datagrid.prototype.setGridObject = function(obj){
    this.grid=obj;
  }

  Grid.Datagrid.prototype.setDataArray= function(newArray){
    this.array=newArray;
    for(i=0;i<this.array.length;i++){
      var row = this.array[i];
      row[row.length]='untouched';
    }
  }

  Grid.Datagrid.prototype.setHeaderArray= function(newArray){
    this.header=newArray;
    this.statusCell=this.header.length;
  }

  Grid.Datagrid.prototype.addComboArray = function(newArray){
    this.comboArray.push(newArray);
  }

  Grid.Datagrid.prototype.setPropertyArray = function(newArray){
    this.propertyArray=newArray;
    this.deletedArray=new Array();
  }

  Grid.Datagrid.prototype.getRowCount= function(){
    return this.array.length;
  }

  Grid.Datagrid.prototype.getColumnCount = function(){
    return this.header.length;
  }

  Grid.Datagrid.prototype.setCell=function(i,j,value){
    this.array[i][j]=value;
    if(this.array[i][this.statusCell]=='untouched'){
      this.array[i][this.statusCell]='modified';
    }
  }

  Grid.Datagrid.prototype.getCell= function(i,j){
    return this.array[i][j];
  }

  Grid.Datagrid.prototype.getHeader = function(i){
    return this.header[i];
  }

  Grid.Datagrid.prototype.addRow = function(){
    var size = this.statusCell+1;
    this.array[this.array.length]=new Array(size);
    for(i=0;i<this.array[this.array.length-1].length;i++){
      this.array[this.array.length-1][i]='';
      if(i==this.statusCell){
        this.array[this.array.length-1][i]='new';
      }
    }
    this.grid.setRowProperty('count', this.getRowCount());
    this.grid.refresh();
  }

  Grid.Datagrid.prototype.deleteRow = function(){
    var i=this.grid.getSelectionProperty("index");
    if(i==-1){
      return;
    }
    var status=this.array[i][this.statusCell];
    if(status!='new'){
      this.array[i][this.statusCell]='deleted';
      this.deletedArray[this.deletedArray.length]=this.array[i];
      this.array.splice(i,1);
    }
    else{
      this.array.splice(i,1);
    }
      this.grid.setSelectionProperty("index",-1);
      this.grid.setRowProperty("count", this.getRowCount());
      this.grid.refresh();
  }

  Grid.Datagrid.prototype.getFields = function(){
    var dataArray = this.array;
    var property = this.propertyArray;
    var header = this.header;
    var fieldArray=new Array();
    var objHtml;
    var idx=0;
    for(i=0;i<dataArray.length;i++,idx++){
      for(j=0;j<dataArray[i].length-1;j++){
        objHtml=document.createElement('INPUT');
        objHtml.setAttribute('type','hidden');
        objHtml.setAttribute('name',this.property+"."+property[j]+"["+idx+"]");
        objHtml.setAttribute('value',this.replaceValue(j,dataArray[i][j]));
				fieldArray.push(objHtml);
      }
      objHtml=document.createElement('INPUT');
      objHtml.setAttribute('type','hidden');
      objHtml.setAttribute('name',this.property+"."+this.stateString+"["+idx+"]");
      objHtml.setAttribute('value',dataArray[i][this.statusCell]);
      fieldArray.push(objHtml);
    }
    for(i=0;i<this.deletedArray.length;i++,idx++){
      for(j=0;j<this.deletedArray[i].length-1;j++){
        objHtml=document.createElement('INPUT');
        objHtml.setAttribute('type','hidden');
        objHtml.setAttribute('name',this.property+"."+property[j]+"["+idx+"]");
        objHtml.setAttribute('value',this.deletedArray[i][j]);
        fieldArray.push(objHtml);
      }
      objHtml=document.createElement('INPUT');
      objHtml.setAttribute('type','hidden');
      objHtml.setAttribute('name',this.property+"."+this.stateString+"["+idx+"]");
      objHtml.setAttribute('value',this.deletedArray[i][this.statusCell]);
      fieldArray.push(objHtml);
    }
    for(i=0;i<header.length;i++){
      objHtml=document.createElement('INPUT');
      objHtml.setAttribute('type','hidden');
      objHtml.setAttribute('name',this.property+"."+this.headerString+"["+i+"]");
      objHtml.setAttribute('value',header[i]);
      fieldArray.push(objHtml);
    }
    return fieldArray;
  }

  Grid.Datagrid.prototype.replaceValue= function(idx,value){
    var newValue=value;
    for(k=0;k<this.comboArray.length;k++){
      if(this.comboArray[k].index==idx){
        newValue=this.comboArray[k].values[value];
        break;
      }
    }
    return newValue;
  }

  Grid.Datagrid.prototype.debugStatus= function(){
     for(i=0;i<this.array.length;i++){
      if(!confirm('name: '+this.array[i][0]+'\nstatus: '+this.array[i][this.statusCell])){
        break;
      }
     }
     for(i=0;i<this.deletedArray.length;i++){
        if(!confirm('name: '+this.deletedArray[i][0]+'\nstatus: '+this.deletedArray[i][this.statusCell])){
                      break;
                    }
     }
  }

  Grid.Datagrid.prototype.debugData = function(){
    for(i=0;i<this.array.length;i++){
      var row = this.array[i];
      if(!confirm(row)){
        break;
      }
    }
    var selection = this.grid.getSelectionProperty("values");
    for(i=0;i<selection.length;i++){
      alert('Row Selected:'+selection[i]);
    }
  }

  Grid.Datagrid.prototype.debugFields = function(){
    var fieldArray = this.getFields();
    for(i=0;i<fieldArray.length;i++){
      if(!confirm('NAME: '+fieldArray[i].name+'\nVALUE: '+fieldArray[i].value+'\nOBJECT: '+fieldArray[i])){
        break;
      }
    }
  }
}
