Ext.grid.CheckColumn = function(config) {
  Ext.apply(this, config);
  if (!this.id) {
    this.id = Ext.id();
  }
  this.renderer = this.renderer.createDelegate(this);
};
	
Ext.grid.CheckColumn.prototype = {
  init: function(grid) {
    this.grid = grid;
    this.grid.on('render', function() {
      var view = this.grid.getView();
      view.mainBody.on('mousedown', this.onMouseDown, this);
    }, this);
  },
  
  onMouseDown: function(e, t) {
    if (t.className && t.className.indexOf('x-grid3-cc-' + this.id) != -1) {
      e.stopEvent();
      var index = this.grid.getView().findRowIndex(t);
      var record = this.grid.store.getAt(index);
      record.set(this.dataIndex, !record.data[this.dataIndex]);
      record.commit();
    }
  },
  
  renderer: function(v, p, record) {
    p.css += ' x-grid3-check-col-td';
    return '<div class="x-grid3-check-col' + (v ? '' : '-on') + ' x-grid3-cc-' + this.id + '">&#160;</div>';
  }
};

function createCnfTabla(tabtipid){
	var kijelolt;
	var kijsorszam;
	
	var btnFirst = new Ext.Button({
//		text: ' << ',
		minWidth : 18,
		style : 'padding: 0px 0px 0px 3px',
		iconCls : 'btnup',
		handler: clickBtnFirst
	});
	
	var btnPrev = new Ext.Button({
//		text: ' - ',
		minWidth : 18,
		iconCls : 'btnprev',
		style : 'padding: 3px 0px 0px 3px',
		handler: clickBtnPrev
	});

	var btnNext = new Ext.Button({
//		text: ' + ',
		minWidth : 18,
		iconCls : 'btnnext',		
		style : 'padding: 3px 0px 0px 3px',
		handler: clickBtnNext
	});
	var btnLast = new Ext.Button({
//		text: ' >> ',
		minWidth : 18,
		iconCls: 'btndown',
		style : 'padding: 3px 0px 0px 3px',
		handler: clickBtnLast
	});
	
	var btnDel = new Ext.Button({
		text: 'Kijelölt elem törlése',
		minWidth : 140,
		iconCls: 'btndelete',
	//	style : 'padding: 10px 10px 3px 3px',
		handler: function(){
			cnfTabla.getSelectionModel().each(function(r) {
				cnfTabla.store.remove(r);	
			});			
		}
	});

	var btnDelAll = new Ext.Button({
		text: 'Minden elem törlése',
		minWidth : 140,
		iconCls:'btndelall',
	//	style : 'padding: 10px 10px 3px 3px',
		handler: function(){
			cnfTabla.store.removeAll();
		}
	});

	var btnSend = new Ext.Button({
		text: 'Elküld',
		minWidth : 140,
		iconCls : 'ok',
//		style : 'padding: 10px 10px 3px 3px',
		handler: clickBtnSend
	});

	var btnCancel = new Ext.Button({
		text: 'Mégse',
		iconCls : 'cancel',
		minWidth : 140,
//		style : 'padding: 10px 10px 3px 3px',
		handler: clickBtnCancel
	});
	
	/*var cbGroup = Ext.form.Checkbox({
		id : 'cbaltlekfieldgroup',
		boxLabel : 'csoportosítás a mezőértékek szerint'
	});*/
	/*
  var pCheck = new Ext.form.FormPanel({
    autoHeight: true,
    bodyStyle: 'padding:  10px 10px 3px 3px',
    
    region: 'south',
    
     xtype: 'checkboxgroup',
             //   fieldLabel: 'Multi-Column (vertical)',
                itemCls: 'x-check-group-alt',
                // Distribute controls across 3 even columns, filling each column
                // from top to bottom before starting the next column
                columns: 3,
                vertical: true,
                items: [
                    {boxLabel: 'Item 1', name: 'cb-vert-1'},
                    {boxLabel: 'Item 2', name: 'cb-vert-2', checked: true},
                    {boxLabel: 'Item 3', name: 'cb-vert-3'}
                ]
  });
*/
	var xg = Ext.grid;
  	var checkColumnCsoport = new Ext.grid.CheckColumn({
       header: "Csoportosítás",
	   sortable:true,
       dataIndex: 'check1',
       width: 75
    });
	var checkColumnOsszeg = new Ext.grid.CheckColumn({
       header: "Összegzés",
	   sortable:true,
       dataIndex: 'check2',
       width: 70
    });
 	//reader
    var reader = new Ext.data.ArrayReader({
			id : 'mezo1'
		}, [
       {name: 'mezo1'},
	  	 {name: 'mezonev1'},
       {name: 'check1'},
       {name: 'check2'}
    ]);
	var cnfTablaStore = new Ext.data.Store({
		id:'cnfstore',
    reader: reader
	});

	//tábla
	
  var cnfTabla = new xg.GridPanel({
    region: 'center',
    store: cnfTablaStore, //testStore
    sm: new xg.RowSelectionModel(),
    cm: new xg.ColumnModel([{
      id: 'mezo',
      sortable: true,
      header: "Mező",
      width: 70,
      dataIndex: 'mezo1'
    }, {
      id: 'mezonev',
      sortable: true,
      header: "Mezőnév",
      width: 220,
      dataIndex: 'mezonev1'
    }, checkColumnCsoport/*, checkColumnOsszeg*/]),
    ddGroup: 'testGroup',
		autoExpandColumn: 'mezonev',
    enableDragDrop: true,
		border : false,
    width: 495,
    height: 430,
    bodyStyle: 'border:0px',
    frame: true,
    //       title:'cnf-tábla',
    id: 'cnftabla',
    plugins: [checkColumnCsoport, checkColumnOsszeg]
  });
	
	//listener
	cnfTabla.addListener({	
	'cellclick':{
		fn: function(grid, rowIndex, columnIndex, event){
			var record = grid.getStore().getAt(rowIndex);
			var fieldName = grid.getColumnModel().getDataIndex(1);
			var adat = record.get(fieldName);
			kijelolt = record;
			kijsorszam = rowIndex;
		}
		,scope:this
	 },
	 render: function(g){
		  var ddrow = new Ext.ux.dd.GridReorderDropTarget(g, {
	        copy: false
		  });
    }
  }); 
	/*
  var tablaPanel = new Ext.Panel({
		region : 'center',
		layout : 'border',
		items : [cnfTabla, pCheck]
	});
	*/
 	var Centerbe = new Ext.Panel({
		id: 'cnfcenterbepanel',
	//	title : 'mezotablaCenterbePanel',
		layout: 'border',
		border:false,
		items:[cnfTabla,{
			xtype : 'panel',
			width: 28,
			region : 'east',
			border : false,
			items:[{height:30, border:false},btnFirst,btnPrev,btnNext,btnLast]
		},{
			//title : 'bottom',
			xtype : 'panel',
			height: 40,
			region : 'south',
			border : false,
			layout : 'column',
			items:[
				getBottomPanelButton(btnDel),
				getBottomPanelButton(btnDelAll),{
					height : 40, 
					border: false, 
					columnWidth : 1
				},
				getBottomPanelButton(btnCancel),
				getBottomPanelButton(btnSend)
				]			
		}]
	});
	
	//Tábla beillesztése a centerpanelbe. Ha már létezik, destroy.
	var tablaCenter = mezotablaPanel.findById('cnfcenterbepanel');
	if (tablaCenter != null) {
		mezotablaPanel.remove(tablaCenter);
		tablaCenter.destroy();
	}
	var panelCenter = mezotablaPanel.findById('cnfcenterpanel');
	panelCenter.add(Centerbe);
	panelCenter.doLayout();	
};

