
var currentColumnDefinitions = new Ext.Element({
	id: 'currentColumnDefinitions',
	data: {}						// wird beim Klick auf die Tabelle gelesen
});

var currentFilter = '';
          
var Feld = Ext.data.Record.create([{ name: "Feld1", type:'int' }]);
       
// Dummy
var tableStore = new Ext.data.Store();

var filters = new Ext.ux.grid.GridFilters({
    encode: false, 	// json encode the filter query
    local: false,   // defaults to false (remote filtering)
	menuFilterText: text_164,
	filters:[]
});      
          
var filtersB = new Ext.ux.grid.GridFilters({
    encode: false, 	// json encode the filter query
    local: false,   // defaults to false (remote filtering)
	menuFilterText: text_164,
	filters:[]
});      
          
var editor = new Ext.ux.grid.RowEditor({
     saveText: text_47,
     cancelText: text_15,
	 clicksToEdit: 2, 		//this changes from the default double-click activation to single click activation 
	 errorSummary: false 		//disables display of validation messages if the row is invalid     
 });
    
var gridViewEditor = new Ext.grid.GridView();
var gridViewBrowser = new Ext.grid.GridView();
gridViewEditor.sortAscText = text_153;    
gridViewEditor.sortDescText = text_154;    
gridViewEditor.columnsText = text_165;    
gridViewBrowser.sortAscText = text_153;    
gridViewBrowser.sortDescText = text_154;    
gridViewBrowser.columnsText = text_165;    
              
// Page size combo box
var pagingCombo = new Ext.form.ComboBox({
	store:	new Ext.data.SimpleStore ({
			fields: ['num'],
			data :  [ [text_168], [ 25 ], [ 50 ], [ 100 ], [ 200 ], [ 500 ] ]
		}),
	displayField:'num',
	typeAhead: false,
	mode: 'local',
	triggerAction: 'all',
	emptyText: text_167,
	selectOnFocus:false,
	allowBlank: true,
	editable:false,
	width: 70,
	listWidth: 70,
	resizable:false
}); 		
            
var pagingComboB = new Ext.form.ComboBox({
	store:	new Ext.data.SimpleStore ({
			fields: ['num'],
			data :  [ [text_168], [ 25 ], [ 50 ], [ 100 ], [ 200 ], [ 500 ] ]
		}),
	displayField:'num',
	typeAhead: false,
	mode: 'local',
	triggerAction: 'all',
	emptyText: text_167,
	selectOnFocus:false,
	allowBlank: true,
	editable:false,
	width: 70,
	listWidth: 70,
	resizable:false
}); 		
            
var pageSizeLimit = 25;
var pageSizeLimitFit = false;

pagingCombo.on('select', function (combo, record, index) {
		setGridLimit(record.data.num, 0);
});	                  

pagingComboB.on('select', function (combo, record, index) {
		setGridLimit(record.data.num, 0);
});	                  

function setGridLimit (pageSize, height) {
	var pageSizeLimitOld = pageSizeLimit;
	if (pageSize == text_168)
		pageSizeLimit = 0;
	else
		pageSizeLimit = parseInt(pageSize);
	pageSizeLimitFit = (pageSizeLimit == 0);
	if (pageSizeLimitFit) {
		pageSizeLimit = calcPageSize(height);
	}
	if (pageSizeLimitOld != pageSizeLimit) {
		pagingToolbar.pageSize = pageSizeLimit;
		refreshGrid();   
	}
}	

function refreshGrid() {
	tableStore.reload({params:{start:0, limit:pageSizeLimit}});
}	
   
function calcPageSize(height) {
	var row;          
	var te;
	if (currentColumnDefinitions.data.schreiben == 1)
		te = tableEditor;
	else
		te = tableBrowser;
	row = te.getView().getRow(0);
    if (height == 0)
		height = te.getView().scroller.getHeight();
	var rowHeight;
	if (!row)
		rowHeight = 21;
	else
		rowHeight = Ext.get(row).getHeight();
	var ps = Math.floor(height / rowHeight);
	return (ps > 1 ? ps : 25);
}
  
var pagingToolbar = new Ext.PagingToolbar({    
    id:'myPagingBar_edit',
    store: tableStore,
	autoWidth: true,
	pageSize: 25,
    plugins: [filters],
    displayInfo: true,
    displayMsg: text_156,  		// Datensätze {0} bis {1} von {2}
    emptyMsg: text_155,     	// Leere Tabelle
	afterPageText: text_157,    // of {0}
	beforePageText: text_158,   // Page
	firstText: text_159,   		// First Page
	lastText: text_160,    		// Last Page
	nextText: text_161,    		// next Page
	prevText: text_162,    		// previous Page
	refreshText: text_163   	// refresh
});
                  
