Ext.ns('energywater');

energywater.counterGrid = Ext.extend(Ext.grid.GridPanel, {
  id: 'CounterPanel',
  border: true,
  autoload:null,
  enableHdMenu:false,
  store: new Ext.data.Store({
    proxy: new Ext.data.HttpProxy({
      url:'/process/EMBrowser/site/counter/process.counter.php',
      method: 'POST'
    }),
    reader: new Ext.data.JsonReader({
      root: 'data',
      totalProperty: 'totalCount'
    },[
      {name: 'counter_id', type: 'int', mapping: 'counter_id'},
      {name: 'type', type: 'string', mapping: 'type'},
      {name: 'countername', type: 'string', mapping: 'countername'},
      {name: 'division', type: 'string', mapping: 'division_name'}
    ]),
    sortInfo:{field: 'countername', direction: "ASC"}
  }),
  initComponent:function() {
    this.addEvents("modifycounter");
    this.actionEdit = new Ext.ux.grid.RowActions({
      header:'&nbsp;'
      ,width: 45
      ,scope:this
      ,autoWidth:false
      ,hideMode:'display'
      ,keepSelection:true
      ,actions:[{
        iconCls:'icon-edit'
        ,qtip:'Modifier'
      }]
    });
    var CheckColumn = new Ext.grid.CheckColumn({
      header: "&nbsp;",
      dataIndex: 'checkbox',
      hideable:false,
      width: 25
    });
    var config = {
      plugins:[CheckColumn,this.actionEdit],
      tbar: new Ext.Toolbar({
        items:[
          new Ext.Toolbar.Button({
            text: 'Ajout d\'un compteur'
            ,iconCls:'add'
          }),
          new Ext.Toolbar.Button({
            text: 'Suppression',
            iconCls:'remove'
          })
        ]
      }),
      cm: new Ext.grid.ColumnModel([
        {
          header: 'counter_id',
          dataIndex:'counter_id'
          ,hidden:true
          ,hideable:false
        },
        {
          header: 'type',
          dataIndex:'type'
          ,hidden:true
          ,hideable:false
        },
        CheckColumn,
        {
          header: 'Nom du compteur',
          dataIndex: 'countername',
          width: 110,
          hideable:false
        },
        {
          header: 'Division',
          dataIndex: 'division',
          width: 90,
          hideable:false
        }
        ,this.actionEdit
      ])
    };
    // apply config
    Ext.apply(this, Ext.apply(this.initialConfig, config));
    // call parent initComponent
    energywater.counterGrid.superclass.initComponent.call(this);
    this.topToolbar.items.itemAt(0).on('click',this.initAddFormWindow,this);
  } // end of function initComponent
  ,onRender:function() {
    energywater.counterGrid.superclass.onRender.apply(this, arguments);
  } // eo function onRender
  ,refresh:function(tn_id) {
    if(tn_id == 0) {
      tn_id = this.tn_id;
    } else {
     this.tn_id = tn_id;
    }
    this.store.load({
      url:this.url
      ,waitMsg:'Loading...'
      ,params:{cmd:'list', tn_id:tn_id, start:0,limit:15}
    });
  }
  ,initAddFormWindow:function (){
    if(this.counterFormWindow == null || !this.counterFormWindow.isVisible()){
      this.counterFormWindow = new energywater.counterFormWindow();
      this.waterCounterForm = this.counterFormWindow.items.itemAt(0);
      this.waterCounterForm.init(this.tn_id);
      this.waterCounterFormButton = this.waterCounterForm.buttons[0];
      this.energyCounterForm = this.counterFormWindow.items.itemAt(1);
      this.energyCounterForm.init(this.tn_id);
      this.energyCounterFormButton = this.energyCounterForm.buttons[0];
      var scope_counter = this;
      this.waterCounterFormButton.on({
         scope:scope_counter,
         click:function(scope){
           this.addWaterCounter();
         }
      });
      this.energyCounterFormButton.on({
         scope:scope_counter,
         click:function(scope){
           this.addEnergyCounter();
         }
      });
      this.counterFormWindow.show();
    } else {
      this.counterFormWindow.toFront();
    }
  }
  ,addWaterCounter: function() {
    if(this.waterCounterForm.isValid()){
      Ext.Ajax.request({
        ownerCt: this,
        waitMsg: 'Please wait...',
        url: '/process/EMBrowser/site/counter/process.water_counter.php',
        params: {
          cmd:"add",
          countername: this.waterCounterForm.getField('watercountername').getValue(),
          division_id: this.waterCounterForm.getField('division').getValue(),
          usagetype: this.waterCounterForm.getField('usagetype').getValue()
        },
        success: function(response,scope){
          var result = Ext.util.JSON.decode(response.responseText);
          switch(result.success){
            case 1:
              scope.ownerCt.fireEvent("modifycounter",this);
              scope.ownerCt.refresh(0);
              scope.ownerCt.counterFormWindow.close();
            break;
            default:
              Ext.MessageBox.alert('Attention',result.error);
              break;
          }
        },
        failure: function(response) {
          Ext.MessageBox.alert('error','L application n a pas pu se connecter a la base de données. Veuillez réessayer plus tard');
        }
      });
    } else {
      Ext.MessageBox.alert('Attention','Le formulaire n est pas valide');
    }
  }
  ,addEnergyCounter: function() {
    if(this.energyCounterForm.isValid()){
      Ext.Ajax.request({
        ownerCt: this,
        waitMsg: 'Please wait...',
        url: '/process/EMBrowser/site/counter/process.energy_counter.php',
        params: {
          cmd:"add",
          countername: this.energyCounterForm.getField('energycountername').getValue(),
          defaultenergysuppliername: this.energyCounterForm.getField('defaultenergysuppliername').getValue(),
          energy: this.energyCounterForm.getField('energy').getValue(),
          division_id: this.energyCounterForm.getField('division').getValue(),
          doubletarif: this.energyCounterForm.getField('doubletarif').getValue(),
          energyusagetype: this.energyCounterForm.getField('energyusagetype').getValue()
        },
        success: function(response,scope){
          var result = Ext.util.JSON.decode(response.responseText);
          switch(result.success){
            case 1:
              scope.ownerCt.fireEvent("modifycounter",this);
              scope.ownerCt.refresh(0);
              scope.ownerCt.counterFormWindow.close();
              break;
            default:
              Ext.MessageBox.alert('Attention',result.error);
              break;
          }
        },
        failure: function(response) {
          Ext.MessageBox.alert('error','L application n a pas pu se connecter a la base de données. Veuillez réessayer plus tard');
        }
      });
    } else {
      Ext.MessageBox.alert('Attention','Le formulaire n est pas valide');
    }
  }
  ,getCheckBoxValues:function() {
    var counters = [];
    var counters_energies = [];
    for(i = 0; i< this.getStore().getCount(); i++){
      if(this.getStore().getAt(i).get('checkbox')){//if the checkbox is selected
        counters.push(this.getStore().getAt(i).get('counter_id'));
        counters_energies.push(this.getStore().getAt(i).get('type'));
      }
    }
    this.deleteCounters(counters,counters_energies);
  }
  ,deleteCounters :function(counters, counters_energies ){
    for(j = 0; j< counters_energies.length; j++){
      if(counters_energies[j] == "water"){
        this.deleteWaterCounter(counters[j]);
      } else {
        this.deleteEnergyCounter(counters[j]);
      }
    }
  }
  ,deleteWaterCounter: function(entry){
    if(this.countCheck() > 0) {
      Ext.Ajax.request({
        ownerCt: this,
        waitMsg: 'Please wait...',
        url: '/process/EMBrowser/site/counter/process.water_counter.php',
        params: {
          entry_ids: entry
          ,cmd:'delete'
        },
        success: function(response,scope){
          scope.ownerCt.fireEvent("modifycounter",scope.ownerCt);
          scope.ownerCt.refresh(scope.ownerCt.tn_id);
        },
        failure: function() {
        }
      });
    } else {
      Ext.MessageBox.show({
        title: 'Aucun élément sélectionné',
        msg: 'Pour supprimer, veuillez sélectionner les éléments à supprimer avec les checkbox',
        width: 300
      });
    }
  }
  ,deleteEnergyCounter : function(entry){
    if(this.countCheck() > 0) {
      Ext.Ajax.request({
        ownerCt: this,
        waitMsg: 'Please wait...',
        url: '/process/EMBrowser/site/counter/process.energy_counter.php',
        params: {
          entry_ids: entry
          ,cmd:'delete'
        },
        success: function(response,scope){
          scope.ownerCt.fireEvent("modifycounter",scope.ownerCt);
          scope.ownerCt.refresh(scope.ownerCt.tn_id);
        },
        failure: function() {
        }
      });
    } else {
      Ext.MessageBox.show({
        title: 'Aucun élément sélectionné',
        msg: 'Pour supprimer, veuillez sélectionner les éléments à supprimer avec les checkbox',
        width: 300
      });
    }
  }
  ,countCheck:function() {
    var check = 0;
    for(i = 0; i< this.getStore().getCount(); i++){
      if(this.getStore().getAt(i).get('checkbox')){//if the checkbox is selected
        check++;
      }
    }
    return check;
  }
});

Ext.reg('energywatercountergrid', energywater.counterGrid);