function getBottomPanelButton(btn) {
	return new Ext.Panel({
				height : 40, 
				border: false, 
				bodyStyle : 'padding: 10px 10px 3px 3px',
				width : 145,
				items : [btn]
				});
}

function clickBtnFirst() {
  var cnfTabla = panelCenter = mezotablaPanel.findById('cnftabla');
  var ds = cnfTabla.getStore();
  var records = new Array();
  var sorszam = -1;
  for (i = 0; i < ds.getCount(); i++) {
    if (cnfTabla.getSelectionModel().isSelected(i)) {
      if (sorszam == -1) 
        sorszam = i - 1;
      records.unshift(ds.getAt(i));
    }
  }
  for (i = 0; i < records.length; i++) {
    ds.remove(ds.getById(records[i].id));
  }
  ds.insert(0, records);
  cnfTabla.getSelectionModel().selectRecords(records, true);
}

function clickBtnPrev() {
  var cnfTabla = panelCenter = mezotablaPanel.findById('cnftabla');
  var ds = cnfTabla.getStore();
  var records = new Array();
  var sorszam = -1;
  for (i = 0; i < ds.getCount(); i++) {
    if (cnfTabla.getSelectionModel().isSelected(i)) {
      if (sorszam == -1) 
        sorszam = i - 1;
      records.unshift(ds.getAt(i));
    }
  }
  if (sorszam == -1) 
    return;
  //			var ujsor = sorszam-1;
  //			record1.set('sorszam',ujsor);
  for (i = 0; i < records.length; i++) {
    ds.remove(ds.getById(records[i].id));
  }
  ds.insert(sorszam, records);
  cnfTabla.getSelectionModel().selectRecords(records, true);
}

function clickBtnNext() {
  var cnfTabla = panelCenter = mezotablaPanel.findById('cnftabla');
  var ds = cnfTabla.getStore();
  var records = new Array();
  var sorszam = ds.getCount();
  for (i = sorszam; i >= 0; i--) {
    if (cnfTabla.getSelectionModel().isSelected(i)) {
      if (sorszam == (ds.getCount())) 
        sorszam = i + 2;
      records.push(ds.getAt(i));
    }
  }
  
  var pos = sorszam - records.length;
  if (sorszam <= (ds.getCount())) {
    for (i = 0; i < records.length; i++) {
      ds.remove(ds.getById(records[i].id));
    }
  }
  else {
    pos = ds.getCount() - records.length;
  }
	ds.insert(pos, records);
  cnfTabla.getSelectionModel().selectRecords(records, true);
}