var pagingToolbarB = new Ext.PagingToolbar({    
    id:'myPagingBar_browse',
    store: tableStore,
	autoWidth: true,
	pageSize: 25,
    plugins: [filtersB],
    displayInfo: true,
    displayMsg: text_156,  		// Datensätze {0} bis {1} von {2}
    emptyMsg: text_155,     	// Leere Tabelle
	afterPageText: text_157,    // of {0}
	beforePageText: text_158,   // Page
	firstText: text_159,   		// First Page
	lastText: text_160,    		// Last Page
	nextText: text_161,    		// next Page
	prevText: text_162,    		// previous Page
	refreshText: text_163   	// refresh
});
                  
function formatDate(value){  
     return value ? value.dateFormat('d.m.Y') : '';
}

function formatBoolean(aValue, aMetadata, aRecord, aRowInderx, aColIndex, aStore){
	aMetadata.css += ' x-grid3-check-col-td';
	return '<div class="x-grid3-check-col' + (aValue != null && aValue == true ? '-on' : '') + '"> </div>';
}

var tableEditor_sm = new Ext.grid.CheckboxSelectionModel({
	checkOnly:true,
	listeners: {
        beforerowselect : function (sm, rowIndex, keep, rec) {
          	if (this.deselectingFlag && this.grid.enableDragDrop) {
            	this.deselectingFlag = false;
            	this.deselectRow(rowIndex);
            	return this.deselectingFlag;
          	}
	        return keep;
	    }
	}, 
		onMouseDown : function(e, t) {
        if(e.button === 0 ){ 
            e.stopEvent();
            var row = e.getTarget('.x-grid3-row');
            if(row){
                var index = row.rowIndex;
                if(this.isSelected(index)){
                    if (!this.grid.enableDragDrop)
                      this.deselectRow(index);
                    else
                      this.deselectingFlag = true;
                }else{
                    this.selectRow(index, true);
                }
            }
        }
    }
});

editor.on({ 
	scope: this, 
	afteredit: function(roweditor, changes, record, rowIndex) { 
		var newRecord = record.copy();
		newRecord.fields.eachKey(function(key, item) {
			var data = newRecord.get(key);
			if (item.type == 'date') {
				var d = new Date(newRecord.get(key));
				newRecord.set(key, d.dateFormat('d.m.Y'));
			}       
			if (item.type == 'string') {
				newRecord.set(key, data.replace("yahoo.com", "yahoo..com"));
			}
		});
	    Ext.Ajax.request({
		url:'data.php?action=saveData&TabelleID=' + currentColumnDefinitions.data.tab_id, 
		params: newRecord.data,
         	success:function(response, action) {      
				var myRecord = tableStore.getAt(rowIndex);
				var obj = Ext.decode(response.responseText)
				myRecord.set("RecordID", obj.RecordID);
         	},
         	failure: function(form, action) {
                  Ext.MessageBox.alert(text_29, text_56);
         	}
	    });        
	} 
 }); 
   

