/**
 * Kostenebenen
 * 2008-09-01
 * @author Felix Kosmalla
 */


var kostenebenen = new fClass({
	
	// =============
	// = Variablen =
	// =============
	
	jsonEbenen:null,
	ebenen:null,
	view:null,
	
	table:null,
	
	kostenstruktur:1,
	
	
	
	// ======================
	// = private Funktionen =
	// ======================

	buildView:function(){
		
		this.ebenenPanel = new Ext.Panel({
			region:'center',
			title:'test',
			header:false,
			border:false,
			hidden:true,
			id:'ebenenPanel'

		});
		
		
		this.view = new Ext.Panel({
			title:'Kostenebenen & Strukturen',
			border:false,
			layout:'border',
			header:false,
			autoScroll:true,
			items:[
			{
				region:'center',
				title:'Kostenebenen & Kostenstrukturen',
				iconCls:'winKostenebenen',
				// collapsible:true,
				// height:155,
				border:false,
				id:'KostenstrukturenRegion',
				layout:'fit',
				split:true
			// },
			}
			
			
			// {
			// 	layout:'column',
			// 	region:'center',
			// 	items:this.ebenen,
			// 	border:false,
			// 	hidden:true,
			// 	title:'Ausgewählte Kostenstruktur: ',
			// 	id:'kosteneintraegePanel'
			// 
			// 	
			// }
			
			
			// this.ebenenPanel
			
			]
			

		});
		
		
		this.view.on('render',function(){  // Wenn die Spalten gerendert sind, dann lade Daten für die erste Ebene

			
			//Kostenstrukturen laden
			this.loadKostenstrukturenTable();
			
				
			
		},this);
		
		
		
		
		this.onViewBuilt();
		
	},
	
	
	loadKostenstrukturenTable:function(){
		var remoteConfig = {
								backendUrl: cfg_backend_url, 
								tableName: 'bcm_kostenstrukturen',
								onStructureLoaded: function(scope){

									scope.kostenstrukturenTable.load();
									Ext.getCmp('KostenstrukturenRegion').add(scope.kostenstrukturenTable.buttonGrid);
									Ext.getCmp('KostenstrukturenRegion').doLayout();		
		

								},
								onCellClick:function(grid, cellRow, colRow, e, scope){
												
									
								},
								
								eventScope:this
							}
		this.kostenstrukturenTable = new rcmKostenstrukturGrid().loadStructure(remoteConfig);
	},


	// getColumnIndexByEbenenId
	// 
	// 
	getColumnIndexByEbenenId:function(ebenen_id){
		var returner = null;
		
		Ext.each(this.jsonEbenen,function(item,index){
			if(item.id == ebenen_id){
				returner = index;
			}
		},this);
		
		return returner;
	},
	

	// loadEbenenEintraege
	// 
	// lädt die Einträge aus der DB, erstellt die Tabelle und legt diese in die gewählte Spalte ab
	// 
	loadEbenenEintraege:function(parent_id,ebene_id){
		// tabelle löschen die sich in der Spalte befindet
		/*
			TODO autoDestroy wegen Speicher?
		*/
		
		
		var ebene = Ext.getCmp('ebene_'+ebene_id);
		
		if(!Ext.isEmpty(ebene.items)){
			ebene.remove(ebene.getComponent(0));
			ebene.doLayout();			
		}
				

		// var parent_id = parent_id || 0;
		// var ebene_id = ebene_id || false;
		
		// Ext.MessageBox.progress('Ladevorgang');
		Ext.MessageBox.updateProgress(0.5);
		var remoteConfig = {
								backendUrl: cfg_backend_url, 
								ebene: ebene_id,
								parent_id: parent_id,
								kostenstruktur: this.kostenstruktur,
								onStructureLoaded: function(scope){
									var table = eval("scope.table_"+ebene_id);
									table.load();
									ebene.add(table.buttonGrid);
									ebene.doLayout();		
									scope.view.doLayout();						
									

									// Ext.MessageBox.updateProgress(0.7);
								},
								onCellClick:function(grid, cellRow, colRow, e, scope){
									var selections = grid.getSelectionModel().getSelections();
									
									// Kind Ebene rausfinden
									var ebeneIndex = scope.getColumnIndexByEbenenId(ebene_id);   	// id der jetzigen Ebene im jsonEbenen
									
									if(selections.length ==  1 && (ebeneIndex+1 != scope.jsonEbenen.length)) // Wenn nur ein Eintrag ausgewählt ist, der sich nicht in der letzten Ebene fallustiert
									{										
										var childEbene = scope.jsonEbenen[ebeneIndex + 1].id;

										// alle Kind Spalten leeren und verstecken
										Ext.each(scope.jsonEbenen, function(item,index){
											if(index>ebeneIndex){
												var delEbene = Ext.getCmp('ebene_'+this.jsonEbenen[index].id);
												if(!Ext.isEmpty(delEbene.items)){
													delEbene.hide();
													delEbene.remove(delEbene.getComponent(0));													
												}

											}
										},scope);
										
										
										Ext.getCmp('ebene_'+childEbene).show();
										var selection = selections[0].json;

										scope.loadEbenenEintraege(selection.id,childEbene);
									}								
									
								},
								eventScope:this
							}
							
		eval("this.table_"+ebene_id+" = new r3finderGrid().loadStructure(remoteConfig);");					
					
		// this.table = new r3finderGrid().loadStructure(remoteConfig);

		// ende test
	},
	
	
	getColumns:function(){
		return;
		Ext.Ajax.request({
			url: cfg_backend_url + 'Kostenebenen/'+this.kostenstruktur+'/getLabels',
			success: function(response){
				this.jsonEbenen = Ext.util.JSON.decode(response.responseText);
				if(this.jsonEbenen.length == 0){
					Ext.MessageBox.confirm('Fehler','Diese Kostenstrutktur enthält noch keine Ebenen. Jetzt Ebenen anlegen?',function(res){
						if(res == 'yes'){
							this.kostenstrukturenTable.editSelectedLine();
						}
					},this)
				}else{
					this.buildColumns();					
				}

			},
			method:'post',
			scope:this
		});
	},
	
	
	buildColumns:function(){
		this.ebenen = new Array();
		
		Ext.each(this.jsonEbenen,function(ebene){
			var ebene = new Ext.Panel({
				title:ebene.name,
				id:'ebene_'+ebene.id,
				ebeneId:ebene.id,
				width:175,
				height:500,
				hidden:'true',
				border:false,
				layout:'fit'	
			});
			this.ebenen.push(ebene);
		},this);
		
		
		if(!Ext.isEmpty(this.ebenenPanel.items)){
			this.ebenenPanel.remove(this.ebenenPanel.getComponent(0));			
		}

		
		// if(Ext.isEmpty(this.columnPanel)){
			this.columnPanel = new Ext.Panel({
				layout:'column',
				autoScroll:true,

				title:"Kostenstruktur: <strong>"+this.kostenstrukturName+"</strong>",
				items:this.ebenen
			});
		// }
		
		
		this.ebenenPanel.add(this.columnPanel);
		
		this.ebenenPanel.doLayout();
		

		
		// erste Ebene anzeigen			
		Ext.getCmp('ebene_'+this.jsonEbenen[0].id).show();			
		
		// Daten der ersten Ebene laden
		this.loadEbenenEintraege(0,this.jsonEbenen[0].id);		
		
		this.ebenenPanel.show();
		
		// Ext.getCmp('ebenenPanel').setTitle('teststsetset');
		
	},
	
	// ==========================
	// = öffentliche Funktionen =
	// ==========================
	
	

	
	
	init:function(){

		this.buildView();
		
		// this.getColumns();
		
		return this;
	},
	
	
	
	// ==========
	// = Events =
	// ==========
	
	onViewBuilt:function(){
		
	}
	
});







// registrieren
// rcm.kostenebenen = new kostenebenen();
