
function massEdit(div, stringArray, callback) {
    // support passing a string instead of an array,
	// in which case we break the string into an array based on line-breaks,
	// and we make the callback take a string by putting all the strings back together with line-breaks
	if ((typeof stringArray) == "string") {
	    stringArray = stringArray.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
	    massEdit(div, stringArray.split("\n"), function (stringArray) {
	    	if (stringArray) {
	    		callback(stringArray.join("\n"))
	    	} else {
	    		callback(null)
	    	}
	    })
	    return
	}

	// utility function
	function createLineEntries(stringArray) {
		var lines = []
		for (var i = 0; i < stringArray.length; i++) {
			lines[i] = {
				text : stringArray[i],
				order : i
			}
		}
		return lines
	}
	
	var lines = createLineEntries(stringArray)	
	MassEditInterface.prepareMassEditDiv(div)
	
	MassEditInterface.cancel_callback = function(clusters) {
	    MassEditInterface._clearAllColumns();
		callback(null)
	}
	MassEditInterface.done_callback = function(clusters) {
		var outputArray = [];
		for(var i=0; i < clusters.length; i++) {
			var valueStructures = clusters[i].valueStructures;
			for(var j=0; j < valueStructures.length; j++) {
				var structure = valueStructures[j];
				outputArray[structure.record.order] = structure.values[0];
			}
		}
	    MassEditInterface._clearAllColumns();
		callback(outputArray)
	};	

	MassEditInterface.updateEventInTheQueue = false
	MassEdit.onChangeCallback = function() { }
	
    MassEdit.startEdit(lines, MassEditInterface._createColumn, MassEditInterface._clearAllColumns);
}
