﻿Ext.BLANK_IMAGE_URL = '/common/images/s.gif';

Ext.ns('CSX.Layout');

CSX.Layout.MenuTBar = Ext.extend(Ext.Toolbar, {
	
	// Default Toolbar settings
	treepanel: {},
	genericType: '',

	// private
	initComponent:function() {
	
		var me = this;

		// Private configs - can not be overridden from outside the extension
		var config = {
			items: [{
				xtype: 'buttongroup',
				itemId: 'id_buttongroup',
				columns: 4,
				title: 'Tilgængelige funktioner',
				items: [{
					xtype:'button',
					itemId: 'id_createsubmenu',
					text: 'Opret<br>underside',
					height: 60,
					scale: 'medium',
					rowspan: 3,
					iconCls: 'silkTable_row_insert',
					iconAlign: 'top',
					disabled: true,
					scope: this,
					handler: me.insertHandler
				},{
					xtype:'button',
					itemId: 'id_activatemenu',
					text: 'Publicér<br>side',
					height: 60,
					width: 60,
					scale: 'medium',
					rowspan: 3,
					iconCls: 'csxOnline',
					iconAlign: 'top',
					disabled: true,
					scope: this,
					handler: function() { me.activateHandler('act'); }
				},{
					xtype:'button',
					itemId: 'id_deactivatemenu',
					text: 'Deaktiver<br>side',
					height: 60,
					width: 60,
					scale: 'medium',
					rowspan: 3,
					iconCls: 'csxOffline',
					iconAlign: 'top',
					hidden: true,
					scope: this,
					handler: function() { me.activateHandler('dea'); }
				},{
					xtype:'button', 
					itemId: 'id_renamemenu',
					text: 'Omdøb side', 
					scale: 'small',
					iconCls: 'silkTable_rename',
					disabled: true,
					scope: this,
					handler: me.renameHandler
				},{
					xtype:'button', 
					itemId: 'id_deletemenu',
					text: 'Slet side&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',
					scale: 'small',
					iconCls: 'silkTable_delete',
					disabled: true,
					scope: this,
					handler: me.deleteHandler
/*				},{
					xtype:'button', 
					itemId: 'id_propertiesmenu',
					text: 'Egenskaber',
					scale: 'small',
					iconCls: 'silkTable_gear',
					disabled: true,
					handler: function() {
						location.href='menu.asp?'+curMenuPar+'&smid='+Ext.getCmp('id_treeMenu').getSelectionModel().getSelectedNode().id;
					}*/
				}]
			}]
		}; // eo config object

		// apply config
		Ext.apply(this, Ext.apply(this.initialConfig, config));

		// call parent
		CSX.Layout.MenuTBar.superclass.initComponent.apply(this, arguments);

		// setup events
		this.addEvents(
			'btnclick'
		);

	}, // eo function initComponent
	
	updateButtonState: function(node) {
		if(doTrace) console.log('CSX.Layout.MenuTBar.updateButtonState()');

		var isRoot = (node == null || node.id == 'source');
		var isActive = (!isRoot && node.text.indexOf('color: #888;') == -1);

		var btngrp = this.getComponent('id_buttongroup');
		btngrp.getComponent('id_createsubmenu').setDisabled(false);

		btngrp.getComponent('id_activatemenu').setDisabled(isRoot);
		btngrp.getComponent('id_deactivatemenu').setDisabled(isRoot);
//		btngrp.getComponent('id_propertiesmenu').setDisabled(isRoot);
		btngrp.getComponent('id_renamemenu').setDisabled(isRoot);
		
		btngrp.getComponent('id_deletemenu').setDisabled(isRoot ? !isSuperuser : false);
		
		btngrp.getComponent('id_activatemenu').setVisible(!isActive);
		btngrp.getComponent('id_deactivatemenu').setVisible(isActive);

//		btngrp.getComponent('id_propertiesmenu').setVisible(typeof(loadPage) != 'function');
	},

	insertHandler: function() {
		if(doTrace) console.log('CSX.Layout.MenuTBar.insertHandler()');
		var me = this;
		var tree = me.ownerCt;

		var sel = tree.getSelectionModel().getSelectedNode();
		if (sel) {
			var tmpNodeID = sel.id;
			if (tmpNodeID == 'source') { tmpNodeID = 0 }

			var insertMenuForm = {
				xtype: 'form',
				itemId: 'id_insertMenuForm',
				frame: true,
				bodyStyle: 'padding: 4px 1px 1px 4px',
				monitorValid: true,
				buttonAlign: "right",
				items: [{
					xtype: 'hidden',
					fieldLabel: 'ID',
					name: 'mID',
					value: tmpNodeID,
					anchor:'99%'
				},{
					xtype: 'textfield',
					fieldLabel: 'Navn på ny side',
					name: 'mName',
					allowBlank: false,
					anchor:'99%'
				}],
				listeners: {
					'clientvalidation': function(form, valid) {
						insertMenuWin.getFooterToolbar().getComponent('id_btnSubmit').setDisabled(!valid);
					}
				}
			};

			var insertMenuWinConfig = {
				title: 'Opret ny underside',
				width: 400,
				modal: true,
				closeAction: 'close',
				items: [insertMenuForm],
				buttons: [{
					text: 'Opret underside',
					itemId: 'id_btnSubmit',
					iconCls: 'csxBtnSave',
					formBind: true,	 
					handler:function(){ 
						insertMenuWin.getComponent('id_insertMenuForm').getForm().submit({ 
							method:'POST', 
							url: 'xhr/xhrMenu.asp?cmd=new',
							params: {
								gt: me.genericType
							},
							waitTitle:'Opretter underside...',
							waitMsg:'Gemmer data...',
							success:function(form, action){
								var obj = Ext.util.JSON.decode(action.response.responseText); 
								if (obj.parentid == 0) {
									var parentNode = tree.getRootNode();
								} else {
									var parentNode = tree.getNodeById(obj.parentid);
								}
								parentNode.appendChild(obj.node);
								parentNode.expand();

								insertMenuWin.close();
							},
							failure:function(form, action){ 
								if(action.failureType == 'server'){ 
									obj = Ext.util.JSON.decode(action.response.responseText); 
									Ext.Msg.alert('Oprettelse fejlede...', obj.errors.reason); 
								} else { 
									Ext.Msg.alert('Warning!', 'Authentication server is unreachable : ' + action.response.responseText); 
								} 
							} 
						}); 
					} 
				},{
					text: 'Annuller',
					iconCls: 'csxBtnCancel',
					handler: function(){
						insertMenuWin.hide();
					}
				}]
			};

			var insertMenuWin = new Ext.Window(insertMenuWinConfig).show(null, function() {
			});
		}
	},
	
	renameHandler: function() {
		if(doTrace) console.log('CSX.Layout.MenuTBar.renameHandler()');
		var me = this;
		var tree = me.ownerCt;

		var renameMenuForm = {
			xtype: 'form',
			itemId: 'id_renameMenuForm',
			frame: true,
			bodyStyle: 'padding: 4px 1px 1px 4px',
			monitorValid: true,
			buttonAlign: "right",
			items: [{
				xtype: 'hidden',
				fieldLabel: 'ID',
				id: 'id_renmenuMID',
				name: 'mID',
				anchor:'99%'
			},{
				xtype: 'textfield',
				id: 'id_newmenuname',
				fieldLabel: 'Nyt navn på side',
				name: 'mName',
				allowBlank: false,
				anchor:'99%'
			}],
			listeners: {
				'clientvalidation': function(form, valid) {
//					Ext.getCmp('id_btnSubmit').setDisabled(!valid);
//					renameMenuWin.getFooterToolbar().getComponent('id_btnSubmit').setDisabled(!valid);
				}
			}
		};

		var renameMenuWinConfig = {
			title: 'Omdøb menupunkt',
			width: 400,
			modal: true,
			closeAction: 'close',
			items: [renameMenuForm],
			buttons: [{
				text: 'Gem',
				itemId: 'id_btnSubmit',
				iconCls: 'csxBtnSave',
				formBind: true,
				handler:function(){
					renameMenuWin.getComponent('id_renameMenuForm').getForm().submit({ 
						method:'POST', 
						url: 'xhr/xhrMenu.asp?cmd=ren',
						params: {
							gt: me.genericType
						},
						waitTitle:'Omdøber side...',
						waitMsg:'Gemmer data...',
						success:function(form, action){
							var obj = Ext.util.JSON.decode(action.response.responseText); 
							
							tree.getNodeById(obj.id).setText(obj.text);

							if (typeof(loadPage) == 'function') loadPage(obj.id);

							renameMenuWin.close();
						},
						failure:function(form, action){ 
							if(action.failureType == 'server'){ 
								obj = Ext.util.JSON.decode(action.response.responseText); 
								Ext.Msg.alert('Oprettelse fejlede...', obj.errors.reason); 
							} else { 
								Ext.Msg.alert('Warning!', 'Authentication server is unreachable : ' + action.response.responseText); 
							} 
						} 
					}); 
				} 
			},{
				text: 'Annuller',
				iconCls: 'csxBtnCancel',
				handler: function() { renameMenuWin.close(); }
			}]
		};

		var node = tree.getSelectionModel().getSelectedNode();
		if (node) {
			var tmpNodeName = node.text.replace(/&nbsp;/, '');
			tmpNodeName = tmpNodeName.replace(/<[^>]*>/g, '');

			var renameMenuWin = new Ext.Window(renameMenuWinConfig).show(null, function() {
				this.getComponent('id_renameMenuForm').getForm().findField('mID').setValue(node.id);
				this.getComponent('id_renameMenuForm').getForm().findField('mName').setValue(tmpNodeName);
			});	
		}
	},

	activateHandler: function(state) {
		if(doTrace) console.log('CSX.Layout.MenuTBar.activateHandler()');
		var me = this;
		var tree = me.ownerCt;

		var node = tree.getSelectionModel().getSelectedNode();
		if (node) {
			var conn = new Ext.data.Connection();
			conn.request({
				url: 'xhr/xhrMenu.asp?cmd=state',
				params: {
					mid: node.id,
					s: state,
					gt: me.genericType
				},
				success: function(resp,opt) {
					var obj = Ext.util.JSON.decode(resp.responseText); 
					node.setText(obj.text);
					
					var btngrp = me.getComponent('id_buttongroup');

					if (obj.text.indexOf('color: #888;') != -1) {
						btngrp.getComponent('id_activatemenu').show();
						btngrp.getComponent('id_deactivatemenu').hide();
					} else {
						btngrp.getComponent('id_activatemenu').hide();
						btngrp.getComponent('id_deactivatemenu').show();
					}
				}
			});
		}
	},

	deleteHandler: function() {
		if(doTrace) console.log('CSX.Layout.MenuTBar.deleteHandler()');
		var me = this;
		var tree = me.ownerCt;

		var node = tree.getSelectionModel().getSelectedNode();
		if (node) {
			var hasChildNode = Boolean(node.firstChild);

			if (node.getPath() != '/source') {
				var msg = (hasChildNode) ? 'Er du sikker på, at du vil slette menupunktet samt tilhørende indhold?<br><br>BEMÆRK: Alle undermenupunkter og deres indhold vil også blive slettet!' : 'Er du sikker på, at du vil slette menupunktet samt tilhørende indhold?';
			
				var prevNode = node.previousSibling;
				if (prevNode == null) prevNode = node.parentNode;

				Ext.Msg.show({
					title: 'Bekræft sletning',
					msg: msg,
					width: 300,
					buttons: Ext.Msg.YESNO,
					icon: Ext.MessageBox.QUESTION,
					fn: function(btn) {
						if (btn == 'yes') {
							var conn = new Ext.data.Connection();
							conn.request({
								url: 'xhr/xhrMenu.asp?cmd=delm',
								params: {
									id: node.id,
									gt: me.genericType
								},
								success: function(resp,opt) {
									node.remove(true);
									prevNode.select();
									me.updateButtonState(prevNode);
									if (typeof(loadPage) == 'function') loadPage(prevNode.id);
								}
							});
						}
					}
				});
			}
		}
	}

});
Ext.reg('csxMenuTBar', CSX.Layout.MenuTBar);