function clickBtnLast() {
  var cnfTabla = panelCenter = mezotablaPanel.findById('cnftabla');
  
  var ds = cnfTabla.getStore();
  var records = new Array();
  var sorszam = ds.getCount();
  for (i = sorszam; i >= 0; i--) {
    if (cnfTabla.getSelectionModel().isSelected(i)) {
      if (sorszam == (ds.getCount())) 
        sorszam = i + 1;
      records.push(ds.getAt(i));
    }
  }
  
  var pos = ds.getCount() - records.length;
  if (sorszam < (ds.getCount())) {
    for (i = 0; i < records.length; i++) {
      ds.remove(ds.getById(records[i].id));
    }
    ds.insert(pos, records);
    cnfTabla.getSelectionModel().selectRecords(records, true);
  }
  else 
    return;
}

function clickBtnCancel() {
	tabdefwin.hide();
	tabdefwin.destroy();
	tabdefwin = undefined;
}

function clickBtnSend() {
  var cnfTabla = panelCenter = mezotablaPanel.findById('cnftabla');
  var i = 0;
  var valasz = '{"tabtipid" : ' + tabtipid + ', "mezok": [';
  while (i < 100) {
    var record = cnfTabla.store.getAt(i);
    if (record == undefined) 
      i = 1000;
    else {
      var fieldName = cnfTabla.getColumnModel().getDataIndex(0);
      var mezo1 = record.get(fieldName);
      var fieldName = cnfTabla.getColumnModel().getDataIndex(1);
      var mezonev = record.get(fieldName);
      var fieldName = cnfTabla.getColumnModel().getDataIndex(2);
      var check1 = record.get(fieldName);
      if (check1 != false) 
        check1 = '0';
      else 
        check1 = '1';
    //  var fieldName = cnfTabla.getColumnModel().getDataIndex(3);
      var check2 = false; //record.get(fieldName);
      if (check2 != false) 
        check2 = '0';
      else 
        check2 = '1';
      if (i != 0) 
        valasz = valasz + ',';
      valasz = valasz + '{"mezo1": "' + mezo1 + '", "csop": "' + check1 + '", "sum": "' + check2 + '"}';
    }
    ++i;
  }
  valasz = valasz + ']}';
 // crateAltLekTabla(valasz);
  clickBtnCancel();
 
	createAltLekPanel(valasz);
	
}

// Grid drag and Drop
Ext.namespace('Ext.ux.dd');

Ext.ux.dd.GridReorderDropTarget = function(grid, config) {
    this.target = new Ext.dd.DropTarget(grid.getEl(), {
        ddGroup: grid.ddGroup || 'GridDD'
        ,grid: grid
        ,gridDropTarget: this
        ,notifyDrop: function(dd, e, data){
            var t = Ext.lib.Event.getTarget(e);
            var rindex = this.grid.getView().findRowIndex(t);
            if (rindex === false) return false;
            if (rindex == data.rowIndex) return false;
            
             if (this.gridDropTarget.fireEvent(this.copy?'beforerowcopy':'beforerowmove', this.gridDropTarget, data.rowIndex, rindex, data.selections) === false) return false;

                var ds = this.grid.getStore();
                if (!this.copy) {                        
                    for(i = 0; i < data.selections.length; i++) {
                        ds.remove(ds.getById(data.selections[i].id));
                    }
                }
                ds.insert(rindex,data.selections);

                var sm = this.grid.getSelectionModel();
                if (sm) sm.selectRecords(data.selections);

                this.gridDropTarget.fireEvent(this.copy?'afterrowcopy':'afterrowmove', this.gridDropTarget, data.rowIndex, rindex, data.selections);
                return true;            
            }
        ,notifyOver: function(dd, e, data) {
            var t = Ext.lib.Event.getTarget(e);
            var rindex = this.grid.getView().findRowIndex(t);
            
            if (rindex == data.rowIndex) rindex = false;
               return this.dropAllowed;
      }
    });
    if (config) {
        Ext.apply(this.target, config);
        if (config.listeners) Ext.apply(this,{listeners: config.listeners});
    }

    this.addEvents({
        "beforerowmove": true
        ,"afterrowmove": true
        ,"beforerowcopy": true
        ,"afterrowcopy": true
    });

    Ext.ux.dd.GridReorderDropTarget.superclass.constructor.call(this);
};

Ext.extend(Ext.ux.dd.GridReorderDropTarget, Ext.util.Observable, {
    getTarget: function() {
        return this.target;
    }
    ,getGrid: function() {
        return this.target.grid;
    }
    ,getCopy: function() {
        return this.target.copy?true:false;
    }
    ,setCopy: function(b) {
        this.target.copy = b?true:false;
    }
});
