// monatskostenuebersicht
// 
// 
// 
var monatskostenuebersicht =  new fClass({
	
	
	// =============
	// = Variablen =
	// =============
	
	view: 			null,
	container: 		null,
	comboStores: 	null,
	gridComponents: null,
	grid: 			null,
	state: 			new Object(),
	stateRaw: 		new Object(),
	wasStarted: 	false,
	
	
	// ======================
	// = private Funktionen =
	// ======================
	
	changeRelation:function(rel){
		
		if(this.wasStarted){
				
			
			var lastOptions = this.gridComponents.store.lastOptions.params();

			
			if(Ext.getCmp('rd_absolut').getValue() == true){
				// absolut
				lastOptions.einheit = 'absolute';
				
			}else{
				// relativ
				lastOptions.einheit = 'relative';				
			}
			
			
			this.requestOptions.abweichung = lastOptions.abweichung;
			

			this.gridComponents.store.reload(lastOptions);
			
			
		}
		
		
	},
	
	
	
	buildView:function(){		
		var jahreAnzahl = 4;
		

		var folgeJahreDaten = new Array();
		
		for (var i=0; i < jahreAnzahl + 1; i++) {
			var tmp = new Array();
			tmp.push(i);
			folgeJahreDaten.push(tmp);
		};
		
		
		this.folgeJahre = new Ext.data.SimpleStore({
			fields:['jahr'],
			data:folgeJahreDaten
		});
		
		
		
		this.tbar = new Ext.FormPanel({
			border:false,
			head:false,
			id:'maskeMonatsskostenuebersicht',
			bodyStyle:'padding:4px',
			items:{
	            layout:'column',
				border:false,
				defaults:{
					border:false
				},
	            items:[{
	                columnWidth:.3,
	                layout: 'form',
					
	                items: [{
	                    xtype:'combo',
	                    fieldLabel: 'Institut',
						store:rcm.Application.multiStores['bcm_institute_name'],
						triggerAction:'all',
						editable:false,
						mode:'local',
						valueField:'id',
						displayField:'name',
	                    name: 'institut',
	                    anchor:'95%',
						allowBlank:false,
						id:'institut'
					},
					{
	                    xtype:'combo',
	                    fieldLabel: 'Kostenebene',
						store:rcm.Application.multiStores['bcm_kostenebenen_name'],
						triggerAction:'all',
						mode:'local',						
						editable:false,
						valueField:'id',
						displayField:'name',
	                    name: 'kostenebene',
	                    anchor:'95%',
						allowBlank:false,
						id:'kostenebene',
						value:rcm.Application.getIdOfFirstItemInMultiStore(rcm.Application.multiStores['bcm_kostenebenen_name'])
	                }
					]
	            },{
	                columnWidth:.3,
	                layout: 'form',
	                items: [{
		                xtype:'combo',
		                fieldLabel: 'Jahr',
						store:rcm.Application.multiStores['bcm_kostendaten_jahre_jahr'],
						triggerAction:'all',
						editable:false,
						mode:'local',
						valueField:'id',
						displayField:'jahr',
		                name: 'jahr',
		                anchor:'95%',
						allowBlank:false,
						id:'jahr',
						value:rcm.Application.getIdOfFirstItemInMultiStore(rcm.Application.multiStores['bcm_kostendaten_jahre_jahr'])
		            }]
	            },
				{
	                columnWidth:.3,
	                layout: 'form',
					labelWidth:150,
	                items: new Ext.form.RadioGroup({
						columns:1,
						id:'werte_rg',
						hideLabel:true,
						items:[{
		                    xtype:'radio',
							boxLabel: 'absolut',
							value:'absolut',
		                    name: 'werte',
		                    anchor:'95%',
							checked: true,
							allowBlank:false,
							id:'rd_absolut',
							hideLabel:true,
							scope:this,
							handler:function(){
								this.changeRelation();
							}
		                },	
						{
		                    xtype:'radio',
							value:'relative',
							boxLabel: 'relativ',
		                    name: 'werte',
		                    anchor:'95%',
							allowBlank:false,
							id:'rd_relativ',
							hideLabel:true
							

	                	}]
					})
	            }]
	        },
			buttonAlign:'left',
			buttons:[
			{
				text:'Start',
				iconCls:'startIcon',
				scope:this,
				handler:function(){
						if(this.tbar.getForm().isValid()){
							this.wasStarted = true;
							this.buildTable();		
						}
							
				}
			}
			]
			
			
			
		});
		

		
		
		
		
		this.view = new Ext.Panel({
			title:'Monats-Kostenübersicht ('+rcm.Application.state.kostenstruktur.name+')',
			iconCls:'winMonatskostenuebersicht',
			layout:'border',
			border:false,
			items:[{
				region:'north',
				items:this.tbar,
				height:95,
				layout:'fit'
			},
			{
				region:'center',
				layout:'fit',
				id:'auswertungContent'
				
			}]
			
			
		});
		
		
		if(rcm.Application.state.eigenes_institut != null){
			Ext.getCmp('institut').setValue(rcm.Application.state.eigenes_institut);
		}
		

	},

	buildGrafikChooseWindowYear:function(){
				
		this.radioGroupWerte = new Ext.form.RadioGroup({
			fieldLabel: 'Werte',
            itemCls: 'x-check-group-alt',
			id:'radioWerte',
            // Put all controls in a single column with width 100%
            columns: 1,
            items: [
                {boxLabel: 'absolut', id:'cb_wert', name: 'werte', value:'absolute', checked:true},
                {boxLabel: 'prozentual', name: 'werte', value:'relative'}
            ]

		});
	
	
		this.grafikChoosePanel = new Ext.FormPanel({
			head:false,
			items:this.radioGroupWerte,
			bodyStyle:'padding:10px'
		});
	
	
	
		this.grafikChooseWindow = new Ext.Window({
			title:'Optionen für Grafik Ausgabe',
			width:230,
			height:230,
			modal:true,
			layout:'fit',
			items:this.grafikChoosePanel,
			buttons:[{
				text:'Grafik erstellen',
				scope:this,
				handler:function(){
					var wert = false;
					var typ = false;
					
					if(Ext.getCmp('cb_wert').getValue()){
						wert = 'absolute';
					}else{
						wert = 'relative';
					}
					

					
					
					
					
					// if(Ext.getCmp('cb_wert').getValue()){
					// 	
					// }
					
					
					var url = cfg_backend_url + "monatskostenauswertung/getKostenverteilungGraphHtmlView/"+rcm.Application.monatskostenuebersicht.requestOptions.institut + '/' + rcm.Application.monatskostenuebersicht.requestOptions.kostenebene + '/' + rcm.Application.monatskostenuebersicht.requestOptions.jahr + "/" + rcm.Application.monatskostenuebersicht.requestOptions.ebenenId + "/" + wert;
					
					
					this.ausgabeWindow = new Ext.Window({
						width:800,
						height:600,
						autoLoad:url,
						modal:true,
						title:'Monatsverteilung '+rcm.Application.monatskostenuebersicht.requestOptions.institutRaw + ' ' + rcm.Application.monatskostenuebersicht.requestOptions.ebenenName + ' ' + rcm.Application.monatskostenuebersicht.requestOptions.jahr
					});
					this.ausgabeWindow.show();
					// this.ausgabeWindow.center();
					this.grafikChooseWindow.destroy();
					
					
				}
				
				
			}]
			
		});
		
		this.grafikChooseWindow.show();
		
	},
	
	
	buildTable:function(daten){
		
		//request verarbeiten

		
		// eigenschaften sammeln
		this.requestOptions = new Object();
		this.requestOptions.institut = Ext.getCmp('institut').getValue();
		this.requestOptions.institutRaw = Ext.getCmp('institut').getRawValue();
		this.requestOptions.kostenebene = Ext.getCmp('kostenebene').getValue();
		this.requestOptions.entry_level = Ext.getCmp('kostenebene').getValue();
		this.requestOptions.kostenebeneRaw = Ext.getCmp('kostenebene').getRawValue();
		this.requestOptions.jahr = Ext.getCmp('jahr').getValue();

		this.requestOptions.werte = Ext.getCmp('rd_relativ').getGroupValue();

		
		
		this.gridComponents = new Object();
		this.gridComponents.store = false; //der Datastore
		this.gridComponents.columnModel = false;
		this.gridComponents.proxy = false;
		this.gridComponents.reader = false;
		
		// spalten
		this.gridComponents.readerFields = new Array();

		this.gridComponents.readerFields.push({name:'buttons'});
		this.gridComponents.readerFields.push({name:'kostenebene'});
		
		for (var i=1; i < 13; i++) {
			this.gridComponents.readerFields.push({name:'monat_'+i});					
		};
		
		this.gridComponents.readerFields.push({name:'jahressumme'});		
		this.gridComponents.readerFields.push({name:'ke_id'});		
		
		
		// proxy erstellen
		this.gridComponents.proxy = new Ext.data.HttpProxy({
			url:cfg_backend_url + 'monatskostenauswertung/json/getMonatsKostenUebersicht',
			method:'POST'
		});
		
		
		// reader erstellen
		this.gridComponents.reader = new Ext.data.JsonReader({
			root:'results',
			totalProperty:'total',
			id:'id'
		},this.gridComponents.readerFields);
		
		// data store erstellen
		this.gridComponents.store =  new Ext.data.Store({
			proxy:this.gridComponents.proxy,
			reader:this.gridComponents.reader,
			remoteSort:true,
			listeners: {
				beforeload: {
					fn:function(){
						Ext.MessageBox.wait('Daten werden geladen..',false,waitDialogConfig);
					}
				},
			    load: {
					scope:this,
			        fn: function(){
						Ext.MessageBox.hide();
			            var view = this.grid.getView();
			            for (var i = 0; i < this.gridComponents.store.getCount(); i++) {
			                var cell = Ext.fly(view.getCell(i, 0));
							if(cell.child(".chart_curve")){
								cell.child(".chart_curve").rel = i+1;
				                cell.child(".chart_curve").on('click',function(){


									var zeile = this.rel;

									
									if(zeile == rcm.Application.monatskostenuebersicht.gridComponents.store.getCount()){
										var span= "0" 
									}else{
										// console.log('zeile',zeile);
										var spanId = 'span_'+(zeile-1);
										var span = Ext.get(spanId).dom.className;										
									}	
										
									
									// var kostenposition = rcm.Application.monatskostenuebersicht.gridComponents.store.getAt(zeile).data.kostenebene;
									
									rcm.Application.monatskostenuebersicht.requestOptions.ebenenId=span;
									if(zeile!=0){
										rcm.Application.monatskostenuebersicht.requestOptions.ebenenName=rcm.Application.monatskostenuebersicht.gridComponents.store.getAt(zeile-1).data.kostenebene;

									}else{
										rcm.Application.monatskostenuebersicht.requestOptions.ebenenName="Summe";
									}
									
									// daten von frontend
									var data = rcm.Application.monatskostenuebersicht.gridComponents.store.getAt(zeile-1).data;

									var monate = new Object();
									for (var i=1; i <= 12; i++) {
										monate[i] = data['monat_'+i];
									};
									
									var kostenPosition = data.kostenebene;
									
									
									
									
									


									if(Ext.getCmp('rd_absolut').getValue()){
										var einheit = 'absolute';
									}else{
										var einheit = 'relative';
									}
									
									
									//
									var url = cfg_backend_url + "monatskostenauswertung/getKostenverteilungGraphHtmlView/"+rcm.Application.monatskostenuebersicht.requestOptions.institut + '/' + rcm.Application.monatskostenuebersicht.requestOptions.kostenebene + '/' + rcm.Application.monatskostenuebersicht.requestOptions.jahr + "/" + rcm.Application.monatskostenuebersicht.requestOptions.ebenenId + "/" + einheit;


									this.ausgabeWindow = new Ext.Window({
										width:800,
										height:600,
										// autoLoad:url,
										modal:true,
										title:'Monatsverteilung '+rcm.Application.monatskostenuebersicht.requestOptions.institutRaw + ' ' + rcm.Application.monatskostenuebersicht.requestOptions.ebenenName + ' ' + rcm.Application.monatskostenuebersicht.requestOptions.jahr,
										tools:[
										{
											id:'print',
											handler:function(){
												var chartToPrint = getChartFromId("bcm_chart");
												chartToPrint.print();
											}
										},{
											id:'save',
											handler:function(){

												var chartToPrint = getChartFromId("bcm_chart");
												chartToPrint.saveAsImage();
											}
										}]
									});
									this.ausgabeWindow.show();
									this.ausgabeWindow.center();
									
									//
									var mgr = this.ausgabeWindow.getUpdater();
									mgr.update({
									        url: url,
											scripts:true,
									        params: {
									            monate: Ext.util.JSON.encode(monate),
									            kostenPosition: kostenPosition
									        }
									});
									
									
									// rcm.Application.monatskostenuebersicht.buildGrafikChooseWindowYear();
									




								});								
							}
			            }
		
			        }
			    }
			}		
		});
		
		
		// col model erstellen
		this.gridComponents.modelFields = new Array();
		
		this.gridComponents.modelFields.push({header:'', width:30, dataIndex:'buttons', renderer:function(value, metadata, record, rowIndex, colIndex, store){
			if(colIndex == 0 && rowIndex < store.getCount()){
				return "<div class='chart_curve' style='height: 16px; width: 16px; overflow:hidden'></div>";
			}
		}});
		
		this.gridComponents.modelFields.push({header:this.requestOptions.kostenebeneRaw, sortable:true, dataIndex:'kostenebene',width:275,renderer:function(value, metadata, record, rowIndex, colIndex, store){
			if(rowIndex == store.getCount()-1){
				metadata.css = 'summenZeile';
			}
			return value;
		}});
		
		var monate = new Object();
		
		// monate[0]  = 'nö';
		monate[1]  = "Januar";
		monate[2]  = "Februar";
		monate[3]  = "März";
		monate[4]  = "April";
		monate[5]  = "Mai";
		monate[6]  = "Juni";
		monate[7]  = "Juli";
		monate[8]  = "August";
		monate[9]  = "September";
		monate[10] = "Oktober";
		monate[11] = "November";
		monate[12] = "Dezember";
		
		for (var i=1; i < 13; i++) {
			this.gridComponents.modelFields.push({header:monate[i], align:'center', css:'text-align:right !important;', sortable:true, dataIndex:'monat_'+i,width:100, renderer:function(value, metadata, record, rowIndex, colIndex, store){
				if(rowIndex == store.getCount()-1){
					metadata.css = 'summenZeile';
				}
				return value;
			}});
		};
		
		this.gridComponents.modelFields.push({header:"Jahressumme", align:'center', css:'text-align:right !important;',	  sortable:true, dataIndex:'jahressumme', renderer:function(value, metadata){
			metadata.css = 'summenZeile';
			return value;
		}});
		
		this.gridComponents.modelFields.push({
			header:'KE ID',
			dataIndex:'ke_id',
			hidden:true
		});



		
		// this.gridComponents.columnModel = new Ext.grid.ColumnModel(this.gridComponents.modelFields);
		
		
		this.grid = new Ext.grid.GridPanel({
			store: this.gridComponents.store, 
			columns: this.gridComponents.modelFields, 
			border:false,
			disableSelection:true,
			title:this.requestOptions.kostenebeneRaw,tools:[
			{id:'print', scope:this, handler:function(){
				if(this.requestOptions!=null){
					
					
					
					var ro = this.requestOptions;

					var werte = false;
					if(Ext.getCmp('rd_absolut').getValue()){
						werte = "absolute";
					}else{
						werte = "relative";
					}

					if(ro.kostenebenen_eintrag_parent_id != null){
						if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir != null){
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/" +ro.kostenebenen_eintrag_parent_id + "/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir +"/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort + "/false";
						}else{
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/" +ro.kostenebenen_eintrag_parent_id +"/false/false/false";
						}
						

					}else{
						if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir != null){
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/false/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir +"/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort + "/false";
						}else{
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/false/false/false/false";
						}
					}


					rcm.Application.print(url + "/" + rcm.Application.monatskostenuebersicht.requestOptions.entry_level);
				}
			}},
			
			{id:'save', scope:this, handler:function(){
				if(this.requestOptions!=null){
					
					
					
					var ro = this.requestOptions;

					var werte = false;
					if(Ext.getCmp('rd_absolut').getValue()){
						werte = "absolute";
					}else{
						werte = "relative";
					}

					if(ro.kostenebenen_eintrag_parent_id != null){
						if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir != null){
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/" +ro.kostenebenen_eintrag_parent_id + "/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir +"/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort + "/true";
						}else{
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/" +ro.kostenebenen_eintrag_parent_id + "/false/false/true";
						}
						

					}else{
						if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir != null){
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/false/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir +"/" + rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort + "/true";
						}else{
							var url = cfg_backend_url + "monatskostenauswertung/getMonatsKostenUebersichtPrintView/"+ro.institut + "/" +ro.jahr +"/"+ ro.kostenebene +"/" +werte + "/false/false/false/true";
						}
					}
					window.location.href = url + "/" + rcm.Application.monatskostenuebersicht.requestOptions.entry_level;

					// rcm.Application.print(url);
				}
			}}
			
			]
			
			
		});
		
		if(!Ext.isEmpty(Ext.getCmp('auswertungContent').items)){
			Ext.getCmp('auswertungContent').remove(Ext.getCmp('auswertungContent').getComponent(0));
		}
		
		Ext.getCmp('auswertungContent').add(this.grid);
		Ext.getCmp('auswertungContent').doLayout();
		
		this.gridComponents.store.load({
			
			params:function(){
				var params = new Object();
		
				Ext.each(rcm.Application.monatskostenuebersicht.tbar.form.items.items, function(field){
					if(!Ext.isEmpty(field.getValue)&&field.name!='wert'&&field.name!=null){
						params[field.name] = field.getValue();										
					}
		
				});
				if(Ext.getCmp('rd_absolut').getValue()){
					params['einheit'] = 'absolute';
				}else{
					params['einheit'] = 'relative';
				}
				
				
				
				if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir != null){
					params['dir'] = rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir;
				}
				
				if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort != null){
					params['sort'] = rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort;
				}
				
				params['entry_level'] = rcm.Application.monatskostenuebersicht.requestOptions.entry_level;
				
				
				return params;
			}
			
		});
		
		
		this.newPanelTitle = this.requestOptions.kostenebeneRaw;
		
		this.grid.on('celldblclick',function(grid, rowIndex, columnIndex){

			// return; // doppelklick erstmal raus
			
			
			if(rowIndex> rcm.Application.monatskostenuebersicht.gridComponents.store.getCount()-2){
				return false;
			}
			
			
			// überprüfen ob man überhaupt noch tiefer gehen kann
			var ebenenStoreId = rcm.Application.multiStores['bcm_kostenebenen_name'].find('id',rcm.Application.monatskostenuebersicht.requestOptions.kostenebene);
			
			var ebenePlus = rcm.Application.multiStores['bcm_kostenebenen_name'].getAt(ebenenStoreId+1);
			if(ebenePlus){

				
				rcm.Application.monatskostenuebersicht.requestOptions.kostenebene = ebenePlus.data.id;
				rcm.Application.monatskostenuebersicht.requestOptions.kostenebeneRaw = ebenePlus.data.name;
				Ext.getCmp('kostenebene').setValue(ebenePlus.data.id);
				
				rcm.Application.monatskostenuebersicht.grid.getColumnModel().setColumnHeader(1,ebenePlus.data.name);
				
				
				// navigationspfad
				var ebenenName = grid.getStore().getAt(rowIndex).data.kostenebene;
				// console.log('ebenenName',ebenenName);
				rcm.Application.monatskostenuebersicht.newPanelTitle = rcm.Application.monatskostenuebersicht.newPanelTitle + " > " + 	ebenenName;
				rcm.Application.monatskostenuebersicht.grid.setTitle(rcm.Application.monatskostenuebersicht.newPanelTitle);
				

				// ende navagationspfad
				var span = grid.getStore().getAt(rowIndex).data.ke_id;


				Ext.MessageBox.wait('Daten werden geladen..',false,waitDialogConfig);
				rcm.Application.monatskostenuebersicht.gridComponents.store.reload({

					params:function(){
						var params = new Object();

						Ext.each(rcm.Application.monatskostenuebersicht.tbar.form.items.items, function(field){
							if(!Ext.isEmpty(field.getValue) && field.name != null){
								params[field.name] = field.getValue();										
							}


						});
						
						
						if(Ext.getCmp('rd_absolut').getValue()){
							params['einheit'] = 'absolute';
						}else{
							params['einheit'] = 'relative';
						}
						
						
						if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir != null){
							params['dir'] = rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.dir;
						}

						if(rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort != null){
							params['sort'] = rcm.Application.monatskostenuebersicht.gridComponents.store.lastOptions.params.sort;
						}
						

						params['pfadId'] = span;
						rcm.Application.monatskostenuebersicht.requestOptions.kostenebenen_eintrag_parent_id = span;
						
						params['entry_level'] = rcm.Application.monatskostenuebersicht.requestOptions.entry_level;

						return params;
					}


				});

			}
			

			
			
			
		});
		

		
		
		
		
	},
	

	
	// ==========================
	// = öffentliche Funktionen =
	// ==========================
	
	
	init:function(){
		this.buildView();
		// this.buildGrafikChooseWindow();
		
		
		return this;
	}
	
	
	
});
