Ext.ns('Ext.ux.RapidApp.NavCore');

// This is currently used only by RapidApp::NavCore plugin!

Ext.ux.RapidApp.NavCore.SaveSearchHandler = function(cmp,cnf) {
	
	var save_url = cnf.save_url;
	var search_id = cnf.search_id;
	var pub_allowed = cnf.pub_allowed;
	var is_pub = cnf.is_pub;

	var grid = cmp.findParentByType('appgrid2') || cmp.findParentByType('appgrid2ed');
	if (!grid) { throw("Failed to find parent with XType appgrid2"); }
	
	var target_url = cnf.target_url;
	var target_params = cnf.target_params;
	var target_iconcls = grid.ownerCt.iconCls;
	
	var search_field = {
		xtype			: 'textfield',
		name			: 'search_name',
		itemId		: 'search_name_field',
		labelStyle	: 'text-align:right;',
		fieldLabel	: 'New Search Name'
	};
	
	var pub_checkbox = {
		xtype			: 'checkbox',
		name			: 'public_search',
		itemId		: 'public_search_field',
		fieldLabel	: 'Public Search',
		labelStyle	: 'text-align:right;'
	};
	
	var hide_items = [ search_field ];
	if (pub_allowed) { hide_items.push(pub_checkbox); }
	
	var hide_fieldset = {
		xtype			: 'fieldset',
		itemId		: 'hide_set',
		style			: 'border: none',
		hideBorders	: true,
		labelWidth	: 110,
		border		: false,
		hidden		: true,
		items			: hide_items
	};
	
	
	var checkbox = {
		xtype			: 'checkbox',
		name			: 'create_search',
		fieldLabel	: 'Save-As New Search',
		labelStyle	: 'text-align:right;',
		listeners: {
			check : function(cb,checked) {
				var fset = cb.ownerCt.getComponent("hide_set");
				if (checked) {
					fset.show();
				} else {
					fset.hide();
				}
			}
		}
	};
	
	var items = [ checkbox, hide_fieldset ];
	if (!search_id) {
		hide_fieldset.hidden = false;
		items = [ {xtype:'spacer', height:15 }, hide_fieldset ];
	}
	if(is_pub && ! pub_allowed) {
		checkbox.disabled = true;
		checkbox.checked = true;
		hide_fieldset.hidden = false;
		items = [ checkbox, hide_fieldset ];
	}
	
	var fieldset = {
		xtype			: 'fieldset',
		style			: 'border: none',
		hideBorders	: true,
		labelWidth	: 120,
		border		: false,
		items			: items
	};
	
	var state_data = Ext.encode(grid.getCurSearchData());
	
	return Ext.ux.RapidApp.WinFormPost({
		title: "Save Search",
		height: 195,
		width: 330,
		url: save_url,
		params: {
			cur_search_id: search_id,
			target_url: target_url,
			target_params: target_params,
			target_iconcls: target_iconcls,
			state_data: state_data
		},
		//eval_response: true,
		fieldset: fieldset,
		success: function(response) {
			var loadTarget = grid.findParentByType("apptabpanel");
			// Reload/refresh the tree:
      Ext.ux.RapidApp.NavCore.reloadMainNavTrees();
			
			if (response && response.responseText) {
				var res = Ext.decode(response.responseText);
				// If there is a loadCnf in the JSON packet it means a new search was
				// created and now we need to load it in a new tab:
				if (res && res.loadCnf) {
					loadTarget.loadContent(res.loadCnf);
				}
			}
		}
	});
};


// New handler function for deleting a search - works with AppGrid2
Ext.ux.RapidApp.NavCore.DeleteSearchHandler = function(cmp,url,search_id) {

	var grid = cmp.findParentByType('appgrid2') || cmp.findParentByType('appgrid2ed');
	if (!grid) { throw("Failed to find parent with XType appgrid2"); }
	
	var fn = function() {
		Ext.Ajax.request({
			url: url,
			params: {
				search_id: search_id
			},
			success: function() {
				var loadTarget = grid.findParentByType("apptabpanel");
				loadTarget.closeActive();
				
				// Reload/refresh the tree:
				Ext.ux.RapidApp.NavCore.reloadMainNavTrees();
			
			}
		
		});
	}
	
	return Ext.ux.RapidApp.confirmDialogCall("Delete Search", "Really Delete This Search?", fn);
};


/*
// TODO: put this in rapidapp and handle properly:
Ext.ux.RapidApp.NavCore.reloadMainNavTree = function() {
	//var loadTarget = Ext.getCmp("main-load-target");
	//var tree = loadTarget.getNavsource();
	//if(!tree) { tree = Ext.getCmp('main-nav-tree'); }
	
	Ext.ux.RapidApp.NavCore.reloadMainNavTreeOnly();
	
	// Now reload the manage NavTree, if its loaded, too:
	var tree = Ext.getCmp('manage-nav-tree');
	if(tree) {
		var rootnode = tree.getRootNode();
		tree.getLoader().load(rootnode);
	}
}
*/


Ext.ux.RapidApp.NavCore.reloadMainNavTrees = function() {
	var container = Ext.getCmp('main-navtrees-container');
  container.items.each(function(tree) {
    if(Ext.isFunction(tree.getRootNode)) {
      var rootnode = tree.getRootNode();
      tree.getLoader().load(rootnode);
    }
  });
}