Ext.define("Portfolio.registry.controller.view.Detail", {

	extend: "Ext.app.ViewController",

	alias: "controller.registry.view.detail",

	alternateClassName: [
		"Ext.registry.controller.view.Detail"
	],

	doReload: function() {

		var i_controller = this;
		var i_view = i_controller.getView();
		var i_viewModel = i_controller.getViewModel();
		var i_record = i_viewModel.get("record");
		var o_meta = i_view.getMeta();
		var i_tree = i_viewModel.get("tree");
		var i_store = i_tree.getStore();

		if (!i_record.isRoot()) {
			i_record.set("value", i_view.getFieldValue());
			if (o_meta && o_meta.title) {
				i_record.set("text") = ip2.i18n(o_meta.title);
			}
		}

		if (!i_record.isRoot() && !i_record.get("haschildren")) {
			i_record = i_record.parentNode;
		}
		else {
			i_record.commit();
		}
		i_record.removeAll(false);
		i_store.load({
			node: i_record
		});
	},

	doParentReload: function() {

		var i_controller = this;
		var i_view = i_controller.getView();
		var i_viewModel = i_controller.getViewModel();
		var i_record = i_viewModel.get("record");
		var i_tree = i_viewModel.get("tree");

		var i_store = i_tree.getStore();

		if (!i_record.isRoot()) {
			i_record = i_record.parentNode;
		}

		i_record.removeAll(false);
		i_store.load({
			node: i_record
		});
	},

	doCopy: function(o_values, f_callback) {

		var i_controller = this;
		var i_view = i_controller.getView();
		var i_viewModel = i_controller.getViewModel();
		var i_tree = i_viewModel.get("tree");
		var i_store = i_tree.getStore();
		var i_proxy = i_store.getProxy();
		var o_store = i_proxy.dataStore;
		var o_options = i_tree.options;

		Ext.registry.util.Service.doCopy(o_options, o_values, o_store, function(b_result) {
			f_callback(b_result);
		});
	},

	doMove: function(o_values, f_callback) {

		var i_controller = this;
		var i_view = i_controller.getView();
		var i_viewModel = i_controller.getViewModel();
		var i_tree = i_viewModel.get("tree");
		var i_store = i_tree.getStore();
		var i_proxy = i_store.getProxy();
		var o_store = i_proxy.dataStore;
		var o_options = i_tree.options;

		Ext.registry.util.Service.doMove(o_options, o_values, o_store, function(b_result) {
			f_callback(b_result);
		});
	},

	doSaveMeta: function() {

		var i_controller = this;
		var i_view = i_controller.getView();
		var i_viewModel = i_controller.getViewModel();
		var o_meta = i_view.getMeta();
		var i_record = i_viewModel.get("record");
		var i_tree = i_viewModel.get("tree");
		var i_store = i_tree.getStore();
		var i_proxy = i_store.getProxy();
		var o_store = i_proxy.dataStore;
		var o_options = i_tree.options;
		i_record.set("meta", o_meta);
		Ext.registry.util.Service.setValue(o_options, i_record.data, o_store, function(o_record) {
			i_view.updateValueField(i_record);
		});
	},

	onPropertyAdd: function() {

		var i_controller = this;
		var i_view = i_controller.getView();
		var i_viewModel = i_controller.getViewModel();
		var i_record = i_viewModel.get("record");
		var i_tree = i_viewModel.get("tree");
		var i_store = i_tree.getStore();
		var i_proxy = i_store.getProxy();
		var o_store = i_proxy.dataStore;
		var o_options = i_tree.options;

		var i_window = Ext.widget("registry.ui.property.add", {
			width: 400,
			height: 200,
			title: ip2.i18n({
				da: "Tilføj egenskab",
				en: "Add property"
			}),
			parentID: i_record.get("key"),
			children: i_record.get("children"),
			okFn: function(o_value, f_callback) {
				Ext.registry.util.Service.setValue(o_options, o_value, o_store, function(o_record) {
					f_callback();
					i_view.updateProperties(o_record);
				});
			}
		});
		i_window.show();
	}
});