editor.on('validateedit', function(e, changes, record, index){
	record.fields.eachKey(function(key, item) {
		if (item.type != 'bool') {
			s = Ext.util.Format.stripTags(record.get(key)); 
			if (s != record.get(key)) 
				changes[key] = s;
		}
/*			
		if (item.type == 'string') {
			var s = record.get(key);
			s = s.replace(/\</g,"&lt;");
			if (s != record.get(key)) 
				changes[key] = s;
		}
*/
	});		
	return true;
});

                     
var tableEditor = new Ext.grid.GridPanel({
	id: 'tableEditor', 
	store: tableStore,   
	region: 'center',        
	margins: '0 5 5 5', 
	enableColumnMove:false,
	columns: [new Ext.grid.RowNumberer(),
             tableEditor_sm,
			 { header: '', dataIndex: 'Feld0', width: 100, sizable:true, sortable: true}],
	plugins: [editor, filters],  
	loadMask: true,
	view: gridViewEditor, 
	collapsible: true,
    animCollapse: false,
    sm: tableEditor_sm,
	hideMode: 'offsets', 
    onRender: function() {
    	Ext.grid.GridPanel.prototype.onRender.apply(this, arguments);
    	this.addEvents("beforetooltipshow");
        this.tooltip = new Ext.ToolTip({
        	renderTo: Ext.getBody(),
        	target: this.view.mainBody,
        	listeners: {
        		beforeshow: function(qt) {
        			var v = this.getView();
		            var row = v.findRowIndex(qt.baseTarget);
		            var cell = v.findCellIndex(qt.baseTarget);
		            this.fireEvent("beforetooltipshow", this, row, cell);
        		},
        		scope: this
        	}
        });
    },
	bbar: pagingToolbar,
    tbar: [{
        iconCls: 'add',
        text: text_57,
        handler: function() {
            editor.stopEditing();   
            tableStore.add(new Feld());   
            tableEditor.getView().refresh();
            tableEditor.getSelectionModel().selectRow(tableStore.getCount()-1);
            editor.startEditing(tableStore.getCount()-1);
        }
    },{
        ref: '../removeBtn',
        iconCls: 'cancel',
        text: text_58,
        disabled: true,
        handler: function(){
            var msg;
            var s = tableEditor.getSelectionModel().getSelections();
            if (s.length == 1)
            	msg = text_91;
            else
            	msg = text_92 + s.length + text_93;
            
		    Ext.MessageBox.show({
		           title:text_49,
		           msg: msg,
		           buttons: Ext.MessageBox.YESNO,
		           icon: Ext.MessageBox.QUESTION,
		           fn: function(btn) {
						if (btn == 'yes') {
				            var jsonData = new Array();       
				            for(var i = 0, r; r = s[i]; i++) {
				                jsonData.push(r.data);
				            }
					        jsonData = Ext.encode(jsonData);
					        Ext.Ajax.request({
					            url:'data.php?action=removeRecord',
					            params: {data:jsonData},
					            success:function(responce, action) {
					                var s = tableEditor.getSelectionModel().getSelections();
					                for(var i = 0, r; r = s[i]; i++){
					                    tableStore.remove(r);
					                }
					            },
					            failure: function(form, action) {
					              	Ext.MessageBox.alert(text_29, text_59);
					            }
					        });
						}
				   }
			});
        }
    },{
        iconCls: 'print',
        text: text_0,
        handler: function() {
            var s = tableEditor.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }       
			druckenWindow(currentColumnDefinitions.data.tab_id, currentColumnDefinitions.data.name, Ext.encode(selectedRows));
        }
    },{
        iconCls: 'excel_out',
        text: text_43,
        handler: function() {    
            var s = tableEditor.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			exportWindow(currentColumnDefinitions.data.tab_id, currentColumnDefinitions.data.name, Ext.encode(selectedRows));
        }
    },{
        iconCls: 'etiketten',
        text: text_60,
        handler: function() {      
            var s = tableEditor.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			etikettenWindow(currentColumnDefinitions.data.tab_id, Ext.encode(selectedRows));
        }
    },{
		id: "te_s_email",
        iconCls: 'email',
        text: text_17,
        handler: function() {
            var s = tableEditor.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			emailWindow(currentColumnDefinitions.data.tab_id, Ext.encode(selectedRows));
        }
	},{
		id: "te_s_sms",
        iconCls: 'sms',
        text: text_124,
        handler: function() {
            var s = tableEditor.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			smsWindow(currentColumnDefinitions.data.tab_id, Ext.encode(selectedRows));
        }
	}, '->', {
	    emptyText:text_61,
	    text: 'category filter',    
		id:'filter-tab-edit',
	    xtype: 'textfield',
	    width: 150,
        listeners: {
            specialkey: function(field, e){
                if (e.getKey() == e.ENTER) {
					currentFilter = Ext.getCmp('filter-tab-edit').getValue();
					reloadTableData(currentColumnDefinitions.data.tab_id, Ext.getCmp('filter-tab-edit').getValue(), false, true);
                }
            }
        }
	},{
        iconCls: 'search',
        text: '',
        handler: function() {    
			currentFilter = Ext.getCmp('filter-tab-edit').getValue();
			reloadTableData(currentColumnDefinitions.data.tab_id, Ext.getCmp('filter-tab-edit').getValue(), false, true);
        }
    }],
	listeners: {
		render: function(g) {
			g.on("beforetooltipshow", function(grid, row, col) {
				grid.tooltip.body.update(text_123);
			});
		}
    }
});
       
tableEditor.getBottomToolbar().add([
    '->',                   
	text_166,
	pagingCombo,
	'-', {
    	text: 'Filter löschen',
    	handler: function () {
			if (currentFilter != "") {
				currentFilter = "";
				Ext.getCmp('filter-tab-edit').setValue("");
   				reloadTableData(currentColumnDefinitions.data.tab_id, "", false, tableEditor.filters.getFilterData().length == 0);
			}
			filters.clearFilters();
    	} 
	}, '-'
]);

tableEditor.getSelectionModel().on('selectionchange', function(sm){
    tableEditor.removeBtn.setDisabled(sm.getCount() < 1);
});

tableEditor.on('columnresize', function(columnIndex, newSize) {    
	var feld_id = tableEditor.getColumnModel().getDataIndex(columnIndex);
    Ext.Ajax.request({
		url:'felder.php?action=setWidth&TabelleID=' + currentColumnDefinitions.data.tab_id+"&Breite="+newSize+"&FeldID="+feld_id.substr(4), 
	   	success:function(response, action) {      
	   	},
	   	failure: function(form, action) {
	        Ext.MessageBox.alert(text_29, text_56);
	   	}
    });        
});
      
