var TResizerClass = Class.create({
	
	initialize: function() {
		this.States = new Array();
	},

	resize: function(event, element, resizeY) {
		var element = Element.extend(element);
		this.saveState(event, element, resizeY);
		if (resizeY) element.style.cursor = 'se-resize';
		else element.style.cursor = 'e-resize';
		document.body.style.MozUserSelect = 'none';
		element.observe('mousemove', this.doResize.bindAsEventListener(this, element, resizeY));
		element.observe('mouseup', this.endResize.bindAsEventListener(this, element, resizeY));
	},
	
	saveState: function(event, element, resizeY) {
		var id = element.identify();
		this.States[id] = new Array();
		this.States[id]['cursor'] = element.style.cursor;
		this.States[id]['pointerX'] = Event.pointerX(event);
		this.States[id]['width'] = element.getWidth();
		if (resizeY) {
			this.States[id]['pointerY'] = Event.pointerY(event);
			this.States[id]['height'] = element.getHeight();
		}
	},
	
	restoreState: function(element) {
		var id = element.identify();
		element.style.cursor = this.States[id]['cursor'];
		document.body.style.MozUserSelect = '';
	},
	
	doResize: function(event, element, resizeY) {
		var id = element.identify();
		var width = this.States[id]['width'];
		var pointerX = this.States[id]['pointerX'];
		element.style.width = (width + Event.pointerX(event) - pointerX) + "px";
		if (resizeY) {
			var height = this.States[id]['height'];
			var pointerY = this.States[id]['pointerY'];
			element.style.height = (height + Event.pointerY(event) - pointerY) + "px";
		}
		if (event.preventDefault) event.preventDefault(false);
		if (event.stopPropagation) event.stopPropagation(false);
		event.returnValue = false;
		event.stop;
	},
	
	endResize: function(event, element) {
		element.stopObserving('mouseup');
		element.stopObserving('mousemove');
		event.stop;
		this.restoreState(element);
	}
  
});

var TResizer = new TResizerClass();
