/*
 * @author Erik Anders aka --=GT-O=--Hellfire
 */

// reference local blank image
Ext.BLANK_IMAGE_URL = 'images/spacer.gif';
 
// create namespace
Ext.namespace('gto');
 
// create application
gto.r_dkp = function() {
    // do NOT access DOM from here; elements don't exist yet
 
    // private variables
	var store = true;
	var cm = true;
	var grid = true;
	var dkpChar = true;
	var dkpEntry = true;
	var itemEntry = true;
	var eventEntry = true;
	var classArray = new Array('', 'Krieger', 'Paladin', 'J&auml;ger', 'Schurke', 'Priester', '', 'Schamane', 'Magier', 'Hexenmeister', '', 'Druide');
	var classListCombo;
	var currentPage = '';
	var currentSubPage = 0;
	var gridEditForm = true;
	var dkpEvents = true;
	var hisTok = ':';
	
    // private functions
	getClassIcon =  function(i)
	{
		return '<img src="images/guild/cls_'+i+'.gif" alt="'+classArray[i]+'" />';
	}
	
	getClassSort = function(i)
	{
		return classArray[i];
	}
	
	getEventSort = function(i)
	{
		var t = store.getAt(store.find('event_id', i)).data.event_time;
		if (Ext.isEmpty(t))
			t = 0;
		return t*-1;
	}
	
	generateOverviewToolBar = function()
	{		
		if (!isDkpAdmin)
		{
			return false;
		}
		
		return [
					{
					    text: 'Char hinzuf&uuml;gen',
					    handler : function(){
							
					        var p = new dkpChar({
					            name: '',
					            classId: '0',
					            dkp1: 0,
					            dkp2: 0,
					            dkp3: 0,
								dkp4: 0,
								id: 0
					        });
					        grid.stopEditing();
					        store.insert(0, p);
					        grid.startEditing(0, 0);
					    }
					},
					'->',
					{
						text: '&Auml;nderungen speichern',
						handler: function()
						{
							store.commitChanges();
						}
					},
					{
					    text: 'Ausgew&auml;hlten l&ouml;schen',
					    iconCls:'remove',
					    handler : function(){								
					        //get the store associated with the grid:
					        store = grid.getStore();
					        //returns array of record objects for selected rows (all info for row)
							var selections = grid.selModel.getSelections();
							if (selections.length == 0)
							{
								Ext.Msg.alert('Information', 'Du musst einen Eintrag zum L&ouml;schen ausw&auml;hlen');
								return false;
							}
							
					        
							Ext.Msg.confirm('Sicherheitsabfrage', 'Willst du "'+selections[0].data.name+'" wirklich l&ouml;schen?', function(btn)
							{
								if (btn = 'yes')
								{
									Ext.Ajax.request({
										url: 'content.php',
										params: 'load=ajax-r_dkp&mode=deletechar&charId='+selections[0].data.id,
										success: function()
										{
											Ext.Msg.alert('Information', 'L&ouml;schung erfolgreich');
											store.remove(selections[0]);
										}
									});
								}
							}, this);
					    }
					}
				];
	}
	
	generatePlayerdetailsToolBar = function()
	{
		if (!isDkpAdmin)
		{
			return false;
		}
		
		return [
					{
					    text: 'Eintrag hinzuf&uuml;gen',
						handler: addDkpEntry
					}
				];
	},
	
	generateItemDetailsToolBar = function()
	{
		return [];
	},
	generateEventDetailsToolBar = function()
	{
		return [];
	},
	
	tokenChangeHandler = function(c, r, i)
	{
		store.filter('tokenPool', r.data.value);
	}
	
	tokenClearHandler = function()
	{
		Ext.get('tokenFilterSelect').dom.value='';
		store.clearFilter();
		GTOdecorateItemLinks();
	}
	
	storeBeforeLoadHandler =  function()
	{
		grid.getEl().mask('Laden...', 'custom-loading-indicator');
	}
	
	storeLoadHandler =  function(s)
	{
		if ((window.location.hash != this.origHash)
			&& (this.hashRestored == false)
			&& (this.origHash.length > 0)
			)
		{
			this.hashRestored = true;
			Ext.History.add(this.origHash);
		}
		
		var i = Ext.get('grid-top-item-id');
		if (i != null)
		{
			i.dom.innerHTML = s.getAt(0).data.item_entered_name;
		}
		
		var i = Ext.get('grid-top-item-value');
		if (i != null)
		{
			var c = s.getCount()*-1;
			i.dom.innerHTML = parseInt(s.sum('dkp1_item_value')/c)
							  +' / '+parseInt(s.sum('dkp2_item_value')/c)
							  +' / '+parseInt(s.sum('dkp3_item_value')/c)
							  +' / '+parseInt(s.sum('dkp4_item_value')/c);
		}
		
		var i = Ext.get('grid-top-event-name');
		if (i != null)
		{
			var r = s.getAt(0).data;
				
			i.dom.innerHTML = r.event_name+'  -  Wert: '+(parseInt(r.dkp1_event_value) || 0)+', '+
							  (parseInt(r.dkp2_event_value) || 0)+', '+
							  (parseInt(r.dkp3_event_value) || 0)+', '+
							  (parseInt(r.dkp4_event_value) || 0);
		}
		
		grid.getEl().unmask();
		GTOdecorateItemLinks();
	}
			
	
	ClassNameRenderer = function(i,x,r)
	{
		return r.data.cname;
	}
	
	PlayerDetailLinkRenderer = function(i,x,r)
	{
		return '<img src="images/icons/information.png" ext:qtip="Details f&uuml;r '+r.data.name+' anzeigen" alt="Details" style="cursor:pointer;" />';
	}
	
	ItemLinkRenderer = function(i,x,r)
	{
		if (Ext.isEmpty(i))
		{
			return 'kein Item';
		}
		return '<a href="http://de.wowhead.com/?item='+r.data.item_id+'" target="_blank"><strong>'+i+'<strong></a>';
	}
	
	EventRaidRenderer = function(i,x,r)
	{
		var eDkp = '';
		if (dkp4_lbl != '')
		{
			eDkp += '<span style="float:right; text-align:right; width: 91px">'+DkpNumberRenderer(r.data.dkp4_event_value)+'</span>';
		}
		if (dkp3_lbl != '')
		{
			eDkp += '<span style="float:right; text-align:right; width: 91px">'+DkpNumberRenderer(r.data.dkp3_event_value)+'</span>';
		}
		if (dkp2_lbl != '')
		{
			eDkp += '<span style="float:right; text-align:right; width: 91px">'+DkpNumberRenderer(r.data.dkp2_event_value)+'</span>';
		}
		if (dkp1_lbl != '')
		{
			eDkp += '<span style="float:right; text-align:right; width: 91px; padding-right: 3px">'+DkpNumberRenderer(r.data.dkp1_event_value)+'</span>';
		}
		
		eDkp += '<br clear="all" />'
		var dt = new Date(r.data.event_time*1000);
		return '<span style="float:left;">'+r.data.event_name+' ('+dt.format('d.m.y')+')</span>'+eDkp;
	}
	
	ShowItemDetailsRenderer = function(i,x,r)
	{
		if (r.data.item_log_id != 0)
		{
			return '<img src="images/icons/information.png" ext:qtip="Details f&uuml;r '+r.data.item_entered_name+' anzeigen" alt="Details" style="cursor:pointer;" />'
		}
		else
		{
			return ' ';
		}
	}
	
	ShowPlayerDetailsRenderer = function(i,x,r)
	{
		return '<img src="images/icons/information.png" ext:qtip="Details f&uuml;r '+r.data.cname+' anzeigen" alt="Details" style="cursor:pointer;" />'
	}
	
	DkpNumberRenderer = function(i,x,r)
	{
		var c = '';
		var plus = '';
		i = (i == '') ? 0 : i;
		if (i > 0)
		{
			c = 'green';
			plus = '+';
		}
		if (i < 0)
			c = 'red';
		return '<span style="color: '+c+'">'+plus+i+'</span>';
	}
	
	ShowEventDetailsRenderer = function(i,x,r)
	{
		return '<img src="images/icons/information.png" ext:qtip="Details f&uuml;r '+r.data.event_name+' anzeigen" alt="Details" style="cursor:pointer;" />'
	}
	
	EventGroupRenderer = function (v, unused, r, rowIndex, colIndex, ds)
	{
		//console.log('EventGroupRenderer called');
		//gets never called....what the frak?
		return true;
	}
	
	addDkpEntry = function()
	{
		Ext.getCmp('grid-edit-form').show();
		gto.r_dkp.spot.show('grid-edit-form');
	}
	
	clearToolBar = function(tbar)
	{
		if (typeof(tbar) == 'undefined')
		{
			return true;
		}
		
		var mytbarbuttons = tbar.items.items;
				
		for (i=mytbarbuttons.length-1;i >=0 ;i--)
		{
			mytbarbuttons[i].destroy();
		}
	}
	
	showRecordForm = function(g, r, c, e)
	{
		//console.log('dreggs RecordForm geht net, muss selber was schreiben :/');
		//g.recordForm.show(g.store.getAt(r), grid.getView().getCell(r, c));
	}
	
    // public space
    return {
		// public properties, e.g. strings to translate		
		// public methods
		init: function()
		{   
			Ext.QuickTips.init();
			Ext.History.init();
	
			/*
			var cp = new Ext.state.CookieProvider({
			    path: "/v5/",
			    expires: new Date(new Date().getTime()+(1000*60*60*24*365)), 
			    domain: "gtoclan.de"
			});
			Ext.state.Manager.setProvider(cp);
			*/
			this.spot =  new Ext.Spotlight
			(
				{
					easing: 'easeOut',
					duration: .3
				}
			);
			
			classListCombo = new Ext.form.ComboBox({
				typeAhead: true,
				triggerAction: 'all',
				lazyRender:true,
				transform: 'classList'
			})
			
			//now it gets REALLY dirty :/
			this.origHash = window.location.hash;
			this.hashRestored = false;
			
			this.loadOverview();
			
			Ext.History.on('change', function(token){
		        if(token){
		            var parts = token.split(hisTok);
		            switch(parts[0])
					{
						case 'p':
							this.loadPlayerDetails(parts[1]);
							break;
						case 'o':
							this.loadOverview(true);
							break;
						case 'i':
							this.loadItemDetails(parts[1]);
							break;
						case 'e':
							this.loadEventDetails(parts[1]);
							break;
					}
		        }
				else
				{
					Ext.History.add('o'+ hisTok + 1);
				}
		    }, this);

		},
		
		loadOverview: function(token)
		{			
			currentPage = 'overview';
			Ext.History.add('o'+ hisTok + 1);
			
			/*
			if (typeof(token) == 'undefined')
			{
				if (window.location.hash == '#o:1')
				{
					console.log('frak');
					//Ext.History.fireEvent('change');
				}
				else
				{				
					return true;
				}
			}
			*/
			
			dkpChar = Ext.data.Record.create(
			[
				// the "name" below matches the tag name to read, except "availDate"
				// which is mapped to the tag "availability"
				{name: 'id', mapping: '@id'},
				{name: 'name', mapping: '@name', type: 'string'},
				{name: 'classId', mapping: '@classId', type: 'float', sortType: getClassSort},
				{name: 'dkp1', mapping: '@dkp1', type: 'float'},
				{name: 'dkp2', mapping: '@dkp2', type: 'float'},
				{name: 'dkp3', mapping: '@dkp3', type: 'float'},
				{name: 'dkp4', mapping: '@dkp4', type: 'float'},
				{name: 'tokenPool', mapping: '@tokenPool', type: 'float'}
			]);
		
			var cw = parseInt(280/tCols);

			cm = new Ext.grid.ColumnModel(
			[
				{
			        id:'name',
			        header: "Name",
			        dataIndex: 'name',
			        width: 220,
					menuDisabled: true,
			        editor: new Ext.form.TextField({
			            allowBlank: false
			        })
		        },{
			        header: "Klasse",
			        dataIndex: 'classId',
			        width: 75,
					align: 'center',
					renderer: getClassIcon,
					menuDisabled: true,
			        editor: classListCombo
		        },{
			        header: dkp1_lbl.substr(0,6)+'...',
					tooltip: dkp1_lbl+'<br />Letztes Update: '+dkp1_date.format('d.m.y H:i:s'),
			        dataIndex: 'dkp1',
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp1_lbl == '') ? true : false 
		        },{
			        header: dkp2_lbl.substr(0,6)+'...',
					tooltip: dkp2_lbl+'<br />Letztes Update: '+dkp2_date.format('d.m.y H:i:s'),
			        dataIndex: 'dkp2',
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp2_lbl == '') ? true : false 
		        },{
			        header: dkp3_lbl.substr(0,6)+'...',
					tooltip: dkp3_lbl+'<br />Letztes Update: '+dkp3_date.format('d.m.y H:i:s'),
			        dataIndex: 'dkp3',
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp3_lbl == '') ? true : false 
		        },{
			        header: dkp4_lbl.substr(0,6)+'...',
					tooltip: dkp4_lbl+'<br />Letztes Update: '+dkp4_date.format('d.m.y H:i:s'),
			        dataIndex: 'dkp4',
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp4_lbl == '') ? true : false 
		        },{
					id: 'optionsCol',
					header: ' ',
					menuDisabled: true,
					dataIndex: 'id',
					width: 25,
					align: 'center',
					renderer: PlayerDetailLinkRenderer
				}
		    ]);
			
			cm.defaultSortable = true;
			
			
			// create the Data Store
		    store = new Ext.data.GroupingStore({
		        // load using HTTP
		        url: 'content.php?load=ajax-r_dkp&mode=overview',

		        // the return will be XML, so lets set up a reader
		        reader: new Ext.data.XmlReader({
		               // records will have a "plant" tag
		               record: 'dkp'
		           }, dkpChar),

		        sortInfo:{field:'name', direction:'ASC'}
				//groupField: 'classId'
		    });
			
			store.on('update', function(s,r,o)
			{
				//console.log('store.update fired');
				//write changes to database
				if (o == Ext.data.Record.COMMIT)
				{	
					//Ext.Msg.wait('Information', 'Speichere Daten...');
					grid.getEl().mask('Speichern...', 'custom-loading-indicator');
					
					Ext.Ajax.request({
						url: 'content.php',
						params: 'load=ajax-r_dkp&mode=editchar&'+Ext.urlEncode(r.data),
						success: function()
						{
							//Ext.Msg.hide();
							grid.getEl().unmask()
							Ext.Msg.alert('Information', 'Speichern erfolgreich', function()
							{
								store.reload();
							});
						}
					});
				}
			}, this);
			
			store.on('beforeload', storeBeforeLoadHandler, this);
			
			store.on('load', storeLoadHandler, this);
			
			
			var cb = new Ext.form.ComboBox({
				id: 'tokenFilterSelect',
				store:
				[
					[1, '...des vergessenen Besch&uuml;tzers (T6)'],
					[2, '...des vergessenen Bezwingers (T6)'],
					[3, '...des vergessenen Eroberers (T6)']
				],
			    typeAhead: true,
			    triggerAction: 'all',
			    lazyRender:true,
				width: 200,
				editable: false,
				forceSelection: true
			})
			cb.addListener('select', tokenChangeHandler, this);
			
			if (!grid.rendered)
			{
				// create the editor grid
			    grid = new Ext.grid.EditorGridPanel({
					id: 'dkp-grid',
			        store: store,
			        cm: cm,
					title: 'DKP &Uuml;bersicht',
			        width:700,
			        height:600,
			        autoExpandColumn:'name',
			        frame:false,
			        clicksToEdit:2,
			        tbar: generateOverviewToolBar(),
					stripeRows: true,
					disableSelection: false,
					trackMouseOver: true,
					selModel: new Ext.grid.RowSelectionModel({singleSelect:true}),
					viewConfig: {
						forceFit: false,
						emptyText: 'Keine Eintr&auml;ge vorhanden'
					},
					view: new Ext.grid.GroupingView({
				        forceFit: false,
				        groupTextTpl: '{group}',
						groupRenderer: EventGroupRenderer
					}),
					bbar: 
					[
						'Filter: ',
						cb,
						{
							text: 'Filter l&ouml;schen',
							handler: tokenClearHandler
						},
						'->',
						{
							text: '&Uuml;bersicht laden',
							handler: function()
							{
								this.origHash = '';
								Ext.History.add('o'+ hisTok + 1);
							}
						}
					]
				});
				grid.on('beforeedit', function(s)
				{
					return isDkpAdmin;
				});
				
				grid.on('cellclick', function(g, r, c, e)
				{
					var cId = cm.getColumnId(c);
					
					switch (cId)
					{
						case 'optionsCol':
							Ext.History.add('p'+ hisTok + g.store.getAt(r).data.id);
							break;
						case 'playerDetailCol':
							Ext.History.add('p'+ hisTok + g.store.getAt(r).data.cid);
							break;
						case 'itemDetailCol':
							Ext.History.add('i'+ hisTok + g.store.getAt(r).data.item_id);
							break;
						case 'eventDetailCol':
							Ext.History.add('e'+ hisTok + g.store.getAt(r).data.event_id);
							break;
					}
				}, this);
				
				grid.render('dkp-grid-ct');
				//grid.reconfigure(store, cm);
				store.load();
				this.ovStore = store;
			
				if (isDkpAdmin)
				{
					var evtStore = new Ext.data.JsonStore({
							url: 'content.php?load=ajax-r_dkp&mode=loadevents',
							root: 'bla',
							fields: ['event_id', 
									 'event_name', 
									 'dkp1_event_value', 
									 'dkp2_event_value', 
									 'dkp3_event_value', 
									 'dkp4_event_value',
									 'event_time']
					});
					
					evtStore.load();
					
					var dkpEventsList = new Ext.form.ComboBox(
					{
						store: evtStore,
						fieldLabel: 'Raid/Event ausw&auml;hlen',
						name: 'event_id',
						id: 'event_id',
						mode: 'local',
						valueField: 'event_id',
						displayField: 'event_name',
						editable: true,
						listWidth: 200
					});
					
					dkpEventsList.on('select', function(c,r,i)
					{
						var fp = c.ownerCt.ownerCt;
						fp.getForm().setValues(
						{
							event_name: r.data.event_name,
							dkp1_event_dkp: r.data.dkp1_event_value,
							dkp2_event_dkp: r.data.dkp2_event_value,
							dkp3_event_dkp: r.data.dkp3_event_value,
							dkp4_event_dkp: r.data.dkp4_event_value,
							event_time: r.data.event_time
						});
						
						c.setRawValue(r.data.event_id)
						
					});					
					
					var gridEditForm = new Ext.FormPanel({
						id: 'grid-edit-form',
				        frame: true,
				        labelAlign: 'left',
				        title: 'Eintrag bearbeiten',
				        bodyStyle:'padding:5px',
				        width: 700,
						hidden:true,
				        items: 
						[
							{
								xtype: 'fieldset',
								autoHeight: true,
								width: 400,
								title: 'Event-Einstellungen',
								defaultType: 'textfield',
								labelWidth: 150,
								defaults: {width: 175},
								items:
								[
									dkpEventsList,
									{
								        fieldLabel: 'oder neu anlegen',
								        name: 'event_name',
										allowBlank: false
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Event-DKP ('+((dkp1_lbl != '') ? dkp1_lbl : 'unbenutzt')+')',
								        name: 'dkp1_event_dkp',
										value: 0
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Event-DKP ('+((dkp2_lbl != '') ? dkp2_lbl : 'unbenutzt')+')',
								        name: 'dkp2_event_dkp',
										value: 0
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Event-DKP ('+((dkp3_lbl != '') ? dkp3_lbl : 'unbenutzt')+')',
								        name: 'dkp3_event_dkp',
										value: 0
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Event-DKP ('+((dkp4_lbl != '') ? dkp4_lbl : 'unbenutzt')+')',
								        name: 'dkp4_event_dkp',
										value: 0
								    },{
								        xtype: 'datefield',
								        fieldLabel: 'Datum',
								        name: 'event_time',
										format: 'd.m.y',
										allowBlank: false
								    }
								]
							},
							{
								xtype: 'fieldset',
								autoHeight: true,
								width: 400,
								title: 'Item-Einstellungen (optional)',
								defaultType: 'textfield',
								labelWidth: 150,
								defaults: {width: 175},
								items:
								[
									{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Item-ID',
								        name: 'item_id'
								    },{
										xtype: 'hidden',
								        name: 'item_log_id'
								    },{
										fieldLabel: 'Item-Name',
								        name: 'item_entered_name'
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Item-DKP ('+((dkp1_lbl != '') ? dkp1_lbl : 'unbenutzt')+')',
								        name: 'dkp1_item_dkp',
										value: 0
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Item-DKP ('+((dkp2_lbl != '') ? dkp2_lbl : 'unbenutzt')+')',
								        name: 'dkp2_item_dkp',
										value: 0
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Item-DKP ('+((dkp3_lbl != '') ? dkp3_lbl : 'unbenutzt')+')',
								        name: 'dkp3_item_dkp',
										value: 0
								    },{
										xtype: 'numberfield',
										width: 50,
								        fieldLabel: 'Item-DKP ('+((dkp4_lbl != '') ? dkp4_lbl : 'unbenutzt')+')',
								        name: 'dkp4_item_dkp',
										value: 0
								    }
								]
							}
						],
						renderTo: 'dkp-grid-edit-ct',
						buttons:
						[
							{
								text: 'Einf&uuml;gen',
								handler: function(b, e)
								{
									var v = b.ownerCt.getForm().getValues();
									if ((v.event_name == '')
										|| (v.event_time == '')
										)
									{
										return false;
									}
									
									var p = new dkpEntry({
										event_id: v.event_id || 0,
							            event_name: v.event_name,
							            dkp1_event_value: v.dkp1_event_dkp,
							            dkp2_event_value: v.dkp2_event_dkp,
							            dkp3_event_value: v.dkp3_event_dkp,
							            dkp4_event_value: v.dkp4_event_dkp,
										event_time: parseInt(Date.parseDate(v.event_time, 'd.m.y').getTime()/1000),
										item_log_id: v.item_log_id,
										item_id: v.item_id,
										item_entered_name: v.item_entered_name,
										dkp1_item_value: v.dkp1_item_dkp,
										dkp2_item_value: v.dkp2_item_dkp,
										dkp3_item_value: v.dkp3_item_dkp,
										dkp4_item_value: v.dkp4_item_dkp
							        });
									
							        grid.stopEditing();
							        store.addSorted(p);									
								}
							},
							{
								text: 'Abbrechen',
								handler: function(b,e)
								{
									//clearing the edit form
									gto.r_dkp.spot.hide();
									var gef = Ext.getCmp('grid-edit-form').getForm();
									gef.setValues(
									{
										event_id: '',
										event_name: '',
										dkp1_event_dkp: 0,
										dkp2_event_dkp: 0,
										dkp3_event_dkp: 0,
										dkp4_event_dkp: 0,
										event_time: '',
										item_id: '',
										item_entered_name: '',
										dkp1_item_dkp: 0,
										dkp2_item_dkp: 0,
										dkp3_item_dkp: 0,
										dkp4_item_dkp: 0
									});
									Ext.getCmp('grid-edit-form').hide();
								}
							}
						]
					});
				}
			}
			else
			{
				var tb = grid.getTopToolbar();
				if (typeof(tb) != 'undefined')
				{
					clearToolBar(tb);
					
					var gtb = generateOverviewToolBar();
					for (i=0; i<gtb.length; i++)
					{
						tb.add(gtb[i]);
					}

					tb.render(Ext.getCmp('dkp-grid').tbar);
				}
				
				grid.setTitle('DKP &Uuml;bersicht');
				
				grid.un('celldblclick', showRecordForm, this);
				
				grid.reconfigure(store, cm);
				store.load();
			}
			
		},
		
		loadPlayerDetails: function(charId)
		{
			currentPage = 'playerdetails';
			Ext.History.add('p'+ hisTok + charId);
			
			var dkpCharId = charId;
			
			var tb = grid.getTopToolbar();
			if (typeof(tb) != 'undefined')
			{
				clearToolBar(tb);
				var gtb = generatePlayerdetailsToolBar();
				for (i=0; i<gtb.length; i++)
				{
					tb.add(gtb[i]);
				}
				tb.render(Ext.getCmp('dkp-grid').tbar);
			}
			
			var row = this.ovStore.findBy(function(r)
			{
				return (r.data.id == charId)
			});
			
			var cR = this.ovStore.getAt(row);
			
			currentSubPage = dkpCharId;
			
			var tpl = new Ext.Template
			(
				'<table>',
					'<tr>',
						'<td>Details f&uuml;r&nbsp;&nbsp;</td>',
						'<td>{classPic}</td>',
						'<td>&nbsp;&nbsp;{name}</td>',
					'</tr>',
				'</table>'
			);
			
			grid.setTitle(tpl.apply({classPic: getClassIcon(cR.data.classId), name: cR.data.name}));
			
			dkpEntry = Ext.data.Record.create(
			[
				{name: 'cid'},
				{name: 'cname'},
				{name: 'class_id', sortType: getClassSort},
				{name: 'dkp1', type: 'float'},
				{name: 'dkp2', type: 'float'},
				{name: 'dkp3', type: 'float'},
				{name: 'dkp4', type: 'float'},
				{name: 'log_id'},
				{name: 'source_id'},
				{name: 'target_id'},
				{name: 'item_log_id'},
				{name: 'event_id', sortType: getEventSort},
				{name: 'item_id'},
				{name: 'item_entered_name'},
				{name: 'dkp1_item_value'},
				{name: 'dkp2_item_value'},
				{name: 'dkp3_item_value'},
				{name: 'dkp4_item_value'},
				{name: 'item_time', type: 'float'},
				{name: 'event_name', sortType: getEventSort},
				{name: 'dkp1_event_value'},
				{name: 'dkp2_event_value'},
				{name: 'dkp3_event_value'},
				{name: 'dkp4_event_value'},
				{name: 'event_time', type: 'float'},
				{name: 'event_grouping', mapping: 'event_id', type: 'float'}
			]);
			
			var cw = parseInt(280/tCols);
			var cmArr = 
			[
				{
					id: 'name',
				    header: "Item",
				    dataIndex: 'item_entered_name',
				    width: 220,
					renderer: ItemLinkRenderer,
					menuDisabled: true
				},
				{
					id: 'itemDetailCol',
				    header: " ",
				    dataIndex: 'item_id',
				    width: 25,
					align: 'center',
					renderer: ShowItemDetailsRenderer,
					menuDisabled: true
				},
				{
				    header: '',
				    dataIndex: 'event_name',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
				    header: '',
				    dataIndex: 'event_id',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
				    header: '',
				    dataIndex: 'log_id',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
					id: 'eventDetailCol',
				    header: " ",
				    dataIndex: 'event_id',
				    width: 25,
					align: 'center',
					renderer: ShowEventDetailsRenderer,
					menuDisabled: true
				},
				{
			        header: dkp1_lbl.substr(0,6)+'...',
					tooltip: dkp1_lbl,
			        dataIndex: 'dkp1_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp1_lbl == '') ? true : false 
		        },
				{
			        header: dkp2_lbl.substr(0,6)+'...',
					tooltip: dkp2_lbl,
			        dataIndex: 'dkp2_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp2_lbl == '') ? true : false 
		        },
				{
			        header: dkp3_lbl.substr(0,6)+'...',
					tooltip: dkp3_lbl,
			        dataIndex: 'dkp3_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp3_lbl == '') ? true : false 
		        },
				{
			        header: dkp4_lbl.substr(0,6)+'...',
					tooltip: dkp4_lbl,
			        dataIndex: 'dkp4_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp4_lbl == '') ? true : false 
		        }
		    ];
			
			
			cm = new Ext.grid.ColumnModel(cmArr);
			
			store = new Ext.data.GroupingStore({
		        // load using HTTP
		        url: 'content.php?load=ajax-r_dkp&mode=playerdetails&charId='+dkpCharId,

		        reader: new Ext.data.JsonReader({
		               totalProperty: 'total',
					   root: 'rows'
		           }, dkpEntry),

		        sortInfo:{field:'event_time', direction:'DESC'},
				groupField: 'event_id'
		    });
			
			store.on('add', function(s,r,i)
			{
				//console.log(Ext.urlEncode(s.getAt(i).data));
				
				gto.r_dkp.spot.hide();
				grid.getEl().mask('Speichern...', 'custom-loading-indicator');
				
				//clearing the edit form
				var gef = Ext.getCmp('grid-edit-form').getForm();
				gef.setValues(
				{
					event_id: '',
					event_name: '',
					dkp1_event_dkp: 0,
					dkp2_event_dkp: 0,
					dkp3_event_dkp: 0,
					dkp4_event_dkp: 0,
					event_time: '',
					item_id: '',
					item_entered_name: '',
					dkp1_item_dkp: 0,
					dkp2_item_dkp: 0,
					dkp3_item_dkp: 0,
					dkp4_item_dkp: 0
				});
				
				Ext.Ajax.request({
					url: 'content.php',
					params: 'load=ajax-r_dkp&mode=add_dkp&char_id='+currentSubPage+'&'+Ext.urlEncode(s.getAt(i).data),
					success: function()
					{
						grid.getEl().unmask()
						Ext.Msg.alert('Information', 'Speichern erfolgreich', function()
						{
							Ext.getCmp('grid-edit-form').hide();
							store.reload();
						});
					}
				});
					
			});
			
			store.on('update', function(s,r,o)
			{
				//console.log(o);
				return true;
				//write changes to database
				if (o == Ext.data.Record.COMMIT)
				{	
					//Ext.Msg.wait('Information', 'Speichere Daten...');
					grid.getEl().mask('Speichern...', 'custom-loading-indicator');
					
					Ext.Ajax.request({
						url: 'content.php',
						params: 'load=ajax-r_dkp&mode=editchar&'+Ext.urlEncode(r.data),
						success: function()
						{
							//Ext.Msg.hide();
							grid.getEl().unmask()
							Ext.Msg.alert('Information', 'Speichern erfolgreich', function()
							{
								store.reload();
							});
						}
					});
				}
			}, this);
			store.on('beforeload', storeBeforeLoadHandler, this);
			store.on('load', storeLoadHandler, this);
			
			store.load();
			
			
			grid.on('celldblclick', showRecordForm, this);
			grid.reconfigure(store, cm);
		},
		
		loadItemDetails: function(item)
		{
			currentPage = 'itemdetails';
			//console.log('query data for item: '+item);
			
			var tb = grid.getTopToolbar();
			if (typeof(tb) != 'undefined')
			{
				clearToolBar(tb);
				var gtb = generateItemDetailsToolBar();
				for (i=0; i<gtb.length; i++)
				{
					tb.add(gtb[i]);
				}
				tb.render(Ext.getCmp('dkp-grid').tbar);
			}
			
			var tpl = new Ext.Template
			(
				'<table>',
					'<tr>',
						'<td>Details f&uuml;r&nbsp;&nbsp;</td>',
						'<td>&nbsp;&nbsp;<a href="http://de.wowhead.com/?item={name}" id="grid-top-item-id"><span>Loading Item...</span></a></td>',
						'<td>&nbsp;&nbsp;- &Oslash; &nbsp;&nbsp;<span id="grid-top-item-value">0 / 0 / 0</span></td>',
					'</tr>',
				'</table>'
			);
			
			grid.setTitle(tpl.apply({name: item}));
			
			itemEntry = Ext.data.Record.create(
			[
				{name: 'cid'},
				{name: 'cname'},
				{name: 'class_id', sortType: getClassSort},
				{name: 'dkp1', type: 'float'},
				{name: 'dkp2', type: 'float'},
				{name: 'dkp3', type: 'float'},
				{name: 'dkp4', type: 'float'},
				{name: 'log_id'},
				{name: 'source_id'},
				{name: 'target_id'},
				{name: 'item_log_id'},
				{name: 'event_id', sortType: getEventSort},
				{name: 'item_id'},
				{name: 'item_entered_name'},
				{name: 'dkp1_item_value', type: 'float'},
				{name: 'dkp2_item_value', type: 'float'},
				{name: 'dkp3_item_value', type: 'float'},
				{name: 'dkp4_item_value', type: 'float'},
				{name: 'item_time', type: 'float'},
				{name: 'event_name', sortType: getEventSort},
				{name: 'dkp1_event_value', type: 'float'},
				{name: 'dkp2_event_value', type: 'float'},
				{name: 'dkp3_event_value', type: 'float'},
				{name: 'dkp4_event_value', type: 'float'},
				{name: 'event_time', type: 'float'},
				{name: 'event_grouping', mapping: 'event_id', type: 'float'}
			]);
			
			var cw = parseInt(280/tCols);
			var cmArr = 
			[
				{
					id: 'name-name',
				    header: " ",
				    dataIndex: 'class_id',
				    width: 30,
					renderer: getClassIcon,
					menuDisabled: true
				},
				{
					id: 'name',
				    header: "Item",
				    dataIndex: 'cname',
				    width: 190,
					renderer: ClassNameRenderer,
					menuDisabled: true
				},
				{
					id: 'playerDetailCol',
				    header: " ",
				    dataIndex: 'cid',
				    width: 25,
					align: 'center',
					renderer: ShowPlayerDetailsRenderer,
					menuDisabled: true
				},
				{
				    header: '',
				    dataIndex: 'event_name',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
				    header: '',
				    dataIndex: 'event_id',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
				    header: '',
				    dataIndex: 'log_id',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
					id: 'eventDetailCol',
				    header: " ",
				    dataIndex: 'event_id',
				    width: 25,
					align: 'center',
					renderer: ShowEventDetailsRenderer,
					menuDisabled: true
				},
				{
			        header: dkp1_lbl.substr(0,6)+'...',
					tooltip: dkp1_lbl,
			        dataIndex: 'dkp1_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp1_lbl == '') ? true : false 
		        },
				{
			        header: dkp2_lbl.substr(0,6)+'...',
					tooltip: dkp2_lbl,
			        dataIndex: 'dkp2_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp2_lbl == '') ? true : false 
		        },
				{
			        header: dkp3_lbl.substr(0,6)+'...',
					tooltip: dkp3_lbl,
			        dataIndex: 'dkp3_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp3_lbl == '') ? true : false 
		        },
				{
			        header: dkp4_lbl.substr(0,6)+'...',
					tooltip: dkp4_lbl,
			        dataIndex: 'dkp4_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp4_lbl == '') ? true : false 
		        }
		    ];
			
			cm = new Ext.grid.ColumnModel(cmArr);
			
			store = new Ext.data.GroupingStore({
		        // load using HTTP
		        url: 'content.php?load=ajax-r_dkp&mode=itemdetails&itemId='+item,

		        reader: new Ext.data.JsonReader({
		               totalProperty: 'total',
					   root: 'rows'
		           }, itemEntry),

		        sortInfo:{field:'event_time', direction:'DESC'},
				groupField: 'event_id'
		    });
			
			store.on('beforeload', storeBeforeLoadHandler, this);
			store.on('load', storeLoadHandler, this);
			
			store.load();
			
			grid.reconfigure(store, cm);
		},
		
		loadEventDetails: function(event)
		{
			currentPage = 'eventdetails';

			var tb = grid.getTopToolbar();
			if (typeof(tb) != 'undefined')
			{
				clearToolBar(tb);
				var gtb = generateEventDetailsToolBar();
				for (i=0; i<gtb.length; i++)
				{
					tb.add(gtb[i]);
				}
				tb.render(Ext.getCmp('dkp-grid').tbar);
			}
			
			var tpl = new Ext.Template
			(
				'<table>',
					'<tr>',
						'<td>Details f&uuml;r&nbsp;&nbsp;</td>',
						'<td>&nbsp;&nbsp;<span id="grid-top-event-name">Loading Event {name}...</span></td>',
					'</tr>',
				'</table>'
			);
			
			grid.setTitle(tpl.apply({name: event}));
			
			itemEntry = Ext.data.Record.create(
			[
				{name: 'cid'},
				{name: 'cname'},
				{name: 'class_id', sortType: getClassSort},
				{name: 'dkp1', type: 'float'},
				{name: 'dkp2', type: 'float'},
				{name: 'dkp3', type: 'float'},
				{name: 'dkp4', type: 'float'},
				{name: 'log_id'},
				{name: 'source_id'},
				{name: 'target_id'},
				{name: 'item_log_id'},
				{name: 'event_id', sortType: getEventSort},
				{name: 'item_id'},
				{name: 'item_entered_name'},
				{name: 'dkp1_item_value', type: 'float'},
				{name: 'dkp2_item_value', type: 'float'},
				{name: 'dkp3_item_value', type: 'float'},
				{name: 'dkp4_item_value', type: 'float'},
				{name: 'item_time', type: 'float'},
				{name: 'event_name', sortType: getEventSort},
				{name: 'dkp1_event_value', type: 'float'},
				{name: 'dkp2_event_value', type: 'float'},
				{name: 'dkp3_event_value', type: 'float'},
				{name: 'dkp4_event_value', type: 'float'},
				{name: 'event_time', type: 'float'},
				{name: 'event_grouping', mapping: 'event_id', type: 'float'},
				{name: 'cid-grp', mapping: 'cname'}
			]);
			
			var cw = parseInt(280/tCols);
			var cmArr = 
			[
				{
					id: 'name-name',
				    header: " ",
				    dataIndex: 'class_id',
				    width: 30,
					renderer: getClassIcon,
					menuDisabled: true
				},
				{
					id: 'cidgrp',
				    header: " ",
				    dataIndex: 'cid-grp',
				    //width: 30,
					//renderer: getClassIcon,
					hidden: true,
					menuDisabled: true
				},
				{
					id: 'name',
				    header: "Item",
				    dataIndex: 'item_entered_name',
				    width: 190,
					renderer: ItemLinkRenderer,
					menuDisabled: true
				},
				{
					id: 'playerDetailCol',
				    header: " ",
				    dataIndex: 'cid',
				    width: 25,
					align: 'center',
					renderer: ShowPlayerDetailsRenderer,
					menuDisabled: true
				},
				{
					id: 'itemDetailCol',
				    header: " ",
				    dataIndex: 'item_id',
				    width: 25,
					align: 'center',
					renderer: ShowItemDetailsRenderer,
					menuDisabled: true
				},
				{
				    header: '',
				    dataIndex: 'event_name',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
				    header: '',
				    dataIndex: 'event_id',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				{
				    header: '',
				    dataIndex: 'log_id',
				    width: 220,
					renderer: EventRaidRenderer,
					menuDisabled: true,
					hidden: true
				},
				/*{
					id: 'eventDetailCol',
				    header: " ",
				    dataIndex: 'event_id',
				    width: 25,
					align: 'center',
					renderer: ShowEventDetailsRenderer,
					menuDisabled: true
				},*/
				{
			        header: dkp1_lbl.substr(0,6)+'...',
					tooltip: dkp1_lbl,
			        dataIndex: 'dkp1_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp1_lbl == '') ? true : false 
		        },
				{
			        header: dkp2_lbl.substr(0,6)+'...',
					tooltip: dkp2_lbl,
			        dataIndex: 'dkp2_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp2_lbl == '') ? true : false 
		        },
				{
			        header: dkp3_lbl.substr(0,6)+'...',
					tooltip: dkp3_lbl,
			        dataIndex: 'dkp3_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp3_lbl == '') ? true : false 
		        },
				{
			        header: dkp4_lbl.substr(0,6)+'...',
					tooltip: dkp4_lbl,
			        dataIndex: 'dkp4_item_value',
					renderer: DkpNumberRenderer,
			        width: cw,
			        align: 'right',
					menuDisabled: true,
					hidden: (dkp4_lbl == '') ? true : false 
		        }
		    ];
			
			cm = new Ext.grid.ColumnModel(cmArr);
			
			store = new Ext.data.GroupingStore({
		        // load using HTTP
		        url: 'content.php?load=ajax-r_dkp&mode=eventdetails&eventId='+event,

		        reader: new Ext.data.JsonReader({
		               totalProperty: 'total',
					   root: 'rows'
		           }, itemEntry),

		        sortInfo:{field:'event_time', direction:'DESC'},
				groupField: 'cid-grp'
		    });
			
			store.on('beforeload', storeBeforeLoadHandler, this);
			store.on('load', storeLoadHandler, this);
			
			store.load();
			
			grid.reconfigure(store, cm);
		}
	}
}(); // end of app
 
// end of file