tableEditor.on('bodyresize', function(panel, width, height) { 
	if (!panel.rendered)
		return;  
	if (pageSizeLimitFit) { 
		setGridLimit(text_168, height-40);
	}
});
  
var tableBrowser_sm = new Ext.grid.CheckboxSelectionModel({
	checkOnly:true,
	listeners: {
        beforerowselect : function (sm, rowIndex, keep, rec) {
          	if (this.deselectingFlag && this.grid.enableDragDrop) {
            	this.deselectingFlag = false;
            	this.deselectRow(rowIndex);
            	return this.deselectingFlag;
          	}
	        return keep;
	    }
	}, 
		onMouseDown : function(e, t) {
        if(e.button === 0 ){ 
            e.stopEvent();
            var row = e.getTarget('.x-grid3-row');
            if(row){
                var index = row.rowIndex;
                if(this.isSelected(index)){
                    if (!this.grid.enableDragDrop)
                      this.deselectRow(index);
                    else
                      this.deselectingFlag = true;
                }else{
                    this.selectRow(index, true);
                }
            }
        }
    }
});

var tableBrowser = new Ext.grid.GridPanel({
	id: 'tableBrowser', 
	store: tableStore,   
	region: 'center',        
	margins: '0 5 5 5',
	columns: [new Ext.grid.RowNumberer(),
             tableBrowser_sm,
			 { header: '', dataIndex: 'Feld0', width: 100, sizable:true, sortable: true}],
	plugins: [filtersB],
	loadMask: true,             
	view: gridViewBrowser,    
	collapsible: true,
    animCollapse: false,
    sm: tableBrowser_sm,
	hideMode: 'offsets', 
	bbar: pagingToolbarB,
	tbar: [{
        iconCls: 'print',
        text: text_0,
        handler: function() {
            var s = tableBrowser.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			druckenWindow(currentColumnDefinitions.data.tab_id, currentColumnDefinitions.data.name, Ext.encode(selectedRows));
        }
    },{
        iconCls: 'excel_out',
        text: text_43,
        handler: function() {      
            var s = tableBrowser.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			exportWindow(currentColumnDefinitions.data.tab_id, currentColumnDefinitions.data.name, Ext.encode(selectedRows));
        }
    },{
        iconCls: 'etiketten',
        text: text_60,
        handler: function() {
            var s = tableBrowser.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			etikettenWindow(currentColumnDefinitions.data.tab_id, Ext.encode(selectedRows));
        }
    },{
		id: "te_l_email",
        iconCls: 'email',
        text: text_17,
        handler: function() {
            var s = tableBrowser.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			emailWindow(currentColumnDefinitions.data.tab_id, Ext.encode(selectedRows));
        }
	},{
		id: "te_l_sms",
        iconCls: 'sms',
        text: text_124,
        handler: function() {
            var s = tableBrowser.getSelectionModel().getSelections();
            var selectedRows = new Array();       
            for(var i = 0, r; r = s[i]; i++) {
	                selectedRows.push(r.get("RecordID"));
            }
			smsWindow(currentColumnDefinitions.data.tab_id, Ext.encode(selectedRows));
        }
	}, '->', {
	    emptyText:text_61,
	    text: 'category filter',    
		id:'filter-tab-browse',
	    xtype: 'textfield',
	    width: 150,
        listeners: {
            specialkey: function(field, e){
                if (e.getKey() == e.ENTER) {
					currentFilter = Ext.getCmp('filter-tab-browse').getValue();
					reloadTableData(currentColumnDefinitions.data.tab_id, Ext.getCmp('filter-tab-browse').getValue(), false, true);
                }
            }
        }
	},{
        iconCls: 'search',
        text: '',
        handler: function() { 
			currentFilter = Ext.getCmp('filter-tab-browse').getValue();
			reloadTableData(currentColumnDefinitions.data.tab_id, Ext.getCmp('filter-tab-browse').getValue(), false, true);
        }
    }]
});
                         
tableBrowser.on('bodyresize', function(panel, width, height) { 
	if (!panel.rendered)
		return;  
	if (pageSizeLimitFit) { 
		setGridLimit(text_168, height-40);
	}
});
  
tableBrowser.getBottomToolbar().add([
    '->',                   
	text_166,
	pagingComboB,
	'-', {
    	text: 'Filter löschen',
    	handler: function () {
			if (currentFilter != "") {
				currentFilter = "";
				Ext.getCmp('filter-tab-browse').setValue("");
   				reloadTableData(currentColumnDefinitions.data.tab_id, "", false, tableBrowser.filters.getFilterData().length == 0);
			}
			filtersB.clearFilters();
    	} 
	}, '-'
]);



