
var contextNode;

function moveFolderToFolder(sourceId, targetId) {
	var sFolder = sourceId.substr(5, 1);
	var sSubfolder = getFolderId(sourceId); 
	var tFolder = targetId.substr(5, 1);
	var tSubfolder = getFolderId(targetId); 

    Ext.Ajax.request({
        url:'folder.php?action=moveToFolder&sFolder=' + sFolder + '&sSubfolder=' + sSubfolder +
        								  '&tFolder=' + tFolder + '&tSubfolder=' + tSubfolder,
        success:function(response, action) {
			var obj = Ext.decode(response.responseText);
			if (obj.success) {   
				targetNode = treeTabellen.getNodeById(targetId); 
				sourceNode = treeTabellen.getNodeById(sourceId);    
				newId = targetNode.id + "." + getFolderId(sourceNode.id);
				sourceNode.id = sourceNode.id + ".delete";
				newSourceNode = new Ext.tree.AsyncTreeNode({
					id: newId,
					text: sourceNode.text,
					iconCls: 'folder',
					leaf: sourceNode.hasChildNodes() ? false : true,
					children: sourceNode.childNodes,
					editable:true, 
					draggable:true 
				});

				targetNode.appendChild(newSourceNode);
				targetNode.leaf = false;
				targetNode.expand();
				sourceParentNode = sourceNode.parentNode;
				sourceNode.remove();
				newSourceNode.select();
            }
        	else {
	          	Ext.MessageBox.alert(text_29, obj.msg);
    	    }
        }
    });
}

function renameFolder(nodeId, newValue) {            
	Ext.Ajax.request({
		url:'folder.php?action=renameFolder&FolderID=' + nodeId + '&Name=' + newValue,
	   	success:function(response, options) {      
    		Ext.getCmp('content-panel').setTitle(newValue);
			var obj = Ext.decode(response.responseText);
			if (!obj.success) { 
	            Ext.MessageBox.alert(text_29, obj.msg);
			}
		}
	});
}
                  
function addFolder() {            
	Ext.Ajax.request({                                   
		url:'folder.php?action=newFolder&ParentFolderID=' + getFolderId(contextNode.id) + 
		                               '&FullParentFolderID=' + contextNode.id + 
									   '&Name=' + text_151 + "&Folder=" + contextNode.id.substr(5,1),
	   	success:function(response, options) {      
			var obj = Ext.decode(response.responseText);
			if (obj.success) { 
    		  	var newNode = contextNode.appendChild(new Ext.tree.AsyncTreeNode({
                   	id:obj.newFolderID, text: text_151, iconCls:'folder', leaf:true 
				}));                
				contextNode.leaf = false;
				contextNode.expand(false, true, function(node) {
					(function(){
						contextNode = newNode;
	                	treeTabellen.fireEvent('click', newNode);
						(function(){treeEditor.triggerEdit(newNode);}.defer(10));
					}.defer(100));
				});     
			}                            
			else {
	            Ext.MessageBox.alert(text_29, obj.msg);
			}
		}
	});
}
                       
function getParentFolderId(nodeId) {
	var arr = nodeId.split(".");
	var new_id = ""; 
	for (var i = 0; i < arr.length-1; i++) {
		if (new_id.length > 0)
			new_id += ".";
		new_id += arr[i];
	}
	return new_id       
}

function getFolderId(nodeId) {
	var arr = nodeId.split("."); 
	if (arr.length == 1)
		return 0; 
	return arr[arr.length-1];
}

function deleteFolder() {
	Ext.Msg.show({
		title:text_49,
		msg:text_148 + ' <b>' + contextNode.text + '</b>' + text_149,
		icon:Ext.Msg.WARNING,
		buttons:Ext.Msg.YESNO,
		scope:this,
		fn:function(response) {
			// do nothing if answer is not yes
			if('yes' !== response) {
				return;
			}
			Ext.Ajax.request({
				method : 'POST',
				url:'folder.php?action=deleteFolder&FolderID=' + getFolderId(contextNode.id),
			   	success:function(response, options) {      
					var obj = Ext.decode(response.responseText);
					if (obj.success) { 
		                treeTabellen.fireEvent('click', treeTabellen.getNodeById(getParentFolderId(contextNode.id)));
		    		  	contextNode.remove();
					}                            
					else {
			            Ext.MessageBox.alert(text_29, obj.msg);
					}
				}
			});
		}
	});
}

