script.coordinateSystem = 'bottom-up';

var values = {
	shattered: 1,
	rotation: 0
}

var path, sourceItem; 
function onMouseDown(event) {
	//print(document.selectedItems.length);
	if (document.selectedItems.length == 0) {
		Dialog.alert('Please select an item first!');
		sourceItem = null;
	} else if (document.selectedItems.length == 1) {
		path = new Path(); 
		path.add(event.point);
		path.add(event.point); 
		path.fillColor = 'white'
		path.strokeColor = 'black';
		sourceItem = document.selectedItems[0];
	} if (document.selectedItems.length == 2) {
		path = document.selectedItems[0];
		sourceItem = document.selectedItems[1];
		explode(event, path);
		sourceItem = null;
	}
} 
 
function onMouseDrag(event) {
	if(sourceItem) {
		if(Key.isDown('space')) { 
			path.add(event.point); 
		} else { 
			path.segments.last.point = event.point; 
		} 
	}
}
function onMouseUp(event) {
	if (sourceItem) {
		path.add(event.point);
		path.closed = true;
		explode(event, path);
	}
}

function explode(event, path) {
	// Hack around Pathfinder Problem of not producing solutions
	// when path does not intersect:
	var bounds = sourceItem.bounds;
//	var rect = new Path.Rectangle(bounds);
//	rect.fillColor = 'white';
//	var result = Pathfinder.divide([rect, path]);
	var result = Pathfinder.divide([path]);
	var items;
	if (result.children.length > 0) {
		items = result.children;
	} else {
		items = [result];
	}
	if (items.length) {
		backgroundPosition = sourceItem.position;
	var backgroundSymbol = new Symbol(sourceItem);


		for (var i = 0; i <  items.length; i++) {
			var item = items[i];
			if (item.bounds == bounds) {
				item.remove();
			} else {
				var vector = item.position - event.downPoint;
				var newPos = event.downPoint + vector * values.shattered;
				var moveVector = newPos - item.position;

				var cloned = new PlacedSymbol(backgroundSymbol); 
				cloned.position = sourceItem.position;
				var group = new Group();
				group.appendTop(cloned);
				group.appendTop(item);
				group.clipped = true;

				group.rotate(vector.length * values.rotation / 100, item.position);
				group.position += moveVector;
			}
		}
	}
	sourceItem.visible = false;
}

var components = {
	shattered: {
		type: 'slider', label: 'Shattered',
		value: 5, range: [1, 2], increment: 0.05
		
	},

	rotation: {
		type: 'slider', label: 'Rotate',
		value: 0, range: [0, 26]
		
	}
};

var palette = new Palette('Shatter', components, values);
