// rcm.datenbestaendeGrid.class.js
// 
// kann sichern, wiederherstellen
// 
var datenbestaendeGrid = Ext.extend(r3remoteGrid,{
	
	
	// setToolbarButtons
	// 
	// 
	setToolbarButtons:function(){
		if(Ext.isEmpty(this.toolbarButtons)){
			// Standard Toolbar setzen
			this.toolbarButtons = [{
				text:'Eintrag hinzufügen',
				iconCls:'addIcon',
				handler:this.showAddWindow,
				scope:this			
			},{
				text:'Eintrag bearbeiten',
				iconCls:'editIcon',
				handler:this.showEditWindow,
				scope:this,
				id:'tbbEdit'
			},
			{
				text:'ausgwählte Einträge löschen',
				iconCls:'deleteIcon',
				handler:this.confirmForDeletedLines,
				scope:this,
				id:'tbbDelete'
			},
			{
				text:'sichern',
				handler:this.backupSelectedDatenbestand,
				scope:this,
				iconCls:'saveDb'
			},
			{
				text:'alle sichern',
				handler:this.backupAllDatenbestaende,
				scope:this,
				iconCls:'saveMultipleDb'
			},
			{
				text:'wiederherstellen',
				handler:this.restoreDatenbestand,
				scope:this,
				iconCls:'restoreDb'
			},
			{
				text:'kopieren',
				handler:this.copyDatenbestand,
				scope:this,
				iconCls:'copyDb'
			}
			
			]
			
			
		}
		

	},
	
	
	backupAllDatenbestaende:function() {
		Ext.MessageBox.wait('Bitte warten..',false,waitDialogConfig);
		
		Ext.Ajax.request({
			method:'post',
			url:cfg_backend_url + "datenbestand/json/backupAllDatenbestaende",
			scope:this,

			success:function(response){
				Ext.MessageBox.hide();
				var res = Ext.util.JSON.decode(response.responseText);

				if(res.errors != null){
					Ext.MessageBox.alert('fehler');
				}else{
					window.location = cfg_backend_url + res.downloadLocation;
					
				}
			}
		});
	},
	
	
	// backupSelectedDatenbestand
	// 
	// 
	// 
	backupSelectedDatenbestand:function(){
		var selections = this.grid.selModel.getSelections();

		Ext.MessageBox.wait('Bitte warten..',false,waitDialogConfig);
		
		if(selections.length >1){
			Ext.MessageBox.alert('Fehler','Es darf nur ein Datenbestand ausgewählt werden.');
			Ext.MessageBox.setIcon(Ext.MessageBox.WARNING);
			
		}
		
		if(selections.length ==0){
			Ext.MessageBox.alert('Fehler','Es muss ein Datenbestand ausgewählt werden.');
			Ext.MessageBox.setIcon(Ext.MessageBox.WARNING);
			
		}
		
		
		
		if(selections.length == 1){
			Ext.Ajax.request({
				method:'post',
				url:cfg_backend_url + "datenbestand/json/backupDatenbestand/" + selections[0].json.id,
				scope:this,

				success:function(response){
					Ext.MessageBox.hide();
					var res = Ext.util.JSON.decode(response.responseText);

					if(res.errors != null){
						Ext.MessageBox.alert('fehler');
					}else{
						window.location = cfg_backend_url + res.downloadLocation;
						
					}
				}
			});
		}		
	},
	
	restoreDatenbestand: function() {
		if(Ext.isEmpty(this.resoreWindow)){
			this.restorePanel = new Ext.FormPanel({
		        // renderTo: 'fi-form',
				url:cfg_backend_url,

				buttonAlign:'right',
				// 	        width: 372,
				// height:175,
		        // frame: true,
				fileUpload:true,

				header:false,
		        // autoHeight: true,
		        bodyStyle: 'padding: 10px 10px 0 10px;',
		        labelWidth: 150,
		        defaults: {
		            anchor: '95%',
		            allowBlank: false,
		            msgTarget: 'side'
		        },
		        items: [
				{
		            xtype: 'fileuploadfield',
		            emptyText: 'Sicherung auswählen',
		            fieldLabel: 'Sicherung',
		            name: 'userfile',
					validateOnBlur:false,
		            buttonCfg: {
		                text: '',
		                iconCls: 'driveIcon'
		            }
		        }],
		        buttons: [{
		            text: 'Wiederherstellen',
					scope: this,
		            handler: function(){

		                if(this.restorePanel.getForm().isValid()){

							this.restorePanel.getForm().submit({
								url: cfg_backend_url + 'datenbestand/json/restoreDatenbestand',
								waitMsg: 'Sicherung wird hochgeladen und verarbeitet...',
								scope:this,
								success: this.restoreResponse,
								failure: this.restoreResponse
							});








		                }


		            }
		        }]
		    });

			this.restoreResponse = function(resp,o){
				var response = Ext.util.JSON.decode(o.response.responseText);
				if(response.errors == null){

					this.dataStore.reload();
					this.restoreWindow.hide();
					rcm.Application.loadCombostores();
				}
			}

			this.restoreWindow = new Ext.Window({
				modal:true,
				width:400,
				height:250,
				layout:'fit',
				title:'Datenbestand wiederherstellen',
				items:this.restorePanel,
				closeAction:'hide'
			});
			
		}
		
		this.restoreWindow.show();
	},
	
	
	copyDatenbestand:function(){
		var selections = this.grid.selModel.getSelections();
		
		if(selections.length > 1){
			Ext.MessageBox.alert('Fehler','Es darf nur ein Datenbestand ausgewählt werden.');
			Ext.MessageBox.setIcon(Ext.MessageBox.WARNING);
			
		}
		
		if(selections.length ==0){
			Ext.MessageBox.alert('Fehler','Es muss ein Datenbestand ausgewählt werden.');
			Ext.MessageBox.setIcon(Ext.MessageBox.WARNING);
		}
		
		
		if(selections.length == 1){
			Ext.MessageBox.prompt('Datenbestand kopieren','Bitte geben Sie den Namen für den neuen Datenbestand ein',function(resp, text){
				if(resp=='ok'){
					Ext.MessageBox.wait('Bitte warten..','Datenbestand wird kopiert',false,waitDialogConfig);
					Ext.Ajax.request({
						url:cfg_backend_url + "datenbestand/json/copyDatenbestand/"+selections[0].json.id,
						method:'POST',
						scope:this,
						waitMsg:'Bitte warten..',
						params:{
							name:text
						},
						success:function(res){
							Ext.MessageBox.hide();
							var res = Ext.util.JSON.decode(res.responseText);
							if(res.errors != null){
								Ext.MessageBox.alert('fehler');
								
							}else{
								this.dataStore.reload();
								
								rcm.Application.loadCombostores();
							}
						}
					});
					
				}
				

			},this,false,selections[0].json.name + ' (Kopie)');
		}
		
		
	},
	
	
	// 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 go = true;
			// überprüfen ob der z. Zt. ausgewählte Datenbestand gelöscht werden soll
			Ext.each(entries,function(entry){
				if(entry == rcm.Application.state.datenbestand.id){
					go = false;
					Ext.MessageBox.alert('Warnung','Der aktive Datenbestand kann nicht gelöscht werden');
					Ext.MessageBox.setIcon(Ext.MessageBox.WARNING);
				}
			});
			
			
			if(go){
				var encoded_array = Ext.encode(entries);

				Ext.Ajax.request({  
					waitMsg: 'Please Wait',
					url: this.backend + "datenbestand/delete/" + this.tableName, 
					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();  
							rcm.Application.loadCombostores();
							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.');      
					}
				});
				
			}
			
		}
	},
	
	
	
	// createEntry
	// 
	// wird i.d.R. von dem Speichern Button aufgerufen (createAddPanelButtons)
	//
	// Schickt alles Werte der (Text)Felder im addPanel an den Server
	createEntry:function(){

		var values = this.getAddFieldsValues();
		
		
		Ext.Ajax.request({   
				        waitMsg: 'Bitte warten...',
				        url: this.backend + this.tableName + "/Data/create",
				        params: {
				          task: "ADD",
				          values:   Ext.util.JSON.encode(values)
				        }, 
						scope:this,
				        success: function(response){              
				          var result=eval(response.responseText);
				          switch(result){
				          case 1:
				            // Ext.MessageBox.alert('OK','Eintrag hinzugefügt');
				            this.dataStore.reload();
							this.resetAddPanel();	
							this.addWindow.hide();	
							rcm.Application.loadCombostores();
				            break;
				          default:
				            Ext.MessageBox.alert('Fehler','Eintrag nicht hinzugefügt');
				            break;
				          }        
				        },
				        failure: function(response){
				          var result=response.responseText;
				          Ext.MessageBox.alert('error','could not connect to the database. retry later');          
				        }                      
				      });

	}
	
	
	
	
});