var treeMenuA  = new Ext.Action({
    text : text_150,   			// Umbenennen
    iconCls:'pencil',
    handler : function() {
		(function(){treeEditor.triggerEdit(contextNode);}.defer(10));
	}
});

var treeMenuB  = new Ext.Action({
    text : text_48,   			// Löschen
    iconCls:'cancel',
    handler : function() {
    	deleteFolder();
	}
});

var treeMenuC  = new Ext.Action({
    text : text_151,        	// Neuer Ordner
    iconCls:'folder-add',
    handler : function() {
    	addFolder();
    }
});

var treeMenuSmall = new Ext.menu.Menu({
	items: [ treeMenuC ]
});

var treeMenuBig = new Ext.menu.Menu({
	items: [ treeMenuA, treeMenuB, treeMenuC ]
});

var treeTabellen = new Ext.tree.TreePanel({  
	id:'treeTabellen',    
	title:text_71,
    autoScroll:true,
    animate:true,
    enableDD:true,       
	ddGroup:'grid2tree',
    containerScroll: true,
    rootVisible: false,
    frame: true,
	region:'center',
    split: true,
    height: 300,
    minSize: 150,
	loader: new Ext.tree.TreeLoader({dataUrl:"tables.php"}),
    root: new Ext.tree.AsyncTreeNode({expanded: true}),
    useArrows:false,
	lines:true,
	dropConfig: {
		dropAllowed : true,
		ddGroup:'grid2tree',
		notifyDrop : function (source, e, data) {			
			var nodeId = this.lastOverNode.node.id;

            if (data.grid != undefined) {
            	moveDocToFolder(nodeId.substr(5, 1), getFolderId(nodeId));
            }
			else if (data.node != undefined) {
				moveFolderToFolder(data.node.id, nodeId);
			}

			this.cancelExpand();
			this.removeDropIndicators(this.lastOverNode); 
			return true;
		},
		onNodeOver : function(n, dd, e, data) {
			var pt = this.getDropPoint(e, n, dd);
			var node = n.node;
                
			if(!this.expandProcId && pt == "append" && node.hasChildNodes() && !n.node.isExpanded()) {
				this.queueExpand(node);
			} else if(pt != "append") {
				this.cancelExpand();
			}
			
			if (node.id.substr(0, 5) != 'gridD' || node.id == 'gridD') {
				return this.dropNotAllowed;
			}
			
			var returnCls = this.dropNotAllowed;
			if(this.isValidDropPoint(n, pt, dd, e, data)) {
				if(pt) {
					var el = n.ddel;
					var cls;
					returnCls = "x-tree-drop-ok-append";
					cls = "x-tree-drag-append";
					if(this.lastInsertClass != cls){
						Ext.fly(el).replaceClass(this.lastInsertClass, cls);
						this.lastInsertClass = cls;
					}
				}
			}
			return returnCls;
		}
	},
	listeners: {
    	'expand': function(panel) {
	    	var sn = this.selModel.selNode;
	    	if (sn != null) {   			//selNode is null on initial selection
	        	treeTabellen.fireEvent('click', sn);
			}
		} ,
		'contextmenu': function(node, e) {
			if (node.id.substr(0, 5) != 'gridD')
				return;
				        
			var menu;	
			if (node.id.length == 6) 
				menu = treeMenuSmall;
			else
				menu = treeMenuBig;

			node.select();
		    contextNode = node;
			menu.showAt(e.getXY());
		}
	}
});	                                                     

