//
// r3finderGrid
// Felix Kosmalla
//
// erbt von r3baseGrid
//
//

var r3finderGrid = Ext.extend(r3baseGrid, {

	// loadStructure
	// 
	// config Objekt
	// 
	loadStructure:function(config){
		Ext.apply(this,config);
		this.backend = config.backendUrl;
		// this.tableName = config.tableName;
		


		Ext.Ajax.request({
			url: this.backend + "Kostenebenen/"+this.ebene+"/getKostenebenenModel",
			success: this.loadTypeAheadStore,
			scope:this,
			method:'POST'
		});
		
		
			

		
		return this;
	},
	
	

	
	
	// startGrid
	// 
	// verarbeitet Ajax Request und initiert die Klasse
	// 
	startGrid:function(response){
		var tableOptions = Ext.util.JSON.decode(response.responseText);




		

		this.init(tableOptions);
		this.eventScope = this.eventScope || this;
		this.onStructureLoaded(this.eventScope);

	},
	
	
	// onStructureLoaded
	// 
	// EVENT
	// 
	onStructureLoaded:function(){
		
	},
	
	
	// onCellclick
	// 
	// EVENT
	// 
	onCellClick:function(e){
		
	},
	
	
	// ==================
	// = MODIFIKATIONEN =
	// ==================
	
	// setToolbarButtons
	// 
	// 
	setToolbarButtons:function(){
		if(Ext.isEmpty(this.toolbarButton)){
			// Standard Toolbar setzen
			this.toolbarButtons = [{
				text:'',
				iconCls:'addIcon',
				handler:this.showAddWindow,
				scope:this			
			},' ',{
				text:'',
				iconCls:'editIcon',
				handler:this.showEditWindow,
				scope:this,
				id:'tbbEdit'
			},' ',
			{
				text:'',
				iconCls:'deleteIcon',
				handler:this.confirmForDeletedLines,
				scope:this,
				id:'tbbDelete'
			}]
			
			
		}
		

	},
	
	// setButtonGrid
	// 
	// 
	setButtonGrid:function(){
		this.buttonGrid = {
			layout:'border',
			border:false,
			
			items:[{
				region:'north',
				height:30,
				border:false,
				// title:'test',
				header:false,
				tbar:this.toolbarButtons
				// iconCls: this.windowIconCls
				
			},
			{
				region:'center',
				id:'grid_view',
				items: this.grid,
				border:false,
				autoScroll:true

			}]
		};
		
		
	},
	
	
	// setDataProxy
	// 
	// NOCH NICHT MODIFIZIERT
	setDataProxy:function(params){
		var params = params || {};
		
		if(Ext.isEmpty(params.method)){
			params.method = 'POST';
		}

		if(Ext.isEmpty(params.url)){
			params.url = this.backend + "Kostenebenen/"+this.parent_id+"/"+this.kostenstruktur+"/getEintraege";
		}
		

		
		this.dataProxy = new Ext.data.HttpProxy(params);		
	},
	
	
	//setGrid
	setGrid:function(params){
		var params = params || {};
		
		if(Ext.isEmpty(params.store)){
			params.store = this.dataStore;
		}
		
		if(Ext.isEmpty(params.cm)){
			params.cm = this.colModel;
		}
		
		params.border = false;
		params.hideHeaders = true;
		
				
		this.grid = new Ext.grid.GridPanel(params);
	},
	
	// registerGridEvents
	// 
	// 
	registerGridEvents:function(){
		// this.grid.on('celldblclick',function(){

		// 	this.showEditWindow();			
		// },this);
		
		this.grid.on('cellclick',function(grid, cellRow, colRow, e){
			Ext.getCmp('tbbEdit').enable();
			Ext.getCmp('tbbDelete').enable();
			
			this.onCellClick(grid, cellRow, colRow, e, this.eventScope);
		},this);	
	
	},
	
	
	
	// compileEditPanelItems
	// 
	// modifiziert die Konfiguration this.editPanelOptions
	// 
	compileEditPanelItems:function(){
		this.editPanelOptions.items = [];
		
		Ext.each(this.fields,function(item, index){


			item.editOptions.xtype = 'textfield';
			
			if(Ext.isEmpty(item.editOptions.fieldLabel)){
				item.editOptions.fieldLabel = item.label;
			}
			
			if(Ext.isEmpty(item.editOptions.name)){
				item.editOptions.name = item.column;
			}
			
			if(item.isIndex){
				item.editOptions.isIndex = true;
			}
			

			//Booleanwerte die nicht von YML interpretiert werden können müssen hier neu gesetzt werden
			
			if(item.editOptions.allowBlank == "false"){
				item.editOptions.allowBlank = false;
			}else{
				item.editOptions.allowBlank = true;
			}
			
			
			if(item.modelOptions.hidden){
				item.editOptions.hidden = true;
				item.editOptions.hideLabel = true;
			}
			
			
			/*
				TODO Combobox mit TypeAhead, ging nicht, hat sich gedoppelt
			*/
			// Sonderfall für _die_ Combobox mit typeAhead // wenns mehr werden, wirds äkelisch
			// if(item.column == 'name'){
			// 	item.editOptions.xtype = 'combo';
			// 	item.editOptions.id = 'autoTextfieldedit';
			// 	item.editOptions.triggerAction = 'all';
			// 	item.editOptions.store = this.typeAheadStore;
			// 	item.editOptions.mode = 'local';
			// 	item.editOptions.displayField = 'name';
			// 	item.editOptions.valueField = 'name';
			// 	
			// }
		
			this.editPanelOptions.items.push(item.editOptions);				
			
		},this);
		
		
		
	},
	
	
	
	
	
	// compileAddPanelItems
	// 
	// modifiziert die Konfiguration this.addPanelOptions
	// 
	compileAddPanelItems:function(){
		this.addPanelOptions.items = [];
		
		Ext.each(this.fields,function(item, index){
			
			item.addOptions.xtype = 'textfield';
			
			
			if(Ext.isEmpty(item.addOptions.fieldLabel)){
				item.addOptions.fieldLabel = item.label;
			}
			
			if(Ext.isEmpty(item.addOptions.name)){
				item.addOptions.name = item.column;
			}
			
			if(item.isIndex){
				item.addOptions.isIndex = true;
			}
			
			
			//Booleanwerte die nicht von YML interpretiert werden können müssen hier neu gesetzt werden
			
			if(item.addOptions.allowBlank == "false"){
				item.addOptions.allowBlank = false;
			}else{
				item.addOptions.allowBlank = true;
			}
			
			
			if(item.modelOptions.hidden){
				item.addOptions.hidden = true;
				item.addOptions.hideLabel = true;
			}
			
			
			
			// Sonderfall für _die_ Combobox mit typeAhead // wenns mehr werden, wirds äkelisch
			// if(item.column == 'name'){
			// 	item.addOptions.xtype = 'combo';
			// 	item.addOptions.id = 'autoTextfieldAdd';
			// 	item.addOptions.triggerAction = 'all';
			// 	item.addOptions.store = this.typeAheadStore;
			// 	item.addOptions.mode = 'local';
			// 	item.addOptions.displayField = 'name';
			// 	item.addOptions.valueField = 'name';
			// }
		
			
			this.addPanelOptions.items.push(item.addOptions);
		},this);
	},
	
	
	
	// resetAddPanel
	// 
	// löscht alle Werte im AddPanel
	//
	resetAddPanel:function(){
		var items = this.addPanel.items.items;

		
		Ext.each(items,function(item, index){
			
			var field = this.getFieldByName(item.name);
			
			switch(field.column){
			case "name":
				// item.setValue('');
				break;
			
			case "position":
				item.setValue('');
				break;
			
			case "elternelement":
				item.setValue(this.parent_id);
				break;
			
			case "kostenebene":
				item.setValue(this.ebene);
				break;
				
			case "kostenstruktur":
				item.setValue(this.kostenstruktur);
				break;
			}
		
		
		},this);
	},
	
	
	loadTypeAheadStore:function(structureResponse){
		
		// Ext.Ajax.request({
		// 	
		// 	
		// 	url: this.backend +"Kostenebenen/"+this.parent_id+"/"+this.kostenstruktur+"/getTypeAhead",
		// 	method:'POST',
		// 	scope:this,
		// 	success: function(response){
		// 		// requestCount++;
		// 		// SimpleStore für Combobox erstellen
		// 		var crudData = Ext.util.JSON.decode(response.responseText);
		// 		
		// 		this.typeAheadStore = new Ext.data.SimpleStore(crudData);				
		// 		
		// 		
		// 		this.startGrid(structureResponse);
		// 		
		// 
		// 	}
		// });
		
		this.startGrid(structureResponse);
		
		
		
	},
	
	
	
	//setColModel
	//
	setColModel:function(params){
		this.colModel = new Ext.grid.ColumnModel(this.model);	
		

		
		Ext.each(this.fields,function(item, index){
			if(this.ebene != rcm.Application.Kostenebenen.jsonEbenen[rcm.Application.Kostenebenen.jsonEbenen.length-1].id){
				this.colModel.setRenderer(index,function(value,cell){
					// console.log('cell',cell);
					cell.css = 'finderGridCell';


					return value;
				});
				
			}
		},this);
		
		// this.colModel.setRenderer(9,this.renderer.getRenderer(field));
	},
	
	
	
	
	// sendDeleteRequest
	// 
	// Löscht den Eintrag in der Datenbank
	// 
	sendDeleteRequest:function(btn){
		if(btn=='yes'){
		
		
		var selections = this.grid.selModel.getSelections();
		var entries = [];
		for(i = 0; i< this.grid.selModel.getCount(); i++){
			var sel = selections[i].json;
			var indexCol = this.getNameOfIndexColumn();
			entries.push(eval("sel."+indexCol));
		}
		var encoded_array = Ext.encode(entries);
		
		
		Ext.Ajax.request({
			method:'post',
			waitMsg:'Bitte warten..',
			scope:this,
			url:cfg_backend_url + "kostenebenen/checkKostenebeneIsEmpty",
			params:{
				ebenenIds: encoded_array 
			},
			success:function(response){

				if(response.responseText=='1'){
				
						// var selections = this.grid.selModel.getSelections();
						// 		var entries = [];
						// 		for(i = 0; i< this.grid.selModel.getCount(); i++){
						// 			var sel = selections[i].json;
						// 			var indexCol = this.getNameOfIndexColumn();
						// 			entries.push(eval("sel."+indexCol));
						// 		}
						// 		var encoded_array = Ext.encode(entries);

						Ext.Ajax.request({  
							waitMsg: 'Bitte warten',
							url: this.backend + this.tableName +  '/Data/delete', 
							scope:this,
							params: { 
								task: "DELETE", 
								ids:  encoded_array,
								index: this.getNameOfIndexColumn()
							}, 
							success: function(response){
								var result=eval(response.responseText);
								switch(result){
									case 1:  // Success : simply reload
									this.dataStore.reload();  
									break;
									default:
									Ext.MessageBox.alert('Warnung','Es konnten nicht alle Datensätze gelöscht werden.');
									break;
								}
							},
							failure: function(response){
								var result=response.responseText;
								Ext.MessageBox.alert('Fehler','Es konnte keine Verbindung zur Datenbank aufgebaut werden.');      
							}
						});
					
					
				}else{
					Ext.MessageBox.alert('Fehler','Die zu löschende Kostenebene ist nicht leer');
					Ext.MessageBox.setIcon(Ext.MessageBox.WARNING);
				}
				
				
				
				
			}
			
			
		});
	}
		
	}
	
	
	

	


	
});
