application.ClipBoard = function() {
	this.simpleTextValue = '';
	
	this.multiSimpleTextValues = [];
	
	this.lexiqueValues = [];
	this.lexiqueName = '';
	
	this.exclusiveLexiqueValue = '';
	this.exclusiceLexiqueName = '';
	
	this.dateValue = '';
	
	this.contactValue = '';
	this.contactRole = '';
	
	this.treeValues = [];
};

application.copypaste = {

	clipBoard: new application.ClipBoard(),

	copy: function(rowId, columnId) {
		var column = application.display.table.columnList[columnId];
		var row = application.result.rowList[rowId];
		
		var value = row.getValue(column.attributeName);
		
		application.copypaste.clipBoard = new application.ClipBoard();
		
		if (column.widget == application.widgetNames.SIMPLETEXT) {
			application.copypaste._copySimpleText(value);
		} else if (column.widget == application.widgetNames.MULTIVALUEDSIMPLETEXT) {
			application.copypaste._copyMultiSimpleText(value);
		} else if (column.widget == application.widgetNames.MULTILINETEXT) {
			application.copypaste._copySimpleText(value);
		} else if (column.widget == application.widgetNames.LEXIQUE) {
			application.copypaste._copyLexique(value, column.lexiqueName);
		} else if (column.widget == application.widgetNames.EXCLUSIVELEXIQUE) {
			application.copypaste._copyExclusiceLexique(value, column.lexiqueName);
		} else if (column.widget == application.widgetNames.TREE) {
			application.copypaste._copyTree(value);
		} else if (column.widget == application.widgetNames.DATE) {
			application.copypaste._copyDate(value);
		} else if (column.widget == application.widgetNames.CONTACT) {
			application.copypaste._copyContact(value);
		}
		
		application.display.hideShowBox(columnId, rowId);
	},

	_copySimpleText: function(value) {
		application.copypaste.clipBoard.simpleTextValue = value;
	},
	
	_copyMultiSimpleText: function(values) {
		application.copypaste.clipBoard.multiSimpleTextValues = values;
	},

	_copyLexique: function(values, name) {
		application.copypaste.clipBoard.lexiqueValues = values;
		application.copypaste.clipBoard.lexiqueName = name;
	},
	
	_copyExclusiceLexique: function(value, name) {
		application.copypaste.clipBoard.exclusiveLexiqueValue = value;
		application.copypaste.clipBoard.exclusiceLexiqueName = name;
	},
	
	_copyDate: function(value) {
		application.copypaste.clipBoard.dateValue = value;
	},
	
	_copyContact: function(value, role) {
		application.copypaste.clipBoard.contactValue = value;
		application.copypaste.clipBoard.contactRole = role;
	},
	
	_copyTree: function(values) {
		application.copypaste.clipBoard.treeValues = values;
	},
	
	paste: function(rowId, columnId) {
		var column = application.display.table.columnList[columnId];
		var row = application.result.rowList[rowId];
	
		if (application.copypaste.canPaste(columnId)) {
			if (application.copypaste._isContactPaste(column)) {
				row.setContact(application.copypaste.clipBoard.contactValue, application.copypaste.clipBoard.contactRole);
			} else {
				var value = application.copypaste._getPasteValue(column);
				row.setValue(column.attributeName, value);
			}
		}
		
		application.display.hideShowBox(columnId, rowId);
		application.display.displayResult();
	},
	
	canPaste: function(columnId) {
		var column = application.display.table.columnList[columnId];

		return ((column.widget == application.widgetNames.SIMPLETEXT
			&& application.copypaste.clipBoard.simpleTextValue.length > 0)
			||
			(column.widget == application.widgetNames.MULTIVALUEDSIMPLETEXT
			&& application.copypaste.clipBoard.multiSimpleTextValues.length > 0)
			||
			(column.widget == application.widgetNames.MULTILINETEXT
			&& application.copypaste.clipBoard.simpleTextValue.length > 0)
			||
			(column.widget == application.widgetNames.LEXIQUE
			&& application.copypaste.clipBoard.lexiqueValues.length > 0
			&& column.lexiqueName == application.copypaste.clipBoard.lexiqueName)
			||
			(column.widget == application.widgetNames.EXCLUSIVELEXIQUE
			&& application.copypaste.clipBoard.exclusiveLexiqueValue.length > 0
			&& column.lexiqueName == application.copypaste.clipBoard.exclusiceLexiqueName)
			||
			(column.widget == application.widgetNames.TREE
			&& application.copypaste.clipBoard.treeValues.length > 0)
			||
			(column.widget == application.widgetNames.DATE
			&& application.copypaste.clipBoard.dateValue.length > 0)
			||
			(column.widget == application.widgetNames.CONTACT
			&& application.copypaste.clipBoard.contactValue.length > 0));
	},
	
	_isContactPaste: function(column) {
		return (column.widget == application.widgetNames.CONTACT
			&& application.copypaste.clipBoard.contactValue.length > 0);
	},
	
	_getPasteValue: function(column) {
		if (application.copypaste.clipBoard.simpleTextValue.length > 0)
			return application.copypaste.clipBoard.simpleTextValue;
		else if (application.copypaste.clipBoard.multiSimpleTextValues.length > 0)
			return application.copypaste.clipBoard.multiSimpleTextValues;
		else if (application.copypaste.clipBoard.lexiqueValues.length > 0
			&& column.lexiqueName == application.copypaste.clipBoard.lexiqueName)
			return application.copypaste.clipBoard.lexiqueValues;
		else if (application.copypaste.clipBoard.exclusiveLexiqueValue.length > 0
			&& column.lexiqueName == application.copypaste.clipBoard.exclusiceLexiqueName)
			return application.copypaste.clipBoard.exclusiveLexiqueValue;
		else if (application.copypaste.clipBoard.treeValues.length > 0)
			return application.copypaste.clipBoard.treeValues;
		else if (application.copypaste.clipBoard.dateValue.length > 0)
			return application.copypaste.clipBoard.dateValue;
	}
};

