var TreeEditor = Class.create();

TreeEditor.prototype = {
	initialize: function() {
	},

	viewModes: new Array(),

	newReferenceStructure: function(referenceStructureName, selectedLanguages, selectedContentItemTypes) {
		var pageURL = application.treeActionUrl;
		var postBody = 'action=newReferenceStructure&referenceStructureName=' + referenceStructureName + '&selectedLanguages=' + selectedLanguages + '&selectedContentItemTypes=' + selectedContentItemTypes;
		var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'post', postBody: postBody, asynchronous: false, evalScripts: true });
	},

	deleteReferenceStructure: function(referenceStructureId) {
		var pageURL = application.treeActionUrl;
		var action = 'deleteReferenceStructure';
		var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: { action: action, referenceStructureId: referenceStructureId }, asynchronous: false, evalScripts: true });
	},

	buildNode: function(params) {
		var allowedRdfTypes = '';
		var predicateUri = '';
		var pageNumber = '';
		var showAnnexItem = false;

		if (params.pageNumber != undefined) {
			pageNumber = params.pageNumber;
		}

		if (params.allowedRdfTypes != undefined) {
			allowedRdfTypes = params.allowedRdfTypes;
		}

		if (params.predicateUri != undefined) {
			predicateUri = params.predicateUri;
		}

		if (params.showAnnexItem != undefined) {
			showAnnexItem = params.showAnnexItem;
		}

		var pageURL = application.treeFragmentUrl;
		var onBuildNode = true;
		var show = true;
		var isNodeRebuilded = 'true';
		var treeFragment = 'node';
		var action = "showTreeFragment";
		var treeViewMode = (this.viewModes[application.referenceStructureId]) ? this.viewModes[application.referenceStructureId] : "allItems";
		var postBody = ""; //"allowedRdfTypes=" + allowedRdfTypes + "&allowedSubContentItemSubTypes=" + allowedSubContentItemSubTypes;

		var myAjax = new Ajax.Updater({ success: $('li_' + application.nodeId) }, pageURL, { method: 'post', parameters: { referenceStructureId: application.referenceStructureId, rootNodeId: application.rootNodeId, nodeId: application.nodeId, treeFragment: treeFragment, isNodeRebuilded: isNodeRebuilded, action: action, treeViewMode: treeViewMode, pageNumber: pageNumber, showAnnexItem: showAnnexItem, postBody: postBody, allowedRdfTypes: allowedRdfTypes, predicateUri: predicateUri }, asynchronous: false, onComplete: function(t) { applicationUpdateNode(application.nodeId, show, onBuildNode); } });
	},

	newLinkNode: function(nodeId, linkType) {
		var pageURL = application.treeActionUrl;
		var action = 'newLinkNode';

		var parameters = 'action=' + action + '&linkType=' + linkType + '&nodeId=' + nodeId + selection.toRequest();
		var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: parameters, asynchronous: false, evalScripts: true });
	},

	deleteLinkNode: function(referrerNodeId, linkType) {
		var pageURL = application.treeActionUrl;
		var action = 'deleteLinkNode';

		var parameters = 'action=' + action + '&linkType=' + linkType + '&referrerNodeId=' + referrerNodeId
		var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: parameters, asynchronous: false, evalScripts: true });
	},

	moveItem: function() {
		var action = 'moveItem';
		var pageURL = application.treeActionUrl;
		var moveMode = application.moveMode;

		if (selection.length() == 2) {
			var parameters = 'action=' + action + '&moveMode=' + moveMode + selection.toRequest();
			var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: parameters, asynchronous: false, evalScripts: true });
		} else {
			selection.reset();
		}
	},

	removeItem: function() {
		var action = 'removeItem';
		var pageURL = application.treeActionUrl;

		if (selection.length() == 1) {
			var parameters = 'action=' + action + selection.toRequest();
			var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: parameters, asynchronous: false, evalScripts: true });
		}
	},

	restoreItem: function() {
		var action = 'restoreItem';
		var pageURL = application.treeActionUrl;

		if (selection.length() == 1) {
			if (confirm(strings.applicationConfirmRestoreNode)) {
				var parameters = 'action=' + action + selection.toRequest();
				var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: parameters, asynchronous: false, evalScripts: true });
			}
		}
	},

	deleteItem: function() {
		var action = 'deleteItem';
		var pageURL = application.treeActionUrl;

		if (selection.length() == 1) {
			if (confirm(strings.applicationConfirmDeleteNode)) {
				var parameters = 'action=' + action + selection.toRequest();
				var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: parameters, asynchronous: false, evalScripts: true });
			}
		}
	},

	mergeItem: function() {
		var action = 'mergeItem';
		var pageURL = application.treeActionUrl;

		if (selection.length() == 2) {
			var parameters = 'action=' + action + selection.toRequest();
			var myAjax = new Ajax.Updater({ success: 'statusBar' }, pageURL, { method: 'get', parameters: parameters, asynchronous: false, evalScripts: true });
		} 
		else {
			selection.reset();
		}
	}

};

function onDoubleClickNode()
{
	// on DoulbeClick event in normal tree, 
	// this empty function should be overwritten in (for example) dialogs whenever a action should be triggered by this event
}			