function reloadTableData(TabelleID, filter, reloadDefinitions, reloadData) {
	new Ext.data.Connection().request({
	    url: 'column_definitions.php', 
	 	params: 'TabelleID='+TabelleID,
		failure: function(response, opts) {
		      Ext.MessageBox.alert(text_29, Ext.decode(response.responseText).msg);
		},
	    success: function(response, opts) {    
			if (reloadDefinitions) {
		      	currentColumnDefinitions.data = Ext.decode(response.responseText);         
				Feld = Ext.data.Record.create(currentColumnDefinitions.data.fields);
				currentColumnDefinitions.data.columns[0] = new Ext.grid.RowNumberer();
				currentColumnDefinitions.data.columns[1] = tableEditor_sm; 
				var te;
				var f;
				if (currentColumnDefinitions.data.schreiben == 1) {
					te = Ext.getCmp('tableEditor');                
					f = filters;
					pagingCombo.setValue("");				
				}
				else {
					f = filtersB;
		        	te = Ext.getCmp('tableBrowser');
					pagingComboB.setValue("");				
				}
				var numFilters = f.getFilterData().length;
				f.clearFilters();
				for (var i = 0; i < currentColumnDefinitions.data.filters.length; i++) {
					var f1 = currentColumnDefinitions.data.filters[i];
					f.addFilter(f1);
				}	
				var colModel = new Ext.grid.ColumnModel(currentColumnDefinitions.data.columns);		
				tableStore = new Ext.data.Store({
		        	reader: new Ext.data.JsonReader({
									fields: currentColumnDefinitions.data.fields,
	                                root: 'rows', 
									successProperty: 'success', 
									totalProperty: 'results' 
	   				}),
		        	proxy: new Ext.data.HttpProxy({url: 'data.php?TabelleID=' + TabelleID + '&action=showData&Filter='+filter}),
					remoteSort: true
				});                              
				tableStore.on('exception', function(proxy, type, action, options, response, arg) {
			         var object = Ext.util.JSON.decode(response.responseText);   
			         Ext.MessageBox.alert(text_29, object.msg);   
				});
				te.reconfigure(tableStore, colModel);  
    			if (currentColumnDefinitions.data.schreiben == 1)
					pagingToolbar.bindStore(tableStore, true);
				else
					pagingToolbarB.bindStore(tableStore, true);
	    		Ext.getCmp('content-panel').layout.setActiveItem(te.id);
	    		Ext.getCmp('content-panel').setTitle(currentColumnDefinitions.data.name);
				if (numFilters == 0) 
		   	   		te.store.reload({params:{start: 0, limit: 25}});
				if (currentColumnDefinitions.data.schreiben == 1) {
					Ext.getCmp('te_s_sms').setVisible(currentColumnDefinitions.data.sms == 1);
					Ext.getCmp('te_s_email').setVisible(currentColumnDefinitions.data.email == 1);
				}
				else {
					Ext.getCmp('te_l_sms').setVisible(currentColumnDefinitions.data.sms == 1);
					Ext.getCmp('te_l_email').setVisible(currentColumnDefinitions.data.email == 1);
				}			
			}		
			else {
	        	tableStore.proxy = new Ext.data.HttpProxy({url: 'data.php?TabelleID=' + TabelleID + '&action=showData&Filter='+filter});
				if (reloadData) {
		   	   		tableStore.reload();
				}
			}	
		}
	});					
}   	   
		
treeTabellen.on('click', function(n){
	var sn = this.selModel.selNode || {}; // selNode is null on initial selection
    Ext.getCmp('myTabPanel').activate(0);
    if (n.id.substr(0, 5) == 'gridT' && n.id.length > 5) {
		currentFilter = "";
		Ext.getCmp('filter-tab-edit').setValue("");
		Ext.getCmp('filter-tab-browse').setValue("");
		var TabelleID = n.id.substr(5);
		reloadTableData(n.id.substr(5), '', true, true);
    }
	else if (n.id.substr(0, 5) == 'gridD' && n.id.length > 5) {
		currentFilter = "";
		Ext.getCmp('filter-doc-edit').setValue("");
		dokument_folder = n.id.substr(5, 1);
		dokument_subfolder = getFolderId(n.id);
		dokumentStore = new Ext.data.GroupingStore({  
			reader: new Ext.data.JsonReader({fields: DokumentFelder}),
			proxy: new Ext.data.HttpProxy({url: 'dokument_data.php?Folder=' + dokument_folder +
																  '&action=showData' + 
																  '&Subfolder=' + dokument_subfolder})
		});
		dokumentEditor.reconfigure(dokumentStore, dokumentEditor.getColumnModel());
		Ext.getCmp('content-panel').layout.setActiveItem(dokumentEditor.id);
		Ext.getCmp('content-panel').setTitle(n.text);
   	   	dokumentEditor.store.reload();  
		reloadDokumentSize();
	}
});

var treeEditor = new Ext.tree.TreeEditor(treeTabellen,{},{
	listeners:{
    	'complete': function(editor, value, startValue) {
			renameFolder(getFolderId(editor.editNode.id), value);
		}
    }            
});

var treeEinstellungen = new Ext.tree.TreePanel({
    title: text_72,
    id: 'treeEinstellungen',
    useArrows:false,
    autoScroll:true,
    animate:true,
    enableDD:false,
    containerScroll: true,
    rootVisible: false,
    frame: true,
	region:'south',
    split: true,
    height: 300,
    minHeight: 100,
    minSize: 200,
    
	loader: new Ext.tree.TreeLoader({dataUrl:"settings.php"}),
    root: new Ext.tree.AsyncTreeNode({expanded: true})
});	    
    
