//
// rcmKostenstrukturEintraegeGrid
// Felix Kosmalla
//
// Enthält die einzelnen Ebenen einer Struktur und lagert in der Kostenstruktur Grid
//
// Tabelle im Edit Panel der Kostenstruktur
// 
// erbt von r3remoteGrid
//
//

var rcmKostenstrukturEintraegeGrid = Ext.extend(r3remoteGrid, {
	

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



		Ext.Ajax.request({
			url: this.backend + "kostenebenen/checkKostenstrukturIsEmpty",
			scope:this,
			method:'POST',
			params: {
				ebenenIds: Ext.encode( new Array(this.kostenstruktur) )
			},
			success: function(response){
				var result = response.responseText;
				if(result == 0){

					tableOptions.disableButtons = true;
				}
				this.init(tableOptions);
				this.onStructureLoaded(this.eventScope);
			}
		});






		
		
		

	},
	

	
	
	// setDataProxy
	// 
	// 
	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.kostenstruktur+"/getStrukturEintraege";
		}
				
		this.dataProxy = new Ext.data.HttpProxy(params);		
	},
	
	
	// 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.r3type){
				case "select_many":
					//alle boxen demarkieren
					var dataStore = this.multiStoresRaw[field.fTable+'_'+field.fTableLabel];
					for( var box in dataStore ) {

						var cb_id = "cb_add_"+field.fTable+'_'+field.fTableLabel+'_'+box;
						Ext.getCmp(cb_id).setValue(false);							
					}

				break;
				case "select_one_radio":
					//alle radios demarkieren
					var dataStore = this.multiStoresRaw[field.fTable+'_'+field.fTableLabel];
					for( var box in dataStore ) {
						var rd_id = "rd_add_"+field.fTable+'_'+field.fTableLabel+'_'+box;
						Ext.getCmp(rd_id).setValue(false);							
					}

				break;
				default:
					item.setValue('');				
				break;
			}

			switch(item.name){
				case "kostenstruktur":
					item.setValue(this.kostenstruktur);
					item.disable();
					break;

			}
			

			
			

		},this);
	},
	
	
	
	// compileEditPanelItems
	// 
	// modifiziert die Konfiguration this.editPanelOptions
	// 
	compileEditPanelItems:function(){
		this.editPanelOptions.items = [];
		
		Ext.each(this.fields,function(item, index){

			if(Ext.isEmpty(item.editOptions.xtype)){
				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;
			}
			
			
			//Combobox abhandlung
			if(item.r3type=='combo'){
				var store = this.multiStores[item.fTable+'_'+item.fTableLabel];

				item.editOptions.store = store;
				item.editOptions.mode = 'local';
				item.editOptions.triggerAction = 'all';
				item.editOptions.displayField = item.fTableLabel;
				item.editOptions.valueField = 'id';
				item.editOptions.disabled = true;
			}
			

			if(item.r3type=='select_many'){
				item.editOptions.xtype = 'checkboxgroup';
				var checkboxen = new Array();
				var dataStore = this.multiStoresRaw[item.fTable+'_'+item.fTableLabel];
				for( var box in dataStore ) {
					checkboxen.push({boxLabel: dataStore[box], id:'cb_edit_'+item.fTable+'_'+item.fTableLabel+'_'+box, inputValue:box});
				}				
				item.editOptions.columns = 2;
				item.editOptions.vertical = true;
				item.editOptions.cls = 'r3checkBox';
				item.editOptions.items = checkboxen;

			}
			
			
			if(item.r3type == 'select_one_radio'){
				item.editOptions.xtype = 'radiogroup';
				var radios = new Array();
				var dataStore = this.multiStoresRaw[item.fTable+'_'+item.fTableLabel];
				for( var radio in dataStore){
					radios.push({boxLabel: dataStore[radio], name:'rd_edit'+item.fTable+'_'+item.fTableLabel, id:'rd_edit_'+item.fTable+'_'+item.fTableLabel+'_'+radio, inputValue:radio});
				}
				
				item.editOptions.columns = 2;
				item.editOptions.vertical = true;
				item.editOptions.cls = 'r3checkBox';
				item.editOptions.items = radios;
			}
			
			
			
			
			//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;
			}
			
			
			
			this.editPanelOptions.items.push(item.editOptions);
		},this);
		

	},
	
	
	
	// 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({
				url: this.backend + "kostenebenen/checkKostenstrukturIsEmpty",
				scope:this,
				method:'POST',
				params: {
					ebenenIds: Ext.encode( new Array(this.kostenstruktur) )
				},
				success: function(response){
					var result = response.responseText;
					if(result == 1){
						Ext.Ajax.request({  
							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 Kostenebene ist nicht leer');
					}
				}
				
				
			});
		}
	},
	
	
	
	
	// createEditPanel
	//
	// siehe createAddPanel
	//	
	createEditPanel:function(params){


		
		
		var params = params || {};
		
		if(Ext.isEmpty(params.labelAlign)){
			params.labelAlign = 'left';
		}
		
		if(Ext.isEmpty(params.bodyStyle)){
			params.bodyStyle = 'padding:5px';
		}
		

		
		Ext.each(params.items,function(item, index){
			if(item.name == 'position'){
				params.items[index].validator = function(value){
				
					
					// Namen rausfinden
					// form panel
					// var fp = this.
					for(var input in this.ownerCt.items.items){
						input = this.ownerCt.items.items[input];
						// if(input.name == 'id'){
						// 	var entryId = input.getValue();
						// }
						
						if(input.name == "id"){
							var bzggIdAusDb = input.getValue();
						}
						
						if(input.name == 'name'){
							var bzggNamePerInput = input.getValue();
						}
					}
					


					var indexByPosition = rcm.Application.Kostenebenen.kostenstrukturenTable.editKostenebenenGrid.dataStore.findBy( function(r){  return r.get('position') == value;  }  );
					var recordByPositionIndex = rcm.Application.Kostenebenen.kostenstrukturenTable.editKostenebenenGrid.dataStore.getAt(indexByPosition);
					
					


					if(indexByPosition !=-1 && parseInt(recordByPositionIndex.data.id) != bzggIdAusDb){
						return "Diese Positionsnummer ist schon vergeben";
					}else{
						return true;
					}
					
				}
			}
		});
		
		if(Ext.isEmpty(params.buttons)){
			params.buttons = this.createEditPanelButtons();
		}
		
		if(Ext.isEmpty(params.labelWidth)){
			params.labelWidth = 175;
		}
		
		

		
		
		params.defaults = {width:300};
		


		this.editPanel = new Ext.FormPanel(params);	

	},
	
	
	
	//createAddPanel
	//
	// erstellt das AddPanel und legt es unter this.addPanel ab
	//
	createAddPanel:function(params){

		var params = params || {};
		
		if(Ext.isEmpty(params.labelAlign)){
			params.labelAlign = 'left';
		}
		
		if(Ext.isEmpty(params.bodyStyle)){
			params.bodyStyle = 'padding:5px';
		}
		
		Ext.each(params.items,function(item, index){
			if(item.name == 'position'){
				params.items[index].validator = function(value){
					var idPerPosition = rcm.Application.Kostenebenen.kostenstrukturenTable.editKostenebenenGrid.dataStore.findBy( function(r){  return r.get('position') == value;  }  );
					if(idPerPosition != -1){
						return "Diese Positionsnummer ist schon vergeben";
					}else{
						return true;
					}
				}
			}
		});
		
		if(Ext.isEmpty(params.buttons)){
			params.buttons = this.createAddPanelButtons();
		}
		
		
		if(Ext.isEmpty(params.labelWidth)){
			params.labelWidth = 175;
		}
		
		
		
		params.defaults = {width:300};
		
		
		this.addPanel = new Ext.FormPanel(params);
	}



	
});
