function Resizer() {
	browser.register_handler('mousedown',this.mouse_down);
	browser.register_handler('mouseup',this.mouse_up);
	browser.register_handler('mousemove',this.mouse_move);

	this.grips = new Array();
	this.startX = 0;
	this.startY = 0;
	this.grip = null;
	this.resizing = false;

	window.resizer = this;
}

Resizer.prototype.register = function(elementid,resizestart,resizemove,resizedone) {
	var resizegrip = {
		"element": elementid,
		"start": resizestart,
		"move": resizemove,
		"done": resizedone
	}
	this.grips.push(resizegrip);
}

// Called when the mouse moves to handle various drag/drop tasks
Resizer.prototype.mouse_move = function(e) {
	var r = window.resizer;

	if (!r.resizing) return;

	var dX = e.clientX - r.startX;
	var dY = e.clientY - r.startY;
	
	if (typeof r.grip.move == 'function') r.grip.move(r.element,dX,dY);
}

// Called when the user presses the mouse button
// TODO: this should only work when the left button is pressed :)
Resizer.prototype.mouse_down = function(e) {
	var r = window.resizer;

	var gripelement = e.target;
	
	var canresize = false;
	
	for (var i=0; i<window.resizer.grips.length; i++) {
		var grip = window.resizer.grips[i];
		if (grip.element==gripelement.id) {
			canresize = true;
			break;
		}
	}
	if (!canresize) return;

	r.startX = e.clientX;
	r.startY = e.clientY;
	r.element = gripelement;
	r.grip = grip;
	r.resizing = true;
	
	if (typeof r.grip.start == 'function') r.grip.start(r.element);
}

// Called when the user releases the mouse button
Resizer.prototype.mouse_up = function(e) {
	var r = window.resizer;
	
	// if we're dragging an object, we need to drop it
	if (r.resizing) {
		if (typeof r.grip.done == 'function') r.grip.done(r.element);
		r.resizing = false;
	}

}