/* TODO: Bei Tabellen und Benutzer kommt immer ein isDirty auch wenn nicht geändert wurde
            
treeEinstellungen.on('beforeclick', function(node, event){
	var sn = this.selModel.selNode // selNode is null on initial selection
	if (!sn)
		return true;

	var nodeId = sn.attributes.id;
	var dirty;   
	         
	if (nodeId.substr(0, 6) == 'adminB')
	    var dirty = xmlBenutzer.form.isDirty();
	else if (nodeId.substr(0, 6) == 'adminG') 
	    var dirty = xmlGruppe.form.isDirty();
	else if (nodeId.substr(0, 6) == 'adminT')
	    var dirty = xmlTabelle.form.isDirty();

	if (!dirty)
		return true;

    Ext.MessageBox.show({
           title:text_78,
           msg: text_94,
           modal:true,
           buttons: Ext.MessageBox.YESNO,
           icon: Ext.MessageBox.QUESTION,
           fn: function(btn) {
				if (btn == 'yes') {
					if (nodeId.substr(0, 6) == 'adminB')
						storeBenutzer(false);
					else if (nodeId.substr(0, 6) == 'adminG') 
						storeGruppe(false);
					else if (nodeId.substr(0, 6) == 'adminT')
						storeTabelle(false);
				}
    		  	Ext.getCmp('treeEinstellungen').selectPath((Ext.getCmp('treeEinstellungen').
					getNodeById(nodeId).getPath()));
				Ext.getCmp('treeEinstellungen').fireEvent('click', node);
		   }
	});
	return false; 
});
*/	        


treeEinstellungen.on('click', function(n){
	var sn = this.selModel.selNode || {}; // selNode is null on initial selection
    Ext.getCmp('myTabPanel').activate(0);
	if(n.leaf || n.id == 'adminSMS') {  

		Ext.getCmp('content-panel').setTitle(n.attributes.text);

        if (n.id.substr(0, 6) == 'adminT') {
			var TabelleID = -1;
        	Ext.getCmp('content-panel').layout.setActiveItem(editTabelle.id);  
			if (n.id.substr(6) == 'Neu') {
				loeschenTabelle.disable();
				importExcel.enable();
			}
			else {
				TabelleID = n.id.substr(6);
				loeschenTabelle.enable();
				importExcel.disable();
			}
	    	xmlTabelle.getForm().load({url:'table_data.php?action=read&TabelleID='+TabelleID, 
	                                    waitMsg:text_41});
			gridTabellenFelder.store.proxy = new Ext.data.HttpProxy({url: 'felder.php?action=showData&TabelleID='+TabelleID});
			gridTabellenFelder.store.reload();  
	
		}
		else if (n.id.substr(0, 6) == 'adminG') {
			var GruppeID = -1;
        	Ext.getCmp('content-panel').layout.setActiveItem(editGruppe.id);  
			if (n.id.substr(6) == 'Neu') {
				loeschenGruppe.disable();
			}
			else {
				GruppeID = n.id.substr(6);
				loeschenGruppe.enable();
			}
	    	xmlGruppe.getForm().load({url:'group_data.php?action=read&GruppeID='+GruppeID, 
	                                    waitMsg:text_41});
			gridGruppenBerechtigungen.store.proxy = new Ext.data.HttpProxy({url: 'berechtigungen.php?action=showData&GruppeID='+GruppeID});
			gridGruppenBerechtigungen.store.reload();  
	
		}
		else if (n.id.substr(0, 6) == 'adminB') {
        	Ext.getCmp('content-panel').layout.setActiveItem(editBenutzer.id);  
			if (n.id.substr(6) == 'Neu') {
				var BenutzerID = -1;
				loeschenBenutzer.disable();
			}
			else {
				var BenutzerID = n.id.substr(6);
				loeschenBenutzer.enable();
			}      
			Ext.getCmp('Gruppe').store.reload();
	    	xmlBenutzer.getForm().load({url:'user_data.php?action=read&BenutzerID='+BenutzerID, 
	                                    waitMsg:text_41});
		}
		else if (n.id == 'adminSMS') {
        	Ext.getCmp('content-panel').layout.setActiveItem(editSMSLog.id);  
	    	xmlSMS.getForm().load({url:'sms_data.php?action=getGuthabenXML', 
	                                  waitMsg:text_41});
			gridSMSLog.store.proxy = new Ext.data.HttpProxy({url:'sms_data.php?action=getLog'});
			gridSMSLog.store.reload();  
	
		}
	}
});



